Fock Space¶
AUTHORS:
- Travis Scrimshaw (2013-05-03): Initial version
-
sage.algebras.quantum_groups.fock_space.
FockSpace
¶ 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 an 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>
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]
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])
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>
REFERENCES:
-
sage.algebras.quantum_groups.fock_space.
FockSpaceBases
¶ The category of bases of a (truncated) Fock space.
-
sage.algebras.quantum_groups.fock_space.
FockSpaceOptions
(*get_value, **set_value)¶ Sets and displays 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()
See
GlobalOptions
for more features of these options.
-
sage.algebras.quantum_groups.fock_space.
FockSpaceTruncated
¶ 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 trucated \(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>
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>
REFERENCES:
- The natural basis indexed by trucated \(n\)-regular partitions: