Quantum Clifford Algebras#
AUTHORS:
Travis Scrimshaw (2021-05): initial version
- class sage.algebras.quantum_clifford.QuantumCliffordAlgebra(n, k, q, F, psi, indices)#
Bases:
CombinatorialFreeModule
The quantum Clifford algebra.
The quantum Clifford algebra, or \(q\)-Clifford algebra, of rank \(n\) and twist \(k\) is the unital associative algebra \(\mathrm{Cl}_{q}(n, k)\) over a field \(F\) with generators \(\psi_a, \psi_a^*, \omega_a\) for \(a = 1, \ldots, n\) that satisfy the following relations:
\[\begin{split}\begin{aligned} \omega_a \omega_b & = \omega_b \omega_a, & \omega_a^{4k} & = (1 + q^{-2k}) \omega_a^{2k} - q^{-2k}, \\ \omega_a \psi_b & = q^{\delta_{ab}} \psi_b \omega_a, & \omega_a \psi^*_b & = \psi^*_b \omega_a, \\ \psi_a \psi_b & + \psi_b \psi_a = 0, & \psi^*_a \psi^*_b & + \psi^*_b \psi^*_a = 0, \\ \psi_a \psi^*_a & + q^k \psi^*_a \psi_a = \omega_a^{-k}, & \psi^*_a \psi_a & + q^{-k} \psi^*_a \psi_a = \omega_a^k, \\ \psi_a \psi^*_b & + \psi_b^* \psi_a = 0 & & \text{if } a \neq b. \end{aligned}\end{split}\]When \(k = 2\), we recover the original definition given by Hayashi in [Hayashi1990]. The \(k = 1\) version was used in [Kwon2014].
INPUT:
n
– positive integer; the rankk
– positive integer (default: 1); the twistq
– (optional) the parameter \(q\)F
– (default: \(\QQ(q)\)) the base field that containsq
EXAMPLES:
We construct the rank 3 and twist 1 \(q\)-Clifford algebra:
sage: Cl = algebras.QuantumClifford(3) sage: Cl Quantum Clifford algebra of rank 3 and twist 1 with q=q over Fraction Field of Univariate Polynomial Ring in q over Integer Ring sage: q = Cl.q()
Some sample computations:
sage: p0, p1, p2, d0, d1, d2, w0, w1, w2 = Cl.gens() sage: p0 * p1 psi0*psi1 sage: p1 * p0 -psi0*psi1 sage: p0 * w0 * p1 * d0 * w2 (1/(q^3-q))*psi1*w2 + (-q/(q^2-1))*psi1*w0^2*w2 sage: w0^4 -1/q^2 + ((q^2+1)/q^2)*w0^2
We construct the homomorphism from \(U_q(\mathfrak{sl}_3)\) to \(\mathrm{Cl}(3, 1)\) given in (3.17) of [Hayashi1990]:
sage: e1 = p0*d1; e2 = p1*d2 sage: f1 = p1*d0; f2 = p2*d1 sage: k1 = w0*~w1; k2 = w1*~w2 sage: k1i = w1*~w0; k2i = w2*~w1 sage: (e1, e2, f1, f2, k1, k2, k1i, k2i) (psi0*psid1, psi1*psid2, -psid0*psi1, -psid1*psi2, (q^2+1)*w0*w1 - q^2*w0*w1^3, (q^2+1)*w1*w2 - q^2*w1*w2^3, (q^2+1)*w0*w1 - q^2*w0^3*w1, (q^2+1)*w1*w2 - q^2*w1^3*w2)
We check that \(k_i\) and \(k_i^{-1}\) are inverses:
sage: k1 * k1i 1 sage: k2 * k2i 1
The relations between \(e_i\), \(f_i\), and \(k_i\):
sage: k1 * f1 == q^-2 * f1 * k1 True sage: k2 * f1 == q^1 * f1 * k2 True sage: k2 * e1 == q^-1 * e1 * k2 True sage: k1 * e1 == q^2 * e1 * k1 True sage: e1 * f1 - f1 * e1 == (k1 - k1i)/(q-q^-1) True sage: e2 * f1 - f1 * e2 0
The \(q\)-Serre relations:
sage: e1 * e1 * e2 - (q^1 + q^-1) * e1 * e2 * e1 + e2 * e1 * e1 0 sage: f1 * f1 * f2 - (q^1 + q^-1) * f1 * f2 * f1 + f2 * f1 * f1 0
This also can be constructed at the special point when \(q^{2k} = 1\), but the basis used is different:
sage: Cl = algebras.QuantumClifford(1, 1, -1) sage: Cl.inject_variables() Defining psi0, psid0, w0 sage: psi0 * psid0 psi0*psid0 sage: psid0 * psi0 -w0 + psi0*psid0 sage: w0^2 1
- algebra_generators()#
Return the algebra generators of
self
.EXAMPLES:
sage: Cl = algebras.QuantumClifford(3) sage: Cl.algebra_generators() Finite family {'psi0': psi0, 'psi1': psi1, 'psi2': psi2, 'psid0': psid0, 'psid1': psid1, 'psid2': psid2, 'w0': w0, 'w1': w1, 'w2': w2}
- dimension()#
Return the dimension of
self
.EXAMPLES:
sage: Cl = algebras.QuantumClifford(3) sage: Cl.dimension() 512 sage: Cl = algebras.QuantumClifford(4, 2) # long time sage: Cl.dimension() # long time 65536
- gens()#
Return the generators of
self
.EXAMPLES:
sage: Cl = algebras.QuantumClifford(3) sage: Cl.gens() (psi0, psi1, psi2, psid0, psid1, psid2, w0, w1, w2)
- one_basis()#
Return the index of the basis element of \(1\).
EXAMPLES:
sage: Cl = algebras.QuantumClifford(3) sage: Cl.one_basis() ((0, 0, 0), (0, 0, 0))
- q()#
Return the \(q\) of
self
.EXAMPLES:
sage: Cl = algebras.QuantumClifford(3) sage: Cl.q() q sage: Cl = algebras.QuantumClifford(3, q=QQ(-5)) sage: Cl.q() -5
- rank()#
Return the rank \(k\) of
self
.EXAMPLES:
sage: Cl = algebras.QuantumClifford(3, 2) sage: Cl.rank() 3
- twist()#
Return the twist \(k\) of
self
.EXAMPLES:
sage: Cl = algebras.QuantumClifford(3, 2) sage: Cl.twist() 2
- class sage.algebras.quantum_clifford.QuantumCliffordAlgebraGeneric(n, k, q, F)#
Bases:
QuantumCliffordAlgebra
The quantum Clifford algebra when \(q^{2k} \neq 1\).
The quantum Clifford algebra, or \(q\)-Clifford algebra, of rank \(n\) and twist \(k\) is the unital associative algebra \(\mathrm{Cl}_{q}(n, k)\) over a field \(F\) with generators \(\psi_a, \psi_a^*, \omega_a\) for \(a = 1, \ldots, n\) that satisfy the following relations:
\[\begin{split}\begin{aligned} \omega_a \omega_b & = \omega_b \omega_a, & \omega_a^{4k} & = (1 + q^{-2k}) \omega_a^{2k} - q^{-2k}, \\ \omega_a \psi_b & = q^{\delta_{ab}} \psi_b \omega_a, & \omega_a \psi^*_b & = \psi^*_b \omega_a, \\ \psi_a \psi_b & + \psi_b \psi_a = 0, & \psi^*_a \psi^*_b & + \psi^*_b \psi^*_a = 0, \\ \psi_a \psi^*_a & = \frac{q^k \omega_a^{3k} - q^{-k} \omega_a^k}{q^k - q^{-k}}, & \psi^*_a \psi_a & = \frac{q^{2k} (\omega_a - \omega_a^{3k})}{q^k - q^{-k}}, \\ \psi_a \psi^*_b & + \psi_b^* \psi_a = 0 & & \text{if } a \neq b, \end{aligned}\end{split}\]where \(q \in F\) such that \(q^{2k} \neq 1\).
When \(k = 2\), we recover the original definition given by Hayashi in [Hayashi1990]. The \(k = 1\) version was used in [Kwon2014].
- class Element#
Bases:
IndexedFreeModuleElement
- inverse()#
Return the inverse if
self
is a basis element.EXAMPLES:
sage: Cl = algebras.QuantumClifford(2) sage: Cl.inject_variables() Defining psi0, psi1, psid0, psid1, w0, w1 sage: w0^-1 (q^2+1)*w0 - q^2*w0^3 sage: w0^-1 * w0 1 sage: w0^-2 (q^2+1) - q^2*w0^2 sage: w0^-2 * w0^2 1 sage: w0^-2 * w0 == w0^-1 True sage: w = w0 * w1 sage: w^-1 (q^4+2*q^2+1)*w0*w1 + (-q^4-q^2)*w0*w1^3 + (-q^4-q^2)*w0^3*w1 + q^4*w0^3*w1^3 sage: w^-1 * w 1 sage: w * w^-1 1 sage: (2*w0)^-1 ((q^2+1)/2)*w0 - q^2/2*w0^3 sage: (w0 + w1)^-1 Traceback (most recent call last): ... ValueError: cannot invert self (= w1 + w0) sage: (psi0 * w0)^-1 Traceback (most recent call last): ... ValueError: cannot invert self (= psi0*w0) sage: Cl = algebras.QuantumClifford(1, 2) sage: Cl.inject_variables() Defining psi0, psid0, w0 sage: (psi0 + psid0).inverse() psid0*w0^2 + q^2*psi0*w0^2 sage: Cl = algebras.QuantumClifford(2, 2) sage: Cl.inject_variables() Defining psi0, psi1, psid0, psid1, w0, w1 sage: w0^-1 (q^4+1)*w0^3 - q^4*w0^7 sage: w0 * w0^-1 1
- product_on_basis(m1, m2)#
Return the product of the basis elements indexed by
m1
andm2
.EXAMPLES:
sage: Cl = algebras.QuantumClifford(3) sage: Cl.inject_variables() Defining psi0, psi1, psi2, psid0, psid1, psid2, w0, w1, w2 sage: psi0^2 # indirect doctest 0 sage: psid0^2 0 sage: w0 * psi0 q*psi0*w0 sage: w0 * psid0 1/q*psid0*w0 sage: w2 * w0 w0*w2 sage: w0^4 -1/q^2 + ((q^2+1)/q^2)*w0^2
- class sage.algebras.quantum_clifford.QuantumCliffordAlgebraRootUnity(n, k, q, F)#
Bases:
QuantumCliffordAlgebra
The quantum Clifford algebra when \(q^{2k} = 1\).
The quantum Clifford algebra, or \(q\)-Clifford algebra, of rank \(n\) and twist \(k\) is the unital associative algebra \(\mathrm{Cl}_{q}(n, k)\) over a field \(F\) with generators \(\psi_a, \psi_a^*, \omega_a\) for \(a = 1, \ldots, n\) that satisfy the following relations:
\[\begin{split}\begin{aligned} \omega_a \omega_b & = \omega_b \omega_a, & \omega_a^{2k} & = 1, \\ \omega_a \psi_b & = q^{\delta_{ab}} \psi_b \omega_a, & \omega_a \psi^*_b & = \psi^*_b \omega_a, \\ \psi_a \psi_b & + \psi_b \psi_a = 0, & \psi^*_a \psi^*_b & + \psi^*_b \psi^*_a = 0, \\ \psi_a \psi^*_a & + q^k \psi^*_a \psi_a = \omega_a^k & \psi_a \psi^*_b & + \psi_b^* \psi_a = 0 \quad (a \neq b), \end{aligned}\end{split}\]where \(q \in F\) such that \(q^{2k} = 1\). This has further relations of
\[\begin{split}\begin{aligned} \psi^*_a \psi_a \psi^*_a & = \psi^*_a \omega_a^k, \\ \psi_a \psi^*_a \psi_a & = q^k \psi_a \omega_a^k, \\ (\psi_a \psi^*_a)^2 & = \psi_a \psi^*_a \omega_a^k. \end{aligned}\end{split}\]- class Element#
Bases:
IndexedFreeModuleElement
- inverse()#
Return the inverse if
self
is a basis element.EXAMPLES:
sage: Cl = algebras.QuantumClifford(3, 3, -1) sage: Cl.inject_variables() Defining psi0, psi1, psi2, psid0, psid1, psid2, w0, w1, w2 sage: w0^-1 w0^5 sage: w0^-1 * w0 1 sage: w0^-2 w0^4 sage: w0^-2 * w0^2 1 sage: w0^-2 * w0 == w0^-1 True sage: w = w0 * w1^3 sage: w^-1 w0^5*w1^3 sage: w^-1 * w 1 sage: w * w^-1 1 sage: (2*w0)^-1 1/2*w0^5 sage: Cl = algebras.QuantumClifford(3, 1, -1) sage: Cl.inject_variables() Defining psi0, psi1, psi2, psid0, psid1, psid2, w0, w1, w2 sage: (w0 + w1)^-1 Traceback (most recent call last): ... ValueError: cannot invert self (= w1 + w0) sage: (psi0 * w0)^-1 Traceback (most recent call last): ... ValueError: cannot invert self (= psi0*w0) sage: z = CyclotomicField(6).gen() sage: Cl = algebras.QuantumClifford(1, 3, z) sage: Cl.inject_variables() Defining psi0, psid0, w0 sage: (psi0 + psid0).inverse() psid0*w0^3 - psi0*w0^3 sage: Cl = algebras.QuantumClifford(2, 2, -1) sage: Cl.inject_variables() Defining psi0, psi1, psid0, psid1, w0, w1 sage: w0^-1 w0^3 sage: w0 * w0^-1 1
- product_on_basis(m1, m2)#
Return the product of the basis elements indexed by
m1
andm2
.EXAMPLES:
sage: z = CyclotomicField(3).gen() sage: Cl = algebras.QuantumClifford(3, 3, z) sage: Cl.inject_variables() Defining psi0, psi1, psi2, psid0, psid1, psid2, w0, w1, w2 sage: psi0^2 # indirect doctest 0 sage: psid0^2 0 sage: w0 * psi0 -(-zeta3)*psi0*w0 sage: w0 * psid0 -(zeta3+1)*psid0*w0 sage: psi0 * psid0 psi0*psid0 sage: psid0 * psi0 w0^3 - psi0*psid0 sage: w2 * w0 w0*w2 sage: w0^6 1 sage: psi0 * psi1 psi0*psi1 sage: psi1 * psi0 -psi0*psi1 sage: psi1 * (psi0 * psi2) -psi0*psi1*psi2 sage: z = CyclotomicField(6).gen() sage: Cl = algebras.QuantumClifford(3, 3, z) sage: Cl.inject_variables() Defining psi0, psi1, psi2, psid0, psid1, psid2, w0, w1, w2 sage: psid1 * (psi1 * psid1) psid1*w1^3 sage: (psi1* psid1) * (psi1 * psid1) psi1*psid1*w1^3 sage: (psi1 * psid1) * psi1 -psi1*w1^3