Fock Space¶
AUTHORS:
Travis Scrimshaw (2013-05-03): Initial version
- class sage.algebras.quantum_groups.fock_space.FockSpace(n, multicharge, q, base_ring)[source]¶
Bases:
Parent
,UniqueRepresentation
The (fermionic) Fock space of \(U_q(\widehat{\mathfrak{sl}}_n)\) with multicharge \((\gamma_1, \ldots, \gamma_m)\).
Fix a positive integer \(n > 1\) and fix a sequence \(\gamma = (\gamma_1, \ldots, \gamma_m)\), where \(\gamma_i \in \ZZ / n \ZZ\). (fermionic) Fock space \(\mathcal{F}\) with multicharge \(\gamma\) is a \(U_q(\widehat{\mathfrak{gl}}_n)\)-representation with a basis \(\{ |\lambda \rangle \}\), where \(\lambda\) is a partition tuple of level \(m\). By considering \(\mathcal{F}\) as a \(U_q(\widehat{\mathfrak{sl}}_n)\)-representation, it is not irreducible, but the submodule generated by \(| \emptyset^m \rangle\) is isomorphic to the highest weight module \(V(\mu)\), where the highest weight \(\mu = \sum_i \Lambda_{\gamma_i}\).
Let \(R_i(\lambda)\) and \(A_i(\lambda)\) be the set of removable and addable, respectively, \(i\)-cells of \(\lambda\), where an \(i\)-cell is a cell of residue \(i\) (i.e., content modulo n). The action of \(U_q(\widehat{\mathfrak{sl}}_n)\) is given as follows:
\[\begin{split}\begin{aligned} e_i | \lambda \rangle & = \sum_{c \in R_i(\lambda)} q^{M_i(\lambda, c)} | \lambda + c \rangle, \\ f_i | \lambda \rangle & = \sum_{c \in A_i(\lambda)} q^{N_i(\lambda, c)} | \lambda - c \rangle, \\ q^{h_i} | \lambda \rangle & = q^{N_i(\lambda)} | \lambda \rangle, \\ q^d | \lambda \rangle & = q^{-N^{(0)}(\lambda)} | \lambda \rangle, \end{aligned}\end{split}\]where
\(M_i(\lambda, c)\) (resp. \(N_i(\lambda, c)\)) is the number of removable (resp. addable) \(i\)-cells of \(\lambda\) below (resp. above) \(c\) minus the number of addable (resp. removable) \(i\)-cells of \(\lambda\) below (resp. above) \(c\),
\(N_i(\lambda)\) is the number of addable \(i\)-cells minus the number of removable \(i\)-cells, and
\(N^{(0)}(\lambda)\) is the total number of \(0\)-cells of \(\lambda\).
Another interpretation of Fock space is as a semi-infinite wedge product (which each factor we can think of as fermions). This allows a description of the \(U_q(\widehat{\mathfrak{gl}}_n)\) action, as well as an explicit description of the bar involution. In particular, the bar involution is the unique semi-linear map satisfying
\(q \mapsto q^{-1}\),
\(\overline{| \emptyset \rangle} = | \emptyset \rangle\), and
\(\overline{f_i | \lambda \rangle} = f_i \overline{| \lambda \rangle}\).
We then define the canonical basis or (lower) global crystal basis as the unique basis of \(\mathcal{F}\) such that
\(\overline{G(\lambda)} = G(\lambda)\),
\(G(\lambda) \equiv | \lambda \rangle \mod q \ZZ[q]\).
It is also known that this basis is upper unitriangular with respect to dominance order and that both the natural basis and the canonical basis of \(\mathcal{F}\) are \(\ZZ\)-graded by \(|\lambda|\). Additionally, the transition matrices \((d_{\lambda, \nu})_{\lambda,\nu \vdash n}\) given by
\[G(\nu) = \sum_{\lambda \vdash |\nu|} d_{\lambda,\nu} |\lambda \rangle\]described the decomposition matrices of the Hecke algebras when restricting to \(V(\mu)\) [Ariki1996].
To go between the canonical basis and the natural basis, for level 1 Fock space, we follow the LLT algorithm [LLT1996]. Indeed, we first construct a basis \(\{ A(\nu) \}\) that is an approximation to the lower global crystal basis, in the sense that it is bar-invariant, and then use Gaussian elimination to construct the lower global crystal basis. For higher level Fock space, we follow [Fayers2010], where the higher level is considered as a tensor product space of the corresponding level 1 Fock spaces.
There are three bases currently implemented:
The natural basis:
F
.The approximation basis that comes from LLT(-type) algorithms:
A
.The lower global crystal basis:
G
.
Todo
Implement the approximation and lower global crystal bases on all partition tuples.
Implement the bar involution.
Implement the full \(U_q(\widehat{\mathfrak{gl}})\)-action.
INPUT:
n
– the value \(n\)multicharge
– (default:[0]
) the multichargeq
– (optional) the parameter \(q\)base_ring
– (optional) the base ring containingq
EXAMPLES:
We start by constructing the natural basis and doing some computations:
sage: Fock = FockSpace(3) sage: F = Fock.natural() sage: u = F.highest_weight_vector() sage: u.f(0,2,(1,2),0) |2, 2, 1> + q*|2, 1, 1, 1> sage: u.f(0,2,(1,2),0,2) |3, 2, 1> + q*|3, 1, 1, 1> + q*|2, 2, 2> + q^2*|2, 1, 1, 1, 1> sage: x = u.f(0,2,(1,2),0,2) sage: [x.h(i) for i in range(3)] [q*|3, 2, 1> + q^2*|3, 1, 1, 1> + q^2*|2, 2, 2> + q^3*|2, 1, 1, 1, 1>, |3, 2, 1> + q*|3, 1, 1, 1> + q*|2, 2, 2> + q^2*|2, 1, 1, 1, 1>, |3, 2, 1> + q*|3, 1, 1, 1> + q*|2, 2, 2> + q^2*|2, 1, 1, 1, 1>] sage: [x.h_inverse(i) for i in range(3)] [1/q*|3, 2, 1> + |3, 1, 1, 1> + |2, 2, 2> + q*|2, 1, 1, 1, 1>, |3, 2, 1> + q*|3, 1, 1, 1> + q*|2, 2, 2> + q^2*|2, 1, 1, 1, 1>, |3, 2, 1> + q*|3, 1, 1, 1> + q*|2, 2, 2> + q^2*|2, 1, 1, 1, 1>] sage: x.d() 1/q^2*|3, 2, 1> + 1/q*|3, 1, 1, 1> + 1/q*|2, 2, 2> + |2, 1, 1, 1, 1>
>>> from sage.all import * >>> Fock = FockSpace(Integer(3)) >>> F = Fock.natural() >>> u = F.highest_weight_vector() >>> u.f(Integer(0),Integer(2),(Integer(1),Integer(2)),Integer(0)) |2, 2, 1> + q*|2, 1, 1, 1> >>> u.f(Integer(0),Integer(2),(Integer(1),Integer(2)),Integer(0),Integer(2)) |3, 2, 1> + q*|3, 1, 1, 1> + q*|2, 2, 2> + q^2*|2, 1, 1, 1, 1> >>> x = u.f(Integer(0),Integer(2),(Integer(1),Integer(2)),Integer(0),Integer(2)) >>> [x.h(i) for i in range(Integer(3))] [q*|3, 2, 1> + q^2*|3, 1, 1, 1> + q^2*|2, 2, 2> + q^3*|2, 1, 1, 1, 1>, |3, 2, 1> + q*|3, 1, 1, 1> + q*|2, 2, 2> + q^2*|2, 1, 1, 1, 1>, |3, 2, 1> + q*|3, 1, 1, 1> + q*|2, 2, 2> + q^2*|2, 1, 1, 1, 1>] >>> [x.h_inverse(i) for i in range(Integer(3))] [1/q*|3, 2, 1> + |3, 1, 1, 1> + |2, 2, 2> + q*|2, 1, 1, 1, 1>, |3, 2, 1> + q*|3, 1, 1, 1> + q*|2, 2, 2> + q^2*|2, 1, 1, 1, 1>, |3, 2, 1> + q*|3, 1, 1, 1> + q*|2, 2, 2> + q^2*|2, 1, 1, 1, 1>] >>> x.d() 1/q^2*|3, 2, 1> + 1/q*|3, 1, 1, 1> + 1/q*|2, 2, 2> + |2, 1, 1, 1, 1>
Next, we construct the approximation and lower global crystal bases and convert to the natural basis:
sage: A = Fock.A() sage: G = Fock.G() sage: F(A[4,2,2,1]) |4, 2, 2, 1> + q*|4, 2, 1, 1, 1> sage: F(G[4,2,2,1]) |4, 2, 2, 1> + q*|4, 2, 1, 1, 1> sage: F(A[7,3,2,1,1]) |7, 3, 2, 1, 1> + q*|7, 2, 2, 2, 1> + q^2*|7, 2, 2, 1, 1, 1> + q*|6, 3, 3, 1, 1> + q^2*|6, 2, 2, 2, 2> + q^3*|6, 2, 2, 1, 1, 1, 1> + q*|5, 5, 2, 1, 1> + q^2*|5, 4, 3, 1, 1> + (q^2+1)*|4, 4, 3, 2, 1> + (q^3+q)*|4, 4, 3, 1, 1, 1> + (q^3+q)*|4, 4, 2, 2, 2> + (q^4+q^2)*|4, 4, 2, 1, 1, 1, 1> + q*|4, 3, 3, 3, 1> + q^2*|4, 3, 2, 1, 1, 1, 1, 1> + q^2*|4, 2, 2, 2, 2, 2> + q^3*|4, 2, 2, 2, 1, 1, 1, 1> + q^2*|3, 3, 3, 3, 2> + q^3*|3, 3, 3, 1, 1, 1, 1, 1> + q^3*|3, 2, 2, 2, 2, 2, 1> + q^4*|3, 2, 2, 2, 2, 1, 1, 1> sage: F(G[7,3,2,1,1]) |7, 3, 2, 1, 1> + q*|7, 2, 2, 2, 1> + q^2*|7, 2, 2, 1, 1, 1> + q*|6, 3, 3, 1, 1> + q^2*|6, 2, 2, 2, 2> + q^3*|6, 2, 2, 1, 1, 1, 1> + q*|5, 5, 2, 1, 1> + q^2*|5, 4, 3, 1, 1> + q^2*|4, 4, 3, 2, 1> + q^3*|4, 4, 3, 1, 1, 1> + q^3*|4, 4, 2, 2, 2> + q^4*|4, 4, 2, 1, 1, 1, 1> sage: A(F(G[7,3,2,1,1])) A[7, 3, 2, 1, 1] - A[4, 4, 3, 2, 1] sage: G(F(A[7,3,2,1,1])) G[7, 3, 2, 1, 1] + G[4, 4, 3, 2, 1] sage: A(F(G[8,4,3,2,2,1])) A[8, 4, 3, 2, 2, 1] - A[6, 4, 4, 2, 2, 1, 1] - A[5, 5, 4, 3, 2, 1] + ((-q^2-1)/q)*A[5, 4, 4, 3, 2, 1, 1] sage: G(F(A[8,4,3,2,2,1])) G[8, 4, 3, 2, 2, 1] + G[6, 4, 4, 2, 2, 1, 1] + G[5, 5, 4, 3, 2, 1] + ((q^2+1)/q)*G[5, 4, 4, 3, 2, 1, 1]
>>> from sage.all import * >>> A = Fock.A() >>> G = Fock.G() >>> F(A[Integer(4),Integer(2),Integer(2),Integer(1)]) |4, 2, 2, 1> + q*|4, 2, 1, 1, 1> >>> F(G[Integer(4),Integer(2),Integer(2),Integer(1)]) |4, 2, 2, 1> + q*|4, 2, 1, 1, 1> >>> F(A[Integer(7),Integer(3),Integer(2),Integer(1),Integer(1)]) |7, 3, 2, 1, 1> + q*|7, 2, 2, 2, 1> + q^2*|7, 2, 2, 1, 1, 1> + q*|6, 3, 3, 1, 1> + q^2*|6, 2, 2, 2, 2> + q^3*|6, 2, 2, 1, 1, 1, 1> + q*|5, 5, 2, 1, 1> + q^2*|5, 4, 3, 1, 1> + (q^2+1)*|4, 4, 3, 2, 1> + (q^3+q)*|4, 4, 3, 1, 1, 1> + (q^3+q)*|4, 4, 2, 2, 2> + (q^4+q^2)*|4, 4, 2, 1, 1, 1, 1> + q*|4, 3, 3, 3, 1> + q^2*|4, 3, 2, 1, 1, 1, 1, 1> + q^2*|4, 2, 2, 2, 2, 2> + q^3*|4, 2, 2, 2, 1, 1, 1, 1> + q^2*|3, 3, 3, 3, 2> + q^3*|3, 3, 3, 1, 1, 1, 1, 1> + q^3*|3, 2, 2, 2, 2, 2, 1> + q^4*|3, 2, 2, 2, 2, 1, 1, 1> >>> F(G[Integer(7),Integer(3),Integer(2),Integer(1),Integer(1)]) |7, 3, 2, 1, 1> + q*|7, 2, 2, 2, 1> + q^2*|7, 2, 2, 1, 1, 1> + q*|6, 3, 3, 1, 1> + q^2*|6, 2, 2, 2, 2> + q^3*|6, 2, 2, 1, 1, 1, 1> + q*|5, 5, 2, 1, 1> + q^2*|5, 4, 3, 1, 1> + q^2*|4, 4, 3, 2, 1> + q^3*|4, 4, 3, 1, 1, 1> + q^3*|4, 4, 2, 2, 2> + q^4*|4, 4, 2, 1, 1, 1, 1> >>> A(F(G[Integer(7),Integer(3),Integer(2),Integer(1),Integer(1)])) A[7, 3, 2, 1, 1] - A[4, 4, 3, 2, 1] >>> G(F(A[Integer(7),Integer(3),Integer(2),Integer(1),Integer(1)])) G[7, 3, 2, 1, 1] + G[4, 4, 3, 2, 1] >>> A(F(G[Integer(8),Integer(4),Integer(3),Integer(2),Integer(2),Integer(1)])) A[8, 4, 3, 2, 2, 1] - A[6, 4, 4, 2, 2, 1, 1] - A[5, 5, 4, 3, 2, 1] + ((-q^2-1)/q)*A[5, 4, 4, 3, 2, 1, 1] >>> G(F(A[Integer(8),Integer(4),Integer(3),Integer(2),Integer(2),Integer(1)])) G[8, 4, 3, 2, 2, 1] + G[6, 4, 4, 2, 2, 1, 1] + G[5, 5, 4, 3, 2, 1] + ((q^2+1)/q)*G[5, 4, 4, 3, 2, 1, 1]
We can also construct higher level Fock spaces and perform similar computations:
sage: Fock = FockSpace(3, [1,0]) sage: F = Fock.natural() sage: A = Fock.A() sage: G = Fock.G() sage: F(G[[2,1],[4,1,1]]) |[2, 1], [4, 1, 1]> + q*|[2, 1], [3, 2, 1]> + q^2*|[2, 1], [3, 1, 1, 1]> + q^2*|[2], [4, 2, 1]> + q^3*|[2], [4, 1, 1, 1]> + q^4*|[2], [3, 2, 1, 1]> + q*|[1, 1, 1], [4, 1, 1]> + q^2*|[1, 1, 1], [3, 2, 1]> + q^3*|[1, 1, 1], [3, 1, 1, 1]> + q^2*|[1, 1], [3, 2, 2]> + q^3*|[1, 1], [3, 1, 1, 1, 1]> + q^3*|[1], [4, 2, 2]> + q^4*|[1], [4, 1, 1, 1, 1]> + q^4*|[1], [3, 2, 2, 1]> + q^5*|[1], [3, 2, 1, 1, 1]> sage: A(F(G[[2,1],[4,1,1]])) A([2, 1], [4, 1, 1]) - A([2], [4, 2, 1]) sage: G(F(A[[2,1],[4,1,1]])) G([2, 1], [4, 1, 1]) + G([2], [4, 2, 1])
>>> from sage.all import * >>> Fock = FockSpace(Integer(3), [Integer(1),Integer(0)]) >>> F = Fock.natural() >>> A = Fock.A() >>> G = Fock.G() >>> F(G[[Integer(2),Integer(1)],[Integer(4),Integer(1),Integer(1)]]) |[2, 1], [4, 1, 1]> + q*|[2, 1], [3, 2, 1]> + q^2*|[2, 1], [3, 1, 1, 1]> + q^2*|[2], [4, 2, 1]> + q^3*|[2], [4, 1, 1, 1]> + q^4*|[2], [3, 2, 1, 1]> + q*|[1, 1, 1], [4, 1, 1]> + q^2*|[1, 1, 1], [3, 2, 1]> + q^3*|[1, 1, 1], [3, 1, 1, 1]> + q^2*|[1, 1], [3, 2, 2]> + q^3*|[1, 1], [3, 1, 1, 1, 1]> + q^3*|[1], [4, 2, 2]> + q^4*|[1], [4, 1, 1, 1, 1]> + q^4*|[1], [3, 2, 2, 1]> + q^5*|[1], [3, 2, 1, 1, 1]> >>> A(F(G[[Integer(2),Integer(1)],[Integer(4),Integer(1),Integer(1)]])) A([2, 1], [4, 1, 1]) - A([2], [4, 2, 1]) >>> G(F(A[[Integer(2),Integer(1)],[Integer(4),Integer(1),Integer(1)]])) G([2, 1], [4, 1, 1]) + G([2], [4, 2, 1])
For level \(0\), the truncated Fock space of [GW1999] is implemented. This can be used to improve the speed of the computation of the lower global crystal basis, provided the truncation is not too small:
sage: FS = FockSpace(2) sage: F = FS.natural() sage: G = FS.G() sage: FS3 = FockSpace(2, truncated=3) sage: F3 = FS3.natural() sage: G3 = FS3.G() sage: F(G[6,2,1]) |6, 2, 1> + q*|5, 3, 1> + q^2*|5, 2, 2> + q^3*|5, 2, 1, 1> + q*|4, 2, 1, 1, 1> + q^2*|3, 3, 1, 1, 1> + q^3*|3, 2, 2, 1, 1> + q^4*|3, 2, 1, 1, 1, 1> sage: F3(G3[6,2,1]) |6, 2, 1> + q*|5, 3, 1> + q^2*|5, 2, 2> sage: FS5 = FockSpace(2, truncated=5) sage: F5 = FS5.natural() sage: G5 = FS5.G() sage: F5(G5[6,2,1]) |6, 2, 1> + q*|5, 3, 1> + q^2*|5, 2, 2> + q^3*|5, 2, 1, 1> + q*|4, 2, 1, 1, 1> + q^2*|3, 3, 1, 1, 1> + q^3*|3, 2, 2, 1, 1>
>>> from sage.all import * >>> FS = FockSpace(Integer(2)) >>> F = FS.natural() >>> G = FS.G() >>> FS3 = FockSpace(Integer(2), truncated=Integer(3)) >>> F3 = FS3.natural() >>> G3 = FS3.G() >>> F(G[Integer(6),Integer(2),Integer(1)]) |6, 2, 1> + q*|5, 3, 1> + q^2*|5, 2, 2> + q^3*|5, 2, 1, 1> + q*|4, 2, 1, 1, 1> + q^2*|3, 3, 1, 1, 1> + q^3*|3, 2, 2, 1, 1> + q^4*|3, 2, 1, 1, 1, 1> >>> F3(G3[Integer(6),Integer(2),Integer(1)]) |6, 2, 1> + q*|5, 3, 1> + q^2*|5, 2, 2> >>> FS5 = FockSpace(Integer(2), truncated=Integer(5)) >>> F5 = FS5.natural() >>> G5 = FS5.G() >>> F5(G5[Integer(6),Integer(2),Integer(1)]) |6, 2, 1> + q*|5, 3, 1> + q^2*|5, 2, 2> + q^3*|5, 2, 1, 1> + q*|4, 2, 1, 1, 1> + q^2*|3, 3, 1, 1, 1> + q^3*|3, 2, 2, 1, 1>
REFERENCES:
- class A(F)[source]¶
Bases:
CombinatorialFreeModule
,BindableClass
The \(A\) basis of the Fock space which is the approximation of the lower global crystal basis.
The approximation basis \(A\) is a basis that is constructed from the highest weight element by applying divided difference operators using the ladder construction of [LLT1996] and [GW1999]. Thus, this basis is bar invariant and upper unitriangular (using dominance order on partitions) when expressed in the natural basis. This basis is then converted to the lower global crystal basis by using Gaussian elimination.
EXAMPLES:
We construct Example 6.5 and 6.7 in [LLT1996]:
sage: FS = FockSpace(2) sage: F = FS.natural() sage: G = FS.G() sage: A = FS.A() sage: F(A[5]) |5> + |3, 2> + 2*q*|3, 1, 1> + q^2*|2, 2, 1> + q^2*|1, 1, 1, 1, 1> sage: F(A[4,1]) |4, 1> + q*|2, 1, 1, 1> sage: F(A[3,2]) |3, 2> + q*|3, 1, 1> + q^2*|2, 2, 1> sage: F(G[5]) |5> + q*|3, 1, 1> + q^2*|1, 1, 1, 1, 1>
>>> from sage.all import * >>> FS = FockSpace(Integer(2)) >>> F = FS.natural() >>> G = FS.G() >>> A = FS.A() >>> F(A[Integer(5)]) |5> + |3, 2> + 2*q*|3, 1, 1> + q^2*|2, 2, 1> + q^2*|1, 1, 1, 1, 1> >>> F(A[Integer(4),Integer(1)]) |4, 1> + q*|2, 1, 1, 1> >>> F(A[Integer(3),Integer(2)]) |3, 2> + q*|3, 1, 1> + q^2*|2, 2, 1> >>> F(G[Integer(5)]) |5> + q*|3, 1, 1> + q^2*|1, 1, 1, 1, 1>
We construct the examples in Section 5.1 of [Fayers2010]:
sage: FS = FockSpace(2, [0, 0]) sage: F = FS.natural() sage: A = FS.A() sage: F(A[[2,1],[1]]) |[2, 1], [1]> + q*|[2], [2]> + q^2*|[2], [1, 1]> + q^2*|[1, 1], [2]> + q^3*|[1, 1], [1, 1]> + q^4*|[1], [2, 1]> sage: F(A[[4],[]]) |[4], []> + q*|[3, 1], []> + q*|[2, 1, 1], []> + (q^2+1)*|[2, 1], [1]> + 2*q*|[2], [2]> + 2*q^2*|[2], [1, 1]> + q^2*|[1, 1, 1, 1], []> + 2*q^2*|[1, 1], [2]> + 2*q^3*|[1, 1], [1, 1]> + (q^4+q^2)*|[1], [2, 1]> + q^2*|[], [4]> + q^3*|[], [3, 1]> + q^3*|[], [2, 1, 1]> + q^4*|[], [1, 1, 1, 1]>
>>> from sage.all import * >>> FS = FockSpace(Integer(2), [Integer(0), Integer(0)]) >>> F = FS.natural() >>> A = FS.A() >>> F(A[[Integer(2),Integer(1)],[Integer(1)]]) |[2, 1], [1]> + q*|[2], [2]> + q^2*|[2], [1, 1]> + q^2*|[1, 1], [2]> + q^3*|[1, 1], [1, 1]> + q^4*|[1], [2, 1]> >>> F(A[[Integer(4)],[]]) |[4], []> + q*|[3, 1], []> + q*|[2, 1, 1], []> + (q^2+1)*|[2, 1], [1]> + 2*q*|[2], [2]> + 2*q^2*|[2], [1, 1]> + q^2*|[1, 1, 1, 1], []> + 2*q^2*|[1, 1], [2]> + 2*q^3*|[1, 1], [1, 1]> + (q^4+q^2)*|[1], [2, 1]> + q^2*|[], [4]> + q^3*|[], [3, 1]> + q^3*|[], [2, 1, 1]> + q^4*|[], [1, 1, 1, 1]>
- class F(F)[source]¶
Bases:
CombinatorialFreeModule
,BindableClass
The natural basis of the Fock space.
This is the basis indexed by partitions. This has an action of the quantum group \(U_q(\widehat{\mathfrak{sl}}_n)\) described in
FockSpace
.EXAMPLES:
We construct the natural basis and perform some computations:
sage: F = FockSpace(4).natural() sage: q = F.q() sage: u = F.highest_weight_vector() sage: u |> sage: u.f(0,1,2) |3> sage: u.f(0,1,3) |2, 1> sage: u.f(0,1,2,0) 0 sage: u.f(0,1,3,2) |3, 1> + q*|2, 1, 1> sage: u.f(0,1,2,3) |4> + q*|3, 1> sage: u.f(0,1,3,2,2,0) ((q^2+1)/q)*|3, 2, 1> sage: x = (q^4 * u + u.f(0,1,3,(2,2))) sage: x |3, 1, 1> + q^4*|> sage: x.f(0,1,3) |4, 3, 1> + q*|4, 2, 1, 1> + q*|3, 3, 2> + q^2*|3, 2, 2, 1> + q^4*|2, 1> sage: x.h_inverse(2) q^2*|3, 1, 1> + q^4*|> sage: x.h_inverse(0) 1/q*|3, 1, 1> + q^3*|> sage: x.d() 1/q*|3, 1, 1> + q^4*|> sage: x.e(2) |3, 1> + q*|2, 1, 1>
>>> from sage.all import * >>> F = FockSpace(Integer(4)).natural() >>> q = F.q() >>> u = F.highest_weight_vector() >>> u |> >>> u.f(Integer(0),Integer(1),Integer(2)) |3> >>> u.f(Integer(0),Integer(1),Integer(3)) |2, 1> >>> u.f(Integer(0),Integer(1),Integer(2),Integer(0)) 0 >>> u.f(Integer(0),Integer(1),Integer(3),Integer(2)) |3, 1> + q*|2, 1, 1> >>> u.f(Integer(0),Integer(1),Integer(2),Integer(3)) |4> + q*|3, 1> >>> u.f(Integer(0),Integer(1),Integer(3),Integer(2),Integer(2),Integer(0)) ((q^2+1)/q)*|3, 2, 1> >>> x = (q**Integer(4) * u + u.f(Integer(0),Integer(1),Integer(3),(Integer(2),Integer(2)))) >>> x |3, 1, 1> + q^4*|> >>> x.f(Integer(0),Integer(1),Integer(3)) |4, 3, 1> + q*|4, 2, 1, 1> + q*|3, 3, 2> + q^2*|3, 2, 2, 1> + q^4*|2, 1> >>> x.h_inverse(Integer(2)) q^2*|3, 1, 1> + q^4*|> >>> x.h_inverse(Integer(0)) 1/q*|3, 1, 1> + q^3*|> >>> x.d() 1/q*|3, 1, 1> + q^4*|> >>> x.e(Integer(2)) |3, 1> + q*|2, 1, 1>
- class Element[source]¶
Bases:
IndexedFreeModuleElement
An element in the Fock space.
- d()[source]¶
Apply the action of \(d\) on
self
.EXAMPLES:
sage: F = FockSpace(2) sage: F.highest_weight_vector().d() |> sage: F[2,1,1].d() 1/q^2*|2, 1, 1> sage: F[5,3,3,1,1,1].d() 1/q^7*|5, 3, 3, 1, 1, 1> sage: F = FockSpace(4, [2,0,1]) sage: F.highest_weight_vector().d() |[], [], []> sage: F[[2,1],[1],[2]].d() 1/q*|[2, 1], [1], [2]> sage: F[[4,2,2,1],[1],[5,2]].d() 1/q^5*|[4, 2, 2, 1], [1], [5, 2]>
>>> from sage.all import * >>> F = FockSpace(Integer(2)) >>> F.highest_weight_vector().d() |> >>> F[Integer(2),Integer(1),Integer(1)].d() 1/q^2*|2, 1, 1> >>> F[Integer(5),Integer(3),Integer(3),Integer(1),Integer(1),Integer(1)].d() 1/q^7*|5, 3, 3, 1, 1, 1> >>> F = FockSpace(Integer(4), [Integer(2),Integer(0),Integer(1)]) >>> F.highest_weight_vector().d() |[], [], []> >>> F[[Integer(2),Integer(1)],[Integer(1)],[Integer(2)]].d() 1/q*|[2, 1], [1], [2]> >>> F[[Integer(4),Integer(2),Integer(2),Integer(1)],[Integer(1)],[Integer(5),Integer(2)]].d() 1/q^5*|[4, 2, 2, 1], [1], [5, 2]>
- e(*data)[source]¶
Apply the action of the divided power operator \(e_i^{(p)} = e_i^{p} / [p]_q\) on
self
.INPUT:
*data
– list of indices or pairs \((i, p)\)
EXAMPLES:
sage: F = FockSpace(2) sage: F[2,1,1].e(1) 1/q*|1, 1, 1> sage: F[2,1,1].e(0) |2, 1> sage: F[2,1,1].e(0).e(1) |2> + q*|1, 1> sage: F[2,1,1].e(0).e(1).e(1) ((q^2+1)/q)*|1> sage: F[2,1,1].e(0).e((1, 2)) |1> sage: F[2,1,1].e(0, 1, 1, 1) 0 sage: F[2,1,1].e(0, (1, 3)) 0 sage: F[2,1,1].e(0, (1,2), 0) |> sage: F[2,1,1].e(1, 0, 1, 0) 1/q*|> sage: F = FockSpace(4, [2, 0, 1]) sage: F[[2,1],[1],[2]] |[2, 1], [1], [2]> sage: F[[2,1],[1],[2]].e(2) |[2, 1], [1], [1]> sage: F[[2,1],[1],[2]].e(1) 1/q*|[2], [1], [2]> sage: F[[2,1],[1],[2]].e(0) 1/q*|[2, 1], [], [2]> sage: F[[2,1],[1],[2]].e(3) 1/q^2*|[1, 1], [1], [2]> sage: F[[2,1],[1],[2]].e(3, 2, 1) 1/q^2*|[1, 1], [1], []> + 1/q^2*|[1], [1], [1]> sage: F[[2,1],[1],[2]].e(3, 2, 1, 0, 1, 2) 2/q^3*|[], [], []>
>>> from sage.all import * >>> F = FockSpace(Integer(2)) >>> F[Integer(2),Integer(1),Integer(1)].e(Integer(1)) 1/q*|1, 1, 1> >>> F[Integer(2),Integer(1),Integer(1)].e(Integer(0)) |2, 1> >>> F[Integer(2),Integer(1),Integer(1)].e(Integer(0)).e(Integer(1)) |2> + q*|1, 1> >>> F[Integer(2),Integer(1),Integer(1)].e(Integer(0)).e(Integer(1)).e(Integer(1)) ((q^2+1)/q)*|1> >>> F[Integer(2),Integer(1),Integer(1)].e(Integer(0)).e((Integer(1), Integer(2))) |1> >>> F[Integer(2),Integer(1),Integer(1)].e(Integer(0), Integer(1), Integer(1), Integer(1)) 0 >>> F[Integer(2),Integer(1),Integer(1)].e(Integer(0), (Integer(1), Integer(3))) 0 >>> F[Integer(2),Integer(1),Integer(1)].e(Integer(0), (Integer(1),Integer(2)), Integer(0)) |> >>> F[Integer(2),Integer(1),Integer(1)].e(Integer(1), Integer(0), Integer(1), Integer(0)) 1/q*|> >>> F = FockSpace(Integer(4), [Integer(2), Integer(0), Integer(1)]) >>> F[[Integer(2),Integer(1)],[Integer(1)],[Integer(2)]] |[2, 1], [1], [2]> >>> F[[Integer(2),Integer(1)],[Integer(1)],[Integer(2)]].e(Integer(2)) |[2, 1], [1], [1]> >>> F[[Integer(2),Integer(1)],[Integer(1)],[Integer(2)]].e(Integer(1)) 1/q*|[2], [1], [2]> >>> F[[Integer(2),Integer(1)],[Integer(1)],[Integer(2)]].e(Integer(0)) 1/q*|[2, 1], [], [2]> >>> F[[Integer(2),Integer(1)],[Integer(1)],[Integer(2)]].e(Integer(3)) 1/q^2*|[1, 1], [1], [2]> >>> F[[Integer(2),Integer(1)],[Integer(1)],[Integer(2)]].e(Integer(3), Integer(2), Integer(1)) 1/q^2*|[1, 1], [1], []> + 1/q^2*|[1], [1], [1]> >>> F[[Integer(2),Integer(1)],[Integer(1)],[Integer(2)]].e(Integer(3), Integer(2), Integer(1), Integer(0), Integer(1), Integer(2)) 2/q^3*|[], [], []>
- f(*data)[source]¶
Apply the action of the divided power operator \(f_i^{(p)} = f_i^{p} / [p]_q\) on
self
.INPUT:
*data
– list of indices or pairs \((i, p)\)
EXAMPLES:
sage: F = FockSpace(2) sage: mg = F.highest_weight_vector() sage: mg.f(0) |1> sage: mg.f(0).f(1) |2> + q*|1, 1> sage: mg.f(0).f(0) 0 sage: mg.f((0, 2)) 0 sage: mg.f(0, 1, 1) ((q^2+1)/q)*|2, 1> sage: mg.f(0, (1, 2)) |2, 1> sage: mg.f(0, 1, 0) |3> + q*|1, 1, 1> sage: F = FockSpace(4, [2, 0, 1]) sage: mg = F.highest_weight_vector() sage: mg.f(0) |[], [1], []> sage: mg.f(2) |[1], [], []> sage: mg.f(1) |[], [], [1]> sage: mg.f(1, 0) |[], [1], [1]> + q*|[], [], [1, 1]> sage: mg.f(0, 1) |[], [2], []> + q*|[], [1], [1]> sage: mg.f(0, 1, 3) |[], [2, 1], []> + q*|[], [1, 1], [1]> sage: mg.f(3) 0
>>> from sage.all import * >>> F = FockSpace(Integer(2)) >>> mg = F.highest_weight_vector() >>> mg.f(Integer(0)) |1> >>> mg.f(Integer(0)).f(Integer(1)) |2> + q*|1, 1> >>> mg.f(Integer(0)).f(Integer(0)) 0 >>> mg.f((Integer(0), Integer(2))) 0 >>> mg.f(Integer(0), Integer(1), Integer(1)) ((q^2+1)/q)*|2, 1> >>> mg.f(Integer(0), (Integer(1), Integer(2))) |2, 1> >>> mg.f(Integer(0), Integer(1), Integer(0)) |3> + q*|1, 1, 1> >>> F = FockSpace(Integer(4), [Integer(2), Integer(0), Integer(1)]) >>> mg = F.highest_weight_vector() >>> mg.f(Integer(0)) |[], [1], []> >>> mg.f(Integer(2)) |[1], [], []> >>> mg.f(Integer(1)) |[], [], [1]> >>> mg.f(Integer(1), Integer(0)) |[], [1], [1]> + q*|[], [], [1, 1]> >>> mg.f(Integer(0), Integer(1)) |[], [2], []> + q*|[], [1], [1]> >>> mg.f(Integer(0), Integer(1), Integer(3)) |[], [2, 1], []> + q*|[], [1, 1], [1]> >>> mg.f(Integer(3)) 0
- h(*data)[source]¶
Apply the action of \(h_i\) on
self
.EXAMPLES:
sage: F = FockSpace(2) sage: F[2,1,1].h(0) q*|2, 1, 1> sage: F[2,1,1].h(1) |2, 1, 1> sage: F[2,1,1].h(0, 0) q^2*|2, 1, 1> sage: F = FockSpace(4, [2,0,1]) sage: elt = F[[2,1],[1],[2]] sage: elt.h(0) q^2*|[2, 1], [1], [2]> sage: elt.h(1) |[2, 1], [1], [2]> sage: elt.h(2) |[2, 1], [1], [2]> sage: elt.h(3) q*|[2, 1], [1], [2]>
>>> from sage.all import * >>> F = FockSpace(Integer(2)) >>> F[Integer(2),Integer(1),Integer(1)].h(Integer(0)) q*|2, 1, 1> >>> F[Integer(2),Integer(1),Integer(1)].h(Integer(1)) |2, 1, 1> >>> F[Integer(2),Integer(1),Integer(1)].h(Integer(0), Integer(0)) q^2*|2, 1, 1> >>> F = FockSpace(Integer(4), [Integer(2),Integer(0),Integer(1)]) >>> elt = F[[Integer(2),Integer(1)],[Integer(1)],[Integer(2)]] >>> elt.h(Integer(0)) q^2*|[2, 1], [1], [2]> >>> elt.h(Integer(1)) |[2, 1], [1], [2]> >>> elt.h(Integer(2)) |[2, 1], [1], [2]> >>> elt.h(Integer(3)) q*|[2, 1], [1], [2]>
- h_inverse(*data)[source]¶
Apply the action of \(h_i^{-1}\) on
self
.EXAMPLES:
sage: F = FockSpace(2) sage: F[2,1,1].h_inverse(0) 1/q*|2, 1, 1> sage: F[2,1,1].h_inverse(1) |2, 1, 1> sage: F[2,1,1].h_inverse(0, 0) 1/q^2*|2, 1, 1> sage: F = FockSpace(4, [2,0,1]) sage: elt = F[[2,1],[1],[2]] sage: elt.h_inverse(0) 1/q^2*|[2, 1], [1], [2]> sage: elt.h_inverse(1) |[2, 1], [1], [2]> sage: elt.h_inverse(2) |[2, 1], [1], [2]> sage: elt.h_inverse(3) 1/q*|[2, 1], [1], [2]>
>>> from sage.all import * >>> F = FockSpace(Integer(2)) >>> F[Integer(2),Integer(1),Integer(1)].h_inverse(Integer(0)) 1/q*|2, 1, 1> >>> F[Integer(2),Integer(1),Integer(1)].h_inverse(Integer(1)) |2, 1, 1> >>> F[Integer(2),Integer(1),Integer(1)].h_inverse(Integer(0), Integer(0)) 1/q^2*|2, 1, 1> >>> F = FockSpace(Integer(4), [Integer(2),Integer(0),Integer(1)]) >>> elt = F[[Integer(2),Integer(1)],[Integer(1)],[Integer(2)]] >>> elt.h_inverse(Integer(0)) 1/q^2*|[2, 1], [1], [2]> >>> elt.h_inverse(Integer(1)) |[2, 1], [1], [2]> >>> elt.h_inverse(Integer(2)) |[2, 1], [1], [2]> >>> elt.h_inverse(Integer(3)) 1/q*|[2, 1], [1], [2]>
- class G(F)[source]¶
Bases:
CombinatorialFreeModule
,BindableClass
The lower global crystal basis living inside of Fock space.
EXAMPLES:
We construct some of the tables/entries given in Section 10 of [LLT1996]. For \(\widehat{\mathfrak{sl}}_2\):
sage: FS = FockSpace(2) sage: F = FS.natural() sage: G = FS.G() sage: F(G[2]) |2> + q*|1, 1> sage: F(G[3]) |3> + q*|1, 1, 1> sage: F(G[2,1]) |2, 1> sage: F(G[4]) |4> + q*|3, 1> + q*|2, 1, 1> + q^2*|1, 1, 1, 1> sage: F(G[3,1]) |3, 1> + q*|2, 2> + q^2*|2, 1, 1> sage: F(G[5]) |5> + q*|3, 1, 1> + q^2*|1, 1, 1, 1, 1> sage: F(G[4,2]) |4, 2> + q*|4, 1, 1> + q*|3, 3> + q^2*|3, 1, 1, 1> + q^2*|2, 2, 2> + q^3*|2, 2, 1, 1> sage: F(G[4,2,1]) |4, 2, 1> + q*|3, 3, 1> + q^2*|3, 2, 2> + q^3*|3, 2, 1, 1> sage: F(G[6,2]) |6, 2> + q*|6, 1, 1> + q*|5, 3> + q^2*|5, 1, 1, 1> + q*|4, 3, 1> + q^2*|4, 2, 2> + (q^3+q)*|4, 2, 1, 1> + q^2*|4, 1, 1, 1, 1> + q^2*|3, 3, 1, 1> + q^3*|3, 2, 2, 1> + q^3*|3, 1, 1, 1, 1, 1> + q^3*|2, 2, 2, 1, 1> + q^4*|2, 2, 1, 1, 1, 1> sage: F(G[5,3,1]) |5, 3, 1> + q*|5, 2, 2> + q^2*|5, 2, 1, 1> + q*|4, 4, 1> + q^2*|4, 2, 1, 1, 1> + q^2*|3, 3, 3> + q^3*|3, 3, 1, 1, 1> + q^3*|3, 2, 2, 2> + q^4*|3, 2, 2, 1, 1> sage: F(G[4,3,2,1]) |4, 3, 2, 1> sage: F(G[7,2,1]) |7, 2, 1> + q*|5, 2, 1, 1, 1> + q^2*|3, 2, 1, 1, 1, 1, 1> sage: F(G[10,1]) |10, 1> + q*|8, 1, 1, 1> + q^2*|6, 1, 1, 1, 1, 1> + q^3*|4, 1, 1, 1, 1, 1, 1, 1> + q^4*|2, 1, 1, 1, 1, 1, 1, 1, 1, 1> sage: F(G[6,3,2]) |6, 3, 2> + q*|6, 3, 1, 1> + q^2*|6, 2, 2, 1> + q^3*|5, 3, 2, 1> + q*|4, 3, 2, 1, 1> + q^2*|4, 3, 1, 1, 1, 1> + q^3*|4, 2, 2, 1, 1, 1> + q^4*|3, 3, 2, 1, 1, 1> sage: F(G[5,3,2,1]) |5, 3, 2, 1> + q*|4, 4, 2, 1> + q^2*|4, 3, 3, 1> + q^3*|4, 3, 2, 2> + q^4*|4, 3, 2, 1, 1>
>>> from sage.all import * >>> FS = FockSpace(Integer(2)) >>> F = FS.natural() >>> G = FS.G() >>> F(G[Integer(2)]) |2> + q*|1, 1> >>> F(G[Integer(3)]) |3> + q*|1, 1, 1> >>> F(G[Integer(2),Integer(1)]) |2, 1> >>> F(G[Integer(4)]) |4> + q*|3, 1> + q*|2, 1, 1> + q^2*|1, 1, 1, 1> >>> F(G[Integer(3),Integer(1)]) |3, 1> + q*|2, 2> + q^2*|2, 1, 1> >>> F(G[Integer(5)]) |5> + q*|3, 1, 1> + q^2*|1, 1, 1, 1, 1> >>> F(G[Integer(4),Integer(2)]) |4, 2> + q*|4, 1, 1> + q*|3, 3> + q^2*|3, 1, 1, 1> + q^2*|2, 2, 2> + q^3*|2, 2, 1, 1> >>> F(G[Integer(4),Integer(2),Integer(1)]) |4, 2, 1> + q*|3, 3, 1> + q^2*|3, 2, 2> + q^3*|3, 2, 1, 1> >>> F(G[Integer(6),Integer(2)]) |6, 2> + q*|6, 1, 1> + q*|5, 3> + q^2*|5, 1, 1, 1> + q*|4, 3, 1> + q^2*|4, 2, 2> + (q^3+q)*|4, 2, 1, 1> + q^2*|4, 1, 1, 1, 1> + q^2*|3, 3, 1, 1> + q^3*|3, 2, 2, 1> + q^3*|3, 1, 1, 1, 1, 1> + q^3*|2, 2, 2, 1, 1> + q^4*|2, 2, 1, 1, 1, 1> >>> F(G[Integer(5),Integer(3),Integer(1)]) |5, 3, 1> + q*|5, 2, 2> + q^2*|5, 2, 1, 1> + q*|4, 4, 1> + q^2*|4, 2, 1, 1, 1> + q^2*|3, 3, 3> + q^3*|3, 3, 1, 1, 1> + q^3*|3, 2, 2, 2> + q^4*|3, 2, 2, 1, 1> >>> F(G[Integer(4),Integer(3),Integer(2),Integer(1)]) |4, 3, 2, 1> >>> F(G[Integer(7),Integer(2),Integer(1)]) |7, 2, 1> + q*|5, 2, 1, 1, 1> + q^2*|3, 2, 1, 1, 1, 1, 1> >>> F(G[Integer(10),Integer(1)]) |10, 1> + q*|8, 1, 1, 1> + q^2*|6, 1, 1, 1, 1, 1> + q^3*|4, 1, 1, 1, 1, 1, 1, 1> + q^4*|2, 1, 1, 1, 1, 1, 1, 1, 1, 1> >>> F(G[Integer(6),Integer(3),Integer(2)]) |6, 3, 2> + q*|6, 3, 1, 1> + q^2*|6, 2, 2, 1> + q^3*|5, 3, 2, 1> + q*|4, 3, 2, 1, 1> + q^2*|4, 3, 1, 1, 1, 1> + q^3*|4, 2, 2, 1, 1, 1> + q^4*|3, 3, 2, 1, 1, 1> >>> F(G[Integer(5),Integer(3),Integer(2),Integer(1)]) |5, 3, 2, 1> + q*|4, 4, 2, 1> + q^2*|4, 3, 3, 1> + q^3*|4, 3, 2, 2> + q^4*|4, 3, 2, 1, 1>
For \(\widehat{\mathfrak{sl}}_3\):
sage: FS = FockSpace(3) sage: F = FS.natural() sage: G = FS.G() sage: F(G[2]) |2> sage: F(G[1,1]) |1, 1> sage: F(G[3]) |3> + q*|2, 1> sage: F(G[2,1]) |2, 1> + q*|1, 1, 1> sage: F(G[4]) |4> + q*|2, 2> sage: F(G[3,1]) |3, 1> sage: F(G[2,2]) |2, 2> + q*|1, 1, 1, 1> sage: F(G[2,1,1]) |2, 1, 1> sage: F(G[5]) |5> + q*|2, 2, 1> sage: F(G[2,2,1]) |2, 2, 1> + q*|2, 1, 1, 1> sage: F(G[4,1,1]) |4, 1, 1> + q*|3, 2, 1> + q^2*|3, 1, 1, 1> sage: F(G[5,2]) |5, 2> + q*|4, 3> + q^2*|4, 2, 1> sage: F(G[8]) |8> + q*|5, 2, 1> + q*|3, 3, 1, 1> + q^2*|2, 2, 2, 2> sage: F(G[7,2]) |7, 2> + q*|4, 2, 2, 1> sage: F(G[6,2,2]) |6, 2, 2> + q*|6, 1, 1, 1, 1> + q*|4, 4, 2> + q^2*|3, 3, 2, 1, 1>
>>> from sage.all import * >>> FS = FockSpace(Integer(3)) >>> F = FS.natural() >>> G = FS.G() >>> F(G[Integer(2)]) |2> >>> F(G[Integer(1),Integer(1)]) |1, 1> >>> F(G[Integer(3)]) |3> + q*|2, 1> >>> F(G[Integer(2),Integer(1)]) |2, 1> + q*|1, 1, 1> >>> F(G[Integer(4)]) |4> + q*|2, 2> >>> F(G[Integer(3),Integer(1)]) |3, 1> >>> F(G[Integer(2),Integer(2)]) |2, 2> + q*|1, 1, 1, 1> >>> F(G[Integer(2),Integer(1),Integer(1)]) |2, 1, 1> >>> F(G[Integer(5)]) |5> + q*|2, 2, 1> >>> F(G[Integer(2),Integer(2),Integer(1)]) |2, 2, 1> + q*|2, 1, 1, 1> >>> F(G[Integer(4),Integer(1),Integer(1)]) |4, 1, 1> + q*|3, 2, 1> + q^2*|3, 1, 1, 1> >>> F(G[Integer(5),Integer(2)]) |5, 2> + q*|4, 3> + q^2*|4, 2, 1> >>> F(G[Integer(8)]) |8> + q*|5, 2, 1> + q*|3, 3, 1, 1> + q^2*|2, 2, 2, 2> >>> F(G[Integer(7),Integer(2)]) |7, 2> + q*|4, 2, 2, 1> >>> F(G[Integer(6),Integer(2),Integer(2)]) |6, 2, 2> + q*|6, 1, 1, 1, 1> + q*|4, 4, 2> + q^2*|3, 3, 2, 1, 1>
For \(\widehat{\mathfrak{sl}}_4\):
sage: FS = FockSpace(4) sage: F = FS.natural() sage: G = FS.G() sage: F(G[4]) |4> + q*|3, 1> sage: F(G[3,1]) |3, 1> + q*|2, 1, 1> sage: F(G[2,2]) |2, 2> sage: F(G[2,1,1]) |2, 1, 1> + q*|1, 1, 1, 1> sage: F(G[3,2]) |3, 2> + q*|2, 2, 1> sage: F(G[2,2,2]) |2, 2, 2> + q*|1, 1, 1, 1, 1, 1> sage: F(G[6,1]) |6, 1> + q*|4, 3> sage: F(G[3,2,2,1]) |3, 2, 2, 1> + q*|3, 1, 1, 1, 1, 1> + q*|2, 2, 2, 2> + q^2*|2, 1, 1, 1, 1, 1, 1> sage: F(G[7,2]) |7, 2> + q*|6, 2, 1> + q*|5, 4> + q^2*|5, 3, 1> sage: F(G[5,2,2,1]) |5, 2, 2, 1> + q*|5, 1, 1, 1, 1, 1> + q*|4, 2, 2, 1, 1> + q^2*|4, 2, 1, 1, 1, 1>
>>> from sage.all import * >>> FS = FockSpace(Integer(4)) >>> F = FS.natural() >>> G = FS.G() >>> F(G[Integer(4)]) |4> + q*|3, 1> >>> F(G[Integer(3),Integer(1)]) |3, 1> + q*|2, 1, 1> >>> F(G[Integer(2),Integer(2)]) |2, 2> >>> F(G[Integer(2),Integer(1),Integer(1)]) |2, 1, 1> + q*|1, 1, 1, 1> >>> F(G[Integer(3),Integer(2)]) |3, 2> + q*|2, 2, 1> >>> F(G[Integer(2),Integer(2),Integer(2)]) |2, 2, 2> + q*|1, 1, 1, 1, 1, 1> >>> F(G[Integer(6),Integer(1)]) |6, 1> + q*|4, 3> >>> F(G[Integer(3),Integer(2),Integer(2),Integer(1)]) |3, 2, 2, 1> + q*|3, 1, 1, 1, 1, 1> + q*|2, 2, 2, 2> + q^2*|2, 1, 1, 1, 1, 1, 1> >>> F(G[Integer(7),Integer(2)]) |7, 2> + q*|6, 2, 1> + q*|5, 4> + q^2*|5, 3, 1> >>> F(G[Integer(5),Integer(2),Integer(2),Integer(1)]) |5, 2, 2, 1> + q*|5, 1, 1, 1, 1, 1> + q*|4, 2, 2, 1, 1> + q^2*|4, 2, 1, 1, 1, 1>
We construct the examples in Section 5.1 of [Fayers2010]:
sage: FS = FockSpace(2, [0, 0]) sage: F = FS.natural() sage: G = FS.G() sage: F(G[[2,1],[1]]) |[2, 1], [1]> + q*|[2], [2]> + q^2*|[2], [1, 1]> + q^2*|[1, 1], [2]> + q^3*|[1, 1], [1, 1]> + q^4*|[1], [2, 1]> sage: F(G[[4],[]]) |[4], []> + q*|[3, 1], []> + q*|[2, 1, 1], []> + q^2*|[2, 1], [1]> + q*|[2], [2]> + q^2*|[2], [1, 1]> + q^2*|[1, 1, 1, 1], []> + q^2*|[1, 1], [2]> + q^3*|[1, 1], [1, 1]> + q^2*|[1], [2, 1]> + q^2*|[], [4]> + q^3*|[], [3, 1]> + q^3*|[], [2, 1, 1]> + q^4*|[], [1, 1, 1, 1]>
>>> from sage.all import * >>> FS = FockSpace(Integer(2), [Integer(0), Integer(0)]) >>> F = FS.natural() >>> G = FS.G() >>> F(G[[Integer(2),Integer(1)],[Integer(1)]]) |[2, 1], [1]> + q*|[2], [2]> + q^2*|[2], [1, 1]> + q^2*|[1, 1], [2]> + q^3*|[1, 1], [1, 1]> + q^4*|[1], [2, 1]> >>> F(G[[Integer(4)],[]]) |[4], []> + q*|[3, 1], []> + q*|[2, 1, 1], []> + q^2*|[2, 1], [1]> + q*|[2], [2]> + q^2*|[2], [1, 1]> + q^2*|[1, 1, 1, 1], []> + q^2*|[1, 1], [2]> + q^3*|[1, 1], [1, 1]> + q^2*|[1], [2, 1]> + q^2*|[], [4]> + q^3*|[], [3, 1]> + q^3*|[], [2, 1, 1]> + q^4*|[], [1, 1, 1, 1]>
- a_realization()[source]¶
Return a realization of
self
.EXAMPLES:
sage: FS = FockSpace(2) sage: FS.a_realization() Fock space of rank 2 of multicharge (0,) over Fraction Field of Univariate Polynomial Ring in q over Integer Ring in the natural basis
>>> from sage.all import * >>> FS = FockSpace(Integer(2)) >>> FS.a_realization() Fock space of rank 2 of multicharge (0,) over Fraction Field of Univariate Polynomial Ring in q over Integer Ring in the natural basis
- highest_weight_vector()[source]¶
Return the module generator of
self
in the natural basis.EXAMPLES:
sage: FS = FockSpace(2) sage: FS.highest_weight_vector() |> sage: FS = FockSpace(4, [2, 0, 1]) sage: FS.highest_weight_vector() |[], [], []>
>>> from sage.all import * >>> FS = FockSpace(Integer(2)) >>> FS.highest_weight_vector() |> >>> FS = FockSpace(Integer(4), [Integer(2), Integer(0), Integer(1)]) >>> FS.highest_weight_vector() |[], [], []>
- inject_shorthands(verbose=True)[source]¶
Import standard shorthands into the global namespace.
INPUT:
verbose
– boolean (default:True
); ifTrue
, prints the defined shorthands
EXAMPLES:
sage: FS = FockSpace(4) sage: FS.inject_shorthands() Injecting A as shorthand for Fock space of rank 4 of multicharge (0,) over Fraction Field of Univariate Polynomial Ring in q over Integer Ring in the approximation basis Injecting F as shorthand for Fock space of rank 4 of multicharge (0,) over Fraction Field of Univariate Polynomial Ring in q over Integer Ring in the natural basis Injecting G as shorthand for Fock space of rank 4 of multicharge (0,) over Fraction Field of Univariate Polynomial Ring in q over Integer Ring in the lower global crystal basis
>>> from sage.all import * >>> FS = FockSpace(Integer(4)) >>> FS.inject_shorthands() Injecting A as shorthand for Fock space of rank 4 of multicharge (0,) over Fraction Field of Univariate Polynomial Ring in q over Integer Ring in the approximation basis Injecting F as shorthand for Fock space of rank 4 of multicharge (0,) over Fraction Field of Univariate Polynomial Ring in q over Integer Ring in the natural basis Injecting G as shorthand for Fock space of rank 4 of multicharge (0,) over Fraction Field of Univariate Polynomial Ring in q over Integer Ring in the lower global crystal basis
- multicharge()[source]¶
Return the multicharge of
self
.EXAMPLES:
sage: F = FockSpace(2) sage: F.multicharge() (0,) sage: F = FockSpace(4, [2, 0, 1]) sage: F.multicharge() (2, 0, 1)
>>> from sage.all import * >>> F = FockSpace(Integer(2)) >>> F.multicharge() (0,) >>> F = FockSpace(Integer(4), [Integer(2), Integer(0), Integer(1)]) >>> F.multicharge() (2, 0, 1)
- class sage.algebras.quantum_groups.fock_space.FockSpaceBases(base)[source]¶
Bases:
Category_realization_of_parent
The category of bases of a (truncated) Fock space.
- class ParentMethods[source]¶
Bases:
object
- highest_weight_vector()[source]¶
Return the highest weight vector of
self
.EXAMPLES:
sage: FS = FockSpace(2) sage: F = FS.natural() sage: F.highest_weight_vector() |> sage: A = FS.A() sage: A.highest_weight_vector() A[] sage: G = FS.G() sage: G.highest_weight_vector() G[]
>>> from sage.all import * >>> FS = FockSpace(Integer(2)) >>> F = FS.natural() >>> F.highest_weight_vector() |> >>> A = FS.A() >>> A.highest_weight_vector() A[] >>> G = FS.G() >>> G.highest_weight_vector() G[]
- multicharge()[source]¶
Return the multicharge of
self
.EXAMPLES:
sage: FS = FockSpace(4) sage: A = FS.A() sage: A.multicharge() (0,) sage: FS = FockSpace(4, [1,0,2]) sage: G = FS.G() sage: G.multicharge() (1, 0, 2)
>>> from sage.all import * >>> FS = FockSpace(Integer(4)) >>> A = FS.A() >>> A.multicharge() (0,) >>> FS = FockSpace(Integer(4), [Integer(1),Integer(0),Integer(2)]) >>> G = FS.G() >>> G.multicharge() (1, 0, 2)
- q()[source]¶
Return the parameter \(q\) of
self
.EXAMPLES:
sage: FS = FockSpace(2) sage: A = FS.A() sage: A.q() q sage: FS = FockSpace(2, q=-1) sage: G = FS.G() sage: G.q() -1
>>> from sage.all import * >>> FS = FockSpace(Integer(2)) >>> A = FS.A() >>> A.q() q >>> FS = FockSpace(Integer(2), q=-Integer(1)) >>> G = FS.G() >>> G.q() -1
- some_elements()[source]¶
Return some elements of
self
.EXAMPLES:
sage: F = FockSpace(3).natural() sage: F.some_elements()[::13] [3*|2> + 2*|1> + 2*|>, |5>, |3, 1, 1, 1>, |3, 2, 2>, |5, 1, 1, 1>, |2, 2, 1, 1, 1, 1>, |5, 2, 1, 1>, |3, 2, 1, 1, 1, 1>] sage: F = FockSpace(3, [0,1]).natural() sage: F.some_elements()[::13] [2*|[1], []> + 4*|[], [1]> + |[], []>, |[1, 1], [1]>, |[1, 1, 1], [1]>, |[5], []>, |[3], [1, 1]>, |[1], [2, 2]>, |[4, 1, 1], []>, |[2, 1, 1, 1], [1]>]
>>> from sage.all import * >>> F = FockSpace(Integer(3)).natural() >>> F.some_elements()[::Integer(13)] [3*|2> + 2*|1> + 2*|>, |5>, |3, 1, 1, 1>, |3, 2, 2>, |5, 1, 1, 1>, |2, 2, 1, 1, 1, 1>, |5, 2, 1, 1>, |3, 2, 1, 1, 1, 1>] >>> F = FockSpace(Integer(3), [Integer(0),Integer(1)]).natural() >>> F.some_elements()[::Integer(13)] [2*|[1], []> + 4*|[], [1]> + |[], []>, |[1, 1], [1]>, |[1, 1, 1], [1]>, |[5], []>, |[3], [1, 1]>, |[1], [2, 2]>, |[4, 1, 1], []>, |[2, 1, 1, 1], [1]>]
- super_categories()[source]¶
The super categories of
self
.EXAMPLES:
sage: from sage.algebras.quantum_groups.fock_space import FockSpaceBases sage: F = FockSpace(2) sage: bases = FockSpaceBases(F) sage: bases.super_categories() [Category of vector spaces with basis over Fraction Field of Univariate Polynomial Ring in q over Integer Ring, Category of realizations of Fock space of rank 2 of multicharge (0,) over Fraction Field of Univariate Polynomial Ring in q over Integer Ring]
>>> from sage.all import * >>> from sage.algebras.quantum_groups.fock_space import FockSpaceBases >>> F = FockSpace(Integer(2)) >>> bases = FockSpaceBases(F) >>> bases.super_categories() [Category of vector spaces with basis over Fraction Field of Univariate Polynomial Ring in q over Integer Ring, Category of realizations of Fock space of rank 2 of multicharge (0,) over Fraction Field of Univariate Polynomial Ring in q over Integer Ring]
- sage.algebras.quantum_groups.fock_space.FockSpaceOptions(*get_value, **set_value)[source]¶
Set and display the global options for elements of the Fock space classes. If no parameters are set, then the function returns a copy of the options dictionary.
The
options
to Fock space can be accessed as the methodFockSpaceOptions
ofFockSpace
and related parent classes.OPTIONS:
display
– (default:ket
) Specifies how terms of the natural basis of Fock space should be printedket
– displayed as a ket in bra-ket notationlist
– displayed as a list
EXAMPLES:
sage: FS = FockSpace(4) sage: F = FS.natural() sage: x = F.an_element() sage: y = x.f(3,2,2,0,1) sage: y ((3*q^2+3)/q)*|3, 3, 1> + (3*q^2+3)*|3, 2, 1, 1> sage: Partitions.options.display = 'diagram' sage: y ((3*q^2+3)/q)*|3, 3, 1> + (3*q^2+3)*|3, 2, 1, 1> sage: ascii_art(y) ((3*q^2+3)/q)*|***\ + (3*q^2+3)*|***\ |*** > |** \ |* / |* / |* / sage: FockSpace.options.display = 'list' sage: ascii_art(y) ((3*q^2+3)/q)*F + (3*q^2+3)*F *** *** *** ** * * * sage: Partitions.options.display = 'compact_high' sage: y ((3*q^2+3)/q)*F3^2,1 + (3*q^2+3)*F3,2,1^2 sage: Partitions.options._reset() sage: FockSpace.options._reset()
>>> from sage.all import * >>> FS = FockSpace(Integer(4)) >>> F = FS.natural() >>> x = F.an_element() >>> y = x.f(Integer(3),Integer(2),Integer(2),Integer(0),Integer(1)) >>> y ((3*q^2+3)/q)*|3, 3, 1> + (3*q^2+3)*|3, 2, 1, 1> >>> Partitions.options.display = 'diagram' >>> y ((3*q^2+3)/q)*|3, 3, 1> + (3*q^2+3)*|3, 2, 1, 1> >>> ascii_art(y) ((3*q^2+3)/q)*|***\ + (3*q^2+3)*|***\ |*** > |** \ |* / |* / |* / >>> FockSpace.options.display = 'list' >>> ascii_art(y) ((3*q^2+3)/q)*F + (3*q^2+3)*F *** *** *** ** * * * >>> Partitions.options.display = 'compact_high' >>> y ((3*q^2+3)/q)*F3^2,1 + (3*q^2+3)*F3,2,1^2 >>> Partitions.options._reset() >>> FockSpace.options._reset()
See
GlobalOptions
for more features of these options.
- class sage.algebras.quantum_groups.fock_space.FockSpaceTruncated(n, k, q, base_ring)[source]¶
Bases:
FockSpace
This is the Fock space given by partitions of length no more than \(k\).
This can be formed as the quotient \(\mathcal{F} / \mathcal{F}_k\), where \(\mathcal{F}_k\) is the submodule spanned by all diagrams of length (strictly) more than \(k\).
We have three bases:
The natural basis indexed by truncated \(n\)-regular partitions:
F
.The approximation basis that comes from LLT(-type) algorithms:
A
.The lower global crystal basis:
G
.
See also
EXAMPLES:
sage: F = FockSpace(2, truncated=2) sage: mg = F.highest_weight_vector() sage: mg.f(0) |1> sage: mg.f(0).f(1) |2> + q*|1, 1> sage: mg.f(0).f(1).f(0) |3>
>>> from sage.all import * >>> F = FockSpace(Integer(2), truncated=Integer(2)) >>> mg = F.highest_weight_vector() >>> mg.f(Integer(0)) |1> >>> mg.f(Integer(0)).f(Integer(1)) |2> + q*|1, 1> >>> mg.f(Integer(0)).f(Integer(1)).f(Integer(0)) |3>
Compare this to the full Fock space:
sage: F = FockSpace(2) sage: mg = F.highest_weight_vector() sage: mg.f(0).f(1).f(0) |3> + q*|1, 1, 1>
>>> from sage.all import * >>> F = FockSpace(Integer(2)) >>> mg = F.highest_weight_vector() >>> mg.f(Integer(0)).f(Integer(1)).f(Integer(0)) |3> + q*|1, 1, 1>
REFERENCES:
- class A(F, algorithm='GW')[source]¶
Bases:
CombinatorialFreeModule
,BindableClass
The \(A\) basis of the Fock space, which is the approximation basis of the lower global crystal basis.
INPUT:
algorithm
– (default:'GW'
) the algorithm to use when computing this basis in the Fock space; the possible values are:
Note
The bases produced by the two algorithms are not the same in general.
EXAMPLES:
sage: FS = FockSpace(5, truncated=4) sage: F = FS.natural() sage: A = FS.A()
>>> from sage.all import * >>> FS = FockSpace(Integer(5), truncated=Integer(4)) >>> F = FS.natural() >>> A = FS.A()
We demonstrate that they are different bases, but both algorithms still compute the basis \(G\):
sage: A2 = FS.A('LLT') sage: G = FS.G() sage: F(A[12,9]) |12, 9> + q*|12, 4, 4, 1> + q*|8, 8, 5> + (q^2+1)*|8, 8, 4, 1> sage: F(A2[12,9]) |12, 9> + q*|12, 4, 4, 1> + q*|8, 8, 5> + (q^2+2)*|8, 8, 4, 1> sage: G._G_to_fock_basis(Partition([12,9]), 'GW') |12, 9> + q*|12, 4, 4, 1> + q*|8, 8, 5> + q^2*|8, 8, 4, 1> sage: G._G_to_fock_basis(Partition([12,9]), 'LLT') |12, 9> + q*|12, 4, 4, 1> + q*|8, 8, 5> + q^2*|8, 8, 4, 1>
>>> from sage.all import * >>> A2 = FS.A('LLT') >>> G = FS.G() >>> F(A[Integer(12),Integer(9)]) |12, 9> + q*|12, 4, 4, 1> + q*|8, 8, 5> + (q^2+1)*|8, 8, 4, 1> >>> F(A2[Integer(12),Integer(9)]) |12, 9> + q*|12, 4, 4, 1> + q*|8, 8, 5> + (q^2+2)*|8, 8, 4, 1> >>> G._G_to_fock_basis(Partition([Integer(12),Integer(9)]), 'GW') |12, 9> + q*|12, 4, 4, 1> + q*|8, 8, 5> + q^2*|8, 8, 4, 1> >>> G._G_to_fock_basis(Partition([Integer(12),Integer(9)]), 'LLT') |12, 9> + q*|12, 4, 4, 1> + q*|8, 8, 5> + q^2*|8, 8, 4, 1>
- class F(F)[source]¶
Bases:
CombinatorialFreeModule
,BindableClass
The natural basis of the truncated Fock space.
This is the natural basis of the full Fock space projected onto the truncated Fock space. It inherits the \(U_q(\widehat{\widetilde{sl}}_n)\)-action from the action on the full Fock space.
EXAMPLES:
sage: FS = FockSpace(4) sage: F = FS.natural() sage: FS3 = FockSpace(4, truncated=3) sage: F3 = FS3.natural() sage: u = F.highest_weight_vector() sage: u3 = F3.highest_weight_vector() sage: u3.f(0,3,2,1) |2, 1, 1> sage: u.f(0,3,2,1) |2, 1, 1> + q*|1, 1, 1, 1> sage: u.f(0,3,2,1,1) ((q^2+1)/q)*|2, 1, 1, 1> sage: u3.f(0,3,2,1,1) 0
>>> from sage.all import * >>> FS = FockSpace(Integer(4)) >>> F = FS.natural() >>> FS3 = FockSpace(Integer(4), truncated=Integer(3)) >>> F3 = FS3.natural() >>> u = F.highest_weight_vector() >>> u3 = F3.highest_weight_vector() >>> u3.f(Integer(0),Integer(3),Integer(2),Integer(1)) |2, 1, 1> >>> u.f(Integer(0),Integer(3),Integer(2),Integer(1)) |2, 1, 1> + q*|1, 1, 1, 1> >>> u.f(Integer(0),Integer(3),Integer(2),Integer(1),Integer(1)) ((q^2+1)/q)*|2, 1, 1, 1> >>> u3.f(Integer(0),Integer(3),Integer(2),Integer(1),Integer(1)) 0
- class G(F)[source]¶
Bases:
CombinatorialFreeModule
,BindableClass
The lower global crystal basis living inside of a truncated Fock space.
EXAMPLES:
sage: FS = FockSpace(4, truncated=2) sage: F = FS.natural() sage: G = FS.G() sage: F(G[3,1]) |3, 1> sage: F(G[6,2]) |6, 2> + q*|5, 3> sage: F(G[14]) |14> + q*|11, 3> sage: FS = FockSpace(3, truncated=4) sage: F = FS.natural() sage: G = FS.G() sage: F(G[4,1]) |4, 1> + q*|3, 2> sage: F(G[4,2,2]) |4, 2, 2> + q*|3, 2, 2, 1>
>>> from sage.all import * >>> FS = FockSpace(Integer(4), truncated=Integer(2)) >>> F = FS.natural() >>> G = FS.G() >>> F(G[Integer(3),Integer(1)]) |3, 1> >>> F(G[Integer(6),Integer(2)]) |6, 2> + q*|5, 3> >>> F(G[Integer(14)]) |14> + q*|11, 3> >>> FS = FockSpace(Integer(3), truncated=Integer(4)) >>> F = FS.natural() >>> G = FS.G() >>> F(G[Integer(4),Integer(1)]) |4, 1> + q*|3, 2> >>> F(G[Integer(4),Integer(2),Integer(2)]) |4, 2, 2> + q*|3, 2, 2, 1>
We check against the tables in [LLT1996] (after truncating):
sage: FS = FockSpace(3, truncated=3) sage: F = FS.natural() sage: G = FS.G() sage: F(G[10]) |10> + q*|8, 2> + q*|7, 2, 1> sage: F(G[6,4]) |6, 4> + q*|6, 2, 2> + q^2*|4, 4, 2> sage: F(G[5,5]) |5, 5> + q*|4, 3, 3> sage: FS = FockSpace(4, truncated=3) sage: F = FS.natural() sage: G = FS.G() sage: F(G[3,3,1]) |3, 3, 1> sage: F(G[3,2,2]) |3, 2, 2> sage: F(G[7]) |7> + q*|3, 3, 1>
>>> from sage.all import * >>> FS = FockSpace(Integer(3), truncated=Integer(3)) >>> F = FS.natural() >>> G = FS.G() >>> F(G[Integer(10)]) |10> + q*|8, 2> + q*|7, 2, 1> >>> F(G[Integer(6),Integer(4)]) |6, 4> + q*|6, 2, 2> + q^2*|4, 4, 2> >>> F(G[Integer(5),Integer(5)]) |5, 5> + q*|4, 3, 3> >>> FS = FockSpace(Integer(4), truncated=Integer(3)) >>> F = FS.natural() >>> G = FS.G() >>> F(G[Integer(3),Integer(3),Integer(1)]) |3, 3, 1> >>> F(G[Integer(3),Integer(2),Integer(2)]) |3, 2, 2> >>> F(G[Integer(7)]) |7> + q*|3, 3, 1>