Quantum Matrix Coordinate Algebras¶
AUTHORS:
- Travis Scrimshaw (01-2016): initial version 
- class sage.algebras.quantum_matrix_coordinate_algebra.QuantumGL(n, q, bar, R)[source]¶
- Bases: - QuantumMatrixCoordinateAlgebra_abstract- Quantum coordinate algebra of \(GL(n)\). - The quantum coordinate algebra of \(GL(n)\), or quantum \(GL(n)\) for short and denoted by \(\mathcal{O}_q(GL(n))\), is the quantum coordinate algebra of \(M_R(n, n)\) with the addition of the additional central group-like element \(c\) which satisfies \(c d = d c = 1\), where \(d\) is the quantum determinant. - Quantum \(GL(n)\) is a Hopf algebra where \(\varepsilon(c) = 1\) and the antipode \(S\) is given by the (quantum) matrix inverse. That is to say, we have \(S(c) = c^-1 = d\) and \[S(x_{ij}) = c * (-q)^{i-j} * \tilde{t}_{ji},\]- where we have the quantum minor \[\tilde{t}_{ij} = \sum_{\sigma} (-q)^{\ell(\sigma)} x_{1, \sigma(1)} \cdots x_{i-1, \sigma(i-1)} x_{i+1, \sigma(i+1)} \cdots x_{n, \sigma(n)}\]- with the sum over permutations \(\sigma \colon \{1, \ldots, i-1, i+1, \ldots n\} \to \{1, \ldots, j-1, j+1, \ldots, n\}\). - See also - INPUT: - n– the integer \(n\)
- R– (optional) the ring \(R\) if \(q\) is not specified (the default is \(\ZZ\)); otherwise the ring containing \(q\)
- q– (optional) the variable \(q\); the default is \(q \in R[q, q^{-1}]\)
- bar– (optional) the involution on the base ring; the default is \(q \mapsto q^{-1}\)
 - EXAMPLES: - We construct \(\mathcal{O}_q(GL(3))\) and the variables: - sage: O = algebras.QuantumGL(3) sage: O.inject_variables() Defining x11, x12, x13, x21, x22, x23, x31, x32, x33, c - >>> from sage.all import * >>> O = algebras.QuantumGL(Integer(3)) >>> O.inject_variables() Defining x11, x12, x13, x21, x22, x23, x31, x32, x33, c - We do some basic computations: - sage: x33 * x12 x[1,2]*x[3,3] + (q^-1-q)*x[1,3]*x[3,2] sage: x23 * x12 * x11 (q^-1)*x[1,1]*x[1,2]*x[2,3] + (q^-2-1)*x[1,1]*x[1,3]*x[2,2] + (q^-3-q^-1)*x[1,2]*x[1,3]*x[2,1] sage: c * O.quantum_determinant() 1 - >>> from sage.all import * >>> x33 * x12 x[1,2]*x[3,3] + (q^-1-q)*x[1,3]*x[3,2] >>> x23 * x12 * x11 (q^-1)*x[1,1]*x[1,2]*x[2,3] + (q^-2-1)*x[1,1]*x[1,3]*x[2,2] + (q^-3-q^-1)*x[1,2]*x[1,3]*x[2,1] >>> c * O.quantum_determinant() 1 - We verify the quantum determinant is in the center and is group-like: - sage: qdet = O.quantum_determinant() sage: all(qdet * g == g * qdet for g in O.algebra_generators()) True sage: qdet.coproduct() == tensor([qdet, qdet]) True - >>> from sage.all import * >>> qdet = O.quantum_determinant() >>> all(qdet * g == g * qdet for g in O.algebra_generators()) True >>> qdet.coproduct() == tensor([qdet, qdet]) True - We check that the inverse of the quantum determinant is also in the center and group-like: - sage: all(c * g == g * c for g in O.algebra_generators()) True sage: c.coproduct() == tensor([c, c]) True - >>> from sage.all import * >>> all(c * g == g * c for g in O.algebra_generators()) True >>> c.coproduct() == tensor([c, c]) True - Moreover, the antipode interchanges the quantum determinant and its inverse: - sage: c.antipode() == qdet True sage: qdet.antipode() == c True - >>> from sage.all import * >>> c.antipode() == qdet True >>> qdet.antipode() == c True - REFERENCES: - algebra_generators()[source]¶
- Return the algebra generators of - self.- EXAMPLES: - sage: O = algebras.QuantumGL(2) sage: O.algebra_generators() Finite family {(1, 1): x[1,1], (1, 2): x[1,2], (2, 1): x[2,1], (2, 2): x[2,2], 'c': c} - >>> from sage.all import * >>> O = algebras.QuantumGL(Integer(2)) >>> O.algebra_generators() Finite family {(1, 1): x[1,1], (1, 2): x[1,2], (2, 1): x[2,1], (2, 2): x[2,2], 'c': c} 
 - antipode_on_basis(x)[source]¶
- Return the antipode of the basis element indexed by - x.- EXAMPLES: - sage: O = algebras.QuantumGL(3) sage: x = O.indices().monoid_generators() sage: O.antipode_on_basis(x[1,2]) -(q^-1)*c*x[1,2]*x[3,3] + c*x[1,3]*x[3,2] sage: O.antipode_on_basis(x[2,2]) c*x[1,1]*x[3,3] - q*c*x[1,3]*x[3,1] sage: O.antipode_on_basis(x['c']) == O.quantum_determinant() True - >>> from sage.all import * >>> O = algebras.QuantumGL(Integer(3)) >>> x = O.indices().monoid_generators() >>> O.antipode_on_basis(x[Integer(1),Integer(2)]) -(q^-1)*c*x[1,2]*x[3,3] + c*x[1,3]*x[3,2] >>> O.antipode_on_basis(x[Integer(2),Integer(2)]) c*x[1,1]*x[3,3] - q*c*x[1,3]*x[3,1] >>> O.antipode_on_basis(x['c']) == O.quantum_determinant() True 
 - coproduct_on_basis(x)[source]¶
- Return the coproduct on the basis element indexed by - x.- EXAMPLES: - sage: O = algebras.QuantumGL(3) sage: x = O.indices().monoid_generators() sage: O.coproduct_on_basis(x[1,2]) x[1,1] # x[1,2] + x[1,2] # x[2,2] + x[1,3] # x[3,2] sage: O.coproduct_on_basis(x[2,2]) x[2,1] # x[1,2] + x[2,2] # x[2,2] + x[2,3] # x[3,2] sage: O.coproduct_on_basis(x['c']) c # c - >>> from sage.all import * >>> O = algebras.QuantumGL(Integer(3)) >>> x = O.indices().monoid_generators() >>> O.coproduct_on_basis(x[Integer(1),Integer(2)]) x[1,1] # x[1,2] + x[1,2] # x[2,2] + x[1,3] # x[3,2] >>> O.coproduct_on_basis(x[Integer(2),Integer(2)]) x[2,1] # x[1,2] + x[2,2] # x[2,2] + x[2,3] # x[3,2] >>> O.coproduct_on_basis(x['c']) c # c 
 - product_on_basis(a, b)[source]¶
- Return the product of basis elements indexed by - aand- b.- EXAMPLES: - sage: O = algebras.QuantumGL(2) sage: I = O.indices().monoid_generators() sage: O.product_on_basis(I[1,1], I[2,2]) x[1,1]*x[2,2] sage: O.product_on_basis(I[2,2], I[1,1]) x[1,1]*x[2,2] + (q^-1-q)*x[1,2]*x[2,1] - >>> from sage.all import * >>> O = algebras.QuantumGL(Integer(2)) >>> I = O.indices().monoid_generators() >>> O.product_on_basis(I[Integer(1),Integer(1)], I[Integer(2),Integer(2)]) x[1,1]*x[2,2] >>> O.product_on_basis(I[Integer(2),Integer(2)], I[Integer(1),Integer(1)]) x[1,1]*x[2,2] + (q^-1-q)*x[1,2]*x[2,1] 
 
- class sage.algebras.quantum_matrix_coordinate_algebra.QuantumMatrixCoordinateAlgebra(m, n, q, bar, R)[source]¶
- Bases: - QuantumMatrixCoordinateAlgebra_abstract- A quantum matrix coordinate algebra. - Let \(R\) be a commutative ring. The quantum matrix coordinate algebra of \(M(m, n)\) is the associative algebra over \(R[q, q^{-1}]\) generated by \(x_{ij}\), for \(i = 1, 2, \ldots, m\), \(j = 1, 2, \ldots, n\), and subject to the following relations: \[\begin{split}\begin{array}{ll} x_{it} x_{ij} = q^{-1} x_{ij} x_{it} & \text{if } j < t, \\ x_{sj} x_{ij} = q^{-1} x_{ij} x_{sj} & \text{if } i < s, \\ x_{st} x_{ij} = x_{ij} x_{st} & \text{if } i < s, j > t, \\ x_{st} x_{ij} = x_{ij} x_{st} + (q^{-1} - q) x_{it} x_{sj} & \text{if } i < s, j < t. \\ \end{array}\end{split}\]- The quantum matrix coordinate algebra is denoted by \(\mathcal{O}_q(M(m, n))\). For \(m = n\), it is also a bialgebra given by \[\Delta(x_{ij}) = \sum_{k=1}^n x_{ik} \otimes x_{kj}, \varepsilon(x_{ij}) = \delta_{ij}.\]- Moreover, there is a central group-like element called the quantum determinant that is defined by \[\det_q = \sum_{\sigma \in S_n} (-q)^{\ell(\sigma)} x_{1,\sigma(1)} x_{2,\sigma(2)} \cdots x_{n,\sigma(n)}.\]- The quantum matrix coordinate algebra also has natural inclusions when restricting to submatrices. That is, let \(I \subseteq \{1, 2, \ldots, m\}\) and \(J \subseteq \{1, 2, \ldots, n\}\). Then the subalgebra generated by \(\{ x_{ij} \mid i \in I, j \in J \}\) is naturally isomorphic to \(\mathcal{O}_q(M(|I|, |J|))\). - Note - The \(q\) considered here is \(q^2\) in some references, e.g., [ZZ2005]. - INPUT: - m– the integer \(m\)
- n– the integer \(n\)
- R– (optional) the ring \(R\) if \(q\) is not specified (the default is \(\ZZ\)); otherwise the ring containing \(q\)
- q– (optional) the variable \(q\); the default is \(q \in R[q, q^{-1}]\)
- bar– (optional) the involution on the base ring; the default is \(q \mapsto q^{-1}\)
 - EXAMPLES: - We construct \(\mathcal{O}_q(M(2,3))\) and the variables: - sage: O = algebras.QuantumMatrixCoordinate(2,3) sage: O.inject_variables() Defining x11, x12, x13, x21, x22, x23 - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(2),Integer(3)) >>> O.inject_variables() Defining x11, x12, x13, x21, x22, x23 - We do some basic computations: - sage: x21 * x11 (q^-1)*x[1,1]*x[2,1] sage: x23 * x12 * x11 (q^-1)*x[1,1]*x[1,2]*x[2,3] + (q^-2-1)*x[1,1]*x[1,3]*x[2,2] + (q^-3-q^-1)*x[1,2]*x[1,3]*x[2,1] - >>> from sage.all import * >>> x21 * x11 (q^-1)*x[1,1]*x[2,1] >>> x23 * x12 * x11 (q^-1)*x[1,1]*x[1,2]*x[2,3] + (q^-2-1)*x[1,1]*x[1,3]*x[2,2] + (q^-3-q^-1)*x[1,2]*x[1,3]*x[2,1] - We construct the maximal quantum minors: - sage: q = O.q() sage: qm12 = x11*x22 - q*x12*x21 sage: qm13 = x11*x23 - q*x13*x21 sage: qm23 = x12*x23 - q*x13*x22 - >>> from sage.all import * >>> q = O.q() >>> qm12 = x11*x22 - q*x12*x21 >>> qm13 = x11*x23 - q*x13*x21 >>> qm23 = x12*x23 - q*x13*x22 - However, unlike for the quantum determinant, they are not central: - sage: all(qm12 * g == g * qm12 for g in O.algebra_generators()) False sage: all(qm13 * g == g * qm13 for g in O.algebra_generators()) False sage: all(qm23 * g == g * qm23 for g in O.algebra_generators()) False - >>> from sage.all import * >>> all(qm12 * g == g * qm12 for g in O.algebra_generators()) False >>> all(qm13 * g == g * qm13 for g in O.algebra_generators()) False >>> all(qm23 * g == g * qm23 for g in O.algebra_generators()) False - REFERENCES: - algebra_generators()[source]¶
- Return the algebra generators of - self.- EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(2) sage: O.algebra_generators() Finite family {(1, 1): x[1,1], (1, 2): x[1,2], (2, 1): x[2,1], (2, 2): x[2,2]} - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(2)) >>> O.algebra_generators() Finite family {(1, 1): x[1,1], (1, 2): x[1,2], (2, 1): x[2,1], (2, 2): x[2,2]} 
 - coproduct_on_basis(x)[source]¶
- Return the coproduct on the basis element indexed by - x.- EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(4) sage: x24 = O.algebra_generators()[2,4] sage: O.coproduct_on_basis(x24.leading_support()) x[2,1] # x[1,4] + x[2,2] # x[2,4] + x[2,3] # x[3,4] + x[2,4] # x[4,4] - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(4)) >>> x24 = O.algebra_generators()[Integer(2),Integer(4)] >>> O.coproduct_on_basis(x24.leading_support()) x[2,1] # x[1,4] + x[2,2] # x[2,4] + x[2,3] # x[3,4] + x[2,4] # x[4,4] 
 - m()[source]¶
- Return the value \(m\). - EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(4, 6) sage: O.m() 4 sage: O = algebras.QuantumMatrixCoordinate(4) sage: O.m() 4 - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(4), Integer(6)) >>> O.m() 4 >>> O = algebras.QuantumMatrixCoordinate(Integer(4)) >>> O.m() 4 
 
- class sage.algebras.quantum_matrix_coordinate_algebra.QuantumMatrixCoordinateAlgebra_abstract(gp_indices, n, q, bar, R, category, indices_key=None)[source]¶
- Bases: - CombinatorialFreeModule- Abstract base class for quantum coordinate algebras of a set of matrices. - class Element[source]¶
- Bases: - IndexedFreeModuleElement- An element of a quantum matrix coordinate algebra. - bar()[source]¶
- Return the image of - selfunder the bar involution.- The bar involution is the \(\QQ\)-algebra anti-automorphism defined by \(x_{ij} \mapsto x_{ji}\) and \(q \mapsto q^{-1}\). - EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(4) sage: x = O.an_element() sage: x.bar() 1 + 2*x[1,1] + (q^-16)*x[1,1]^2*x[1,2]^2*x[1,3]^3 + 3*x[1,2] sage: x = O.an_element() * O.algebra_generators()[2,4]; x x[1,1]^2*x[1,2]^2*x[1,3]^3*x[2,4] + 2*x[1,1]*x[2,4] + 3*x[1,2]*x[2,4] + x[2,4] sage: xb = x.bar(); xb (q^-16)*x[1,1]^2*x[1,2]^2*x[1,3]^3*x[2,4] + (q^-21-q^-15)*x[1,1]^2*x[1,2]^2*x[1,3]^2*x[1,4]*x[2,3] + (q^-22-q^-18)*x[1,1]^2*x[1,2]*x[1,3]^3*x[1,4]*x[2,2] + (q^-24-q^-20)*x[1,1]*x[1,2]^2*x[1,3]^3*x[1,4]*x[2,1] + 2*x[1,1]*x[2,4] + 3*x[1,2]*x[2,4] + (2*q^-1-2*q)*x[1,4]*x[2,1] + (3*q^-1-3*q)*x[1,4]*x[2,2] + x[2,4] sage: xb.bar() == x True - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(4)) >>> x = O.an_element() >>> x.bar() 1 + 2*x[1,1] + (q^-16)*x[1,1]^2*x[1,2]^2*x[1,3]^3 + 3*x[1,2] >>> x = O.an_element() * O.algebra_generators()[Integer(2),Integer(4)]; x x[1,1]^2*x[1,2]^2*x[1,3]^3*x[2,4] + 2*x[1,1]*x[2,4] + 3*x[1,2]*x[2,4] + x[2,4] >>> xb = x.bar(); xb (q^-16)*x[1,1]^2*x[1,2]^2*x[1,3]^3*x[2,4] + (q^-21-q^-15)*x[1,1]^2*x[1,2]^2*x[1,3]^2*x[1,4]*x[2,3] + (q^-22-q^-18)*x[1,1]^2*x[1,2]*x[1,3]^3*x[1,4]*x[2,2] + (q^-24-q^-20)*x[1,1]*x[1,2]^2*x[1,3]^3*x[1,4]*x[2,1] + 2*x[1,1]*x[2,4] + 3*x[1,2]*x[2,4] + (2*q^-1-2*q)*x[1,4]*x[2,1] + (3*q^-1-3*q)*x[1,4]*x[2,2] + x[2,4] >>> xb.bar() == x True 
 
 - counit_on_basis(x)[source]¶
- Return the counit on the basis element indexed by - x.- EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(4) sage: G = O.algebra_generators() sage: I = [1,2,3,4] sage: matrix([[G[i,j].counit() for i in I] for j in I]) # indirect doctest [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1] - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(4)) >>> G = O.algebra_generators() >>> I = [Integer(1),Integer(2),Integer(3),Integer(4)] >>> matrix([[G[i,j].counit() for i in I] for j in I]) # indirect doctest [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1] 
 - gens()[source]¶
- Return the generators of - selfas a tuple.- EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(3) sage: O.gens() (x[1,1], x[1,2], x[1,3], x[2,1], x[2,2], x[2,3], x[3,1], x[3,2], x[3,3]) - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(3)) >>> O.gens() (x[1,1], x[1,2], x[1,3], x[2,1], x[2,2], x[2,3], x[3,1], x[3,2], x[3,3]) 
 - n()[source]¶
- Return the value \(n\). - EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(4) sage: O.n() 4 sage: O = algebras.QuantumMatrixCoordinate(4, 6) sage: O.n() 6 - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(4)) >>> O.n() 4 >>> O = algebras.QuantumMatrixCoordinate(Integer(4), Integer(6)) >>> O.n() 6 
 - one_basis()[source]¶
- Return the basis element indexing \(1\). - EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(4) sage: O.one_basis() 1 sage: O.one() 1 - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(4)) >>> O.one_basis() 1 >>> O.one() 1 
 - product_on_basis(a, b)[source]¶
- Return the product of basis elements indexed by - aand- b.- EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(4) sage: x = O.algebra_generators() sage: b = x[1,4] * x[2,1] * x[3,4] # indirect doctest sage: b * (b * b) == (b * b) * b True sage: p = prod(list(O.algebra_generators())[:10]) sage: p * (p * p) == (p * p) * p # long time True sage: x = O.an_element() sage: y = x^2 + x[4,4] * x[3,3] * x[1,2] sage: z = x[2,2] * x[1,4] * x[3,4] * x[1,1] sage: x * (y * z) == (x * y) * z True - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(4)) >>> x = O.algebra_generators() >>> b = x[Integer(1),Integer(4)] * x[Integer(2),Integer(1)] * x[Integer(3),Integer(4)] # indirect doctest >>> b * (b * b) == (b * b) * b True >>> p = prod(list(O.algebra_generators())[:Integer(10)]) >>> p * (p * p) == (p * p) * p # long time True >>> x = O.an_element() >>> y = x**Integer(2) + x[Integer(4),Integer(4)] * x[Integer(3),Integer(3)] * x[Integer(1),Integer(2)] >>> z = x[Integer(2),Integer(2)] * x[Integer(1),Integer(4)] * x[Integer(3),Integer(4)] * x[Integer(1),Integer(1)] >>> x * (y * z) == (x * y) * z True 
 - q()[source]¶
- Return the variable - q.- EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(4) sage: O.q() q sage: O.q().parent() Univariate Laurent Polynomial Ring in q over Integer Ring sage: O.q().parent() is O.base_ring() True - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(4)) >>> O.q() q >>> O.q().parent() Univariate Laurent Polynomial Ring in q over Integer Ring >>> O.q().parent() is O.base_ring() True 
 - quantum_determinant()[source]¶
- Return the quantum determinant of - self.- The quantum determinant is defined by \[\det_q = \sum_{\sigma \in S_n} (-q)^{\ell(\sigma)} x_{1, \sigma(1)} x_{2, \sigma(2)} \cdots x_{n, \sigma(n)}.\]- EXAMPLES: - sage: O = algebras.QuantumMatrixCoordinate(2) sage: O.quantum_determinant() x[1,1]*x[2,2] - q*x[1,2]*x[2,1] - >>> from sage.all import * >>> O = algebras.QuantumMatrixCoordinate(Integer(2)) >>> O.quantum_determinant() x[1,1]*x[2,2] - q*x[1,2]*x[2,1] - We verify that the quantum determinant is central: - sage: for n in range(2,5): ....: O = algebras.QuantumMatrixCoordinate(n) ....: qdet = O.quantum_determinant() ....: assert all(g * qdet == qdet * g for g in O.algebra_generators()) - >>> from sage.all import * >>> for n in range(Integer(2),Integer(5)): ... O = algebras.QuantumMatrixCoordinate(n) ... qdet = O.quantum_determinant() ... assert all(g * qdet == qdet * g for g in O.algebra_generators()) - We also verify that it is group-like: - sage: for n in range(2,4): ....: O = algebras.QuantumMatrixCoordinate(n) ....: qdet = O.quantum_determinant() ....: assert qdet.coproduct() == tensor([qdet, qdet]) - >>> from sage.all import * >>> for n in range(Integer(2),Integer(4)): ... O = algebras.QuantumMatrixCoordinate(n) ... qdet = O.quantum_determinant() ... assert qdet.coproduct() == tensor([qdet, qdet])