Quantum Clifford Algebras

AUTHORS:

  • Travis Scrimshaw (2021-05): initial version

class sage.algebras.quantum_clifford.QuantumCliffordAlgebra(n, k, q, F)

Bases: sage.combinat.free_module.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, \dotsc, 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].

INPUT:

  • n – positive integer; the rank

  • k – positive integer (default: 1); the twist

  • q – (optional) the parameter \(q\)

  • F – (default: \(\QQ(q)\)) the base field that contains q

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
class Element

Bases: sage.modules.with_basis.indexed_element.IndexedFreeModuleElement

inverse()

Return the inverse if self is a basis element.

EXAMPLES:

sage: Cl = algebras.QuantumClifford(3)
sage: Cl.inject_variables()
Defining psi0, psi1, psi2, psid0, psid1, psid2, w0, w1, w2
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: (w0 + w1)^-1
Traceback (most recent call last):
...
NotImplementedError: inverse only implemented for basis elements
sage: (psi0 * w0)^-1
Traceback (most recent call last):
...
NotImplementedError: inverse only implemented for product of w generators

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
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)
sage: Cl.dimension()
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))
product_on_basis(m1, m2)

Return the product of the basis elements indexed by m1 and m2.

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
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