Cubic Hecke Base Rings

This module contains special classes of polynomial rings (CubicHeckeRingOfDefinition and CubicHeckeExtensionRing) used in the context of cubic Hecke algebras.

AUTHORS:

  • Sebastian Oehms May 2020: initial version

class sage.algebras.hecke_algebras.cubic_hecke_base_ring.CubicHeckeExtensionRing(names, order='degrevlex', ring_of_definition=None, third_unity_root_name='e3', markov_trace_version=False)[source]

Bases: LaurentPolynomialRing_mpair

The generic splitting algebra for the irreducible representations of the cubic Hecke algebra.

This ring must contain three invertible indeterminates (representing the roots of the cubic equation) together with a third root of unity (needed for the 18-dimensional irreducibles of the cubic Hecke algebra on 4 strands).

Therefore this ring is constructed as a multivariate Laurent polynomial ring in three indeterminates over a polynomial quotient ring over the integers with respect to the minimal polynomial of a third root of unity.

The polynomial quotient ring is constructed as instance of SplittingAlgebra.

INPUT:

  • names – (default: 'u,v,w') string containing the names of the indeterminates separated by , or a triple of strings each of which are the names of one of the three indeterminates

  • order – string (default: 'degrevlex'); the term order; see also LaurentPolynomialRing_mpair

  • ring_of_definition – (optional) a CubicHeckeRingOfDefinition to specify the generic cubic Hecke base ring over which self may be realized as splitting ring via the as_splitting_algebra method

  • third_unity_root_name – string (default: 'e3'); for setting the name of the third root if unity of self

  • markov_trace_version – boolean (default: False); if this is set to True then self contains one invertible indeterminate in addition which is meant to represent the writhe factor of a Markov trace on the cubic Hecke algebra and which default name is s

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: chbr.CubicHeckeExtensionRing('a, b, c')
Multivariate Laurent Polynomial Ring in a, b, c
  over Splitting Algebra of x^2 + x + 1
    with roots [e3, -e3 - 1]
  over Integer Ring
sage: _.an_element()
b^2*c^-1 + e3*a
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> chbr.CubicHeckeExtensionRing('a, b, c')
Multivariate Laurent Polynomial Ring in a, b, c
  over Splitting Algebra of x^2 + x + 1
    with roots [e3, -e3 - 1]
  over Integer Ring
>>> _.an_element()
b^2*c^-1 + e3*a
as_splitting_algebra()[source]

Return self as a SplittingAlgebra; that is as an extension ring of the corresponding cubic Hecke algebra base ring (self._ring_of_definition, as a CubicHeckeRingOfDefinition) splitting its cubic equation into linear factors, such that the roots are images of the generators of self.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: GBR = chbr.CubicHeckeRingOfDefinition()
sage: GER = GBR.extension_ring()
sage: ER = GER.as_splitting_algebra(); ER
Splitting Algebra of T^2 + T + 1 with roots [E3, -E3 - 1]
  over Splitting Algebra of h^3 - u*h^2 + v*h - w
    with roots [a, b, -b - a + u]
  over Multivariate Polynomial Ring in u, v, w
  over Integer Ring localized at (w,)
sage: ER(GER.an_element())
a*E3 + ((u/(-w))*a^2 + ((u^2 - v)/w)*a)*b + a - u
sage: ER(GBR.an_element())
(u^2 + v*w)/w

sage: MBR = chbr.CubicHeckeRingOfDefinition(markov_trace_version=True)
sage: MER = MBR.extension_ring()
sage: ES = MER.as_splitting_algebra(); ES
Splitting Algebra of T^2 + T + 1 with roots [E3, -E3 - 1]
  over Splitting Algebra of h^3 - u*h^2 + v*h - w
    with roots [a, b, -b - a + u]
  over Multivariate Polynomial Ring in u, v, w, s
  over Integer Ring localized at (s, w, v, u)
sage: ES(MER.an_element())
(((-1)/(-s))*a)*E3 + ((u/(-w))*a^2 + ((u^2 - v)/w)*a)*b + a - u
sage: ES(MBR.an_element())
(u^2*s + v*w)/(w*s)
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> GBR = chbr.CubicHeckeRingOfDefinition()
>>> GER = GBR.extension_ring()
>>> ER = GER.as_splitting_algebra(); ER
Splitting Algebra of T^2 + T + 1 with roots [E3, -E3 - 1]
  over Splitting Algebra of h^3 - u*h^2 + v*h - w
    with roots [a, b, -b - a + u]
  over Multivariate Polynomial Ring in u, v, w
  over Integer Ring localized at (w,)
>>> ER(GER.an_element())
a*E3 + ((u/(-w))*a^2 + ((u^2 - v)/w)*a)*b + a - u
>>> ER(GBR.an_element())
(u^2 + v*w)/w

>>> MBR = chbr.CubicHeckeRingOfDefinition(markov_trace_version=True)
>>> MER = MBR.extension_ring()
>>> ES = MER.as_splitting_algebra(); ES
Splitting Algebra of T^2 + T + 1 with roots [E3, -E3 - 1]
  over Splitting Algebra of h^3 - u*h^2 + v*h - w
    with roots [a, b, -b - a + u]
  over Multivariate Polynomial Ring in u, v, w, s
  over Integer Ring localized at (s, w, v, u)
>>> ES(MER.an_element())
(((-1)/(-s))*a)*E3 + ((u/(-w))*a^2 + ((u^2 - v)/w)*a)*b + a - u
>>> ES(MBR.an_element())
(u^2*s + v*w)/(w*s)
conjugation()[source]

Return an involution that performs complex conjugation with respect to base ring considered as order in the complex field.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: ER = chbr.CubicHeckeExtensionRing('x, y, z')
sage: conj = ER.conjugation()
sage: conj(ER.an_element())
y^2*z^-1 + (-e3 - 1)*x
sage: MER = chbr.CubicHeckeExtensionRing('x, y, z, s', markov_trace_version=True)
sage: conj = MER.conjugation()
sage: conj(MER.an_element())
y^2*z^-1 + (-e3 - 1)*x*s^-1
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> ER = chbr.CubicHeckeExtensionRing('x, y, z')
>>> conj = ER.conjugation()
>>> conj(ER.an_element())
y^2*z^-1 + (-e3 - 1)*x
>>> MER = chbr.CubicHeckeExtensionRing('x, y, z, s', markov_trace_version=True)
>>> conj = MER.conjugation()
>>> conj(MER.an_element())
y^2*z^-1 + (-e3 - 1)*x*s^-1
construction()[source]

Return None since this construction is not functorial.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: ER = chbr.CubicHeckeExtensionRing('a, b, c')
sage: ER._test_category()   # indirect doctest
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> ER = chbr.CubicHeckeExtensionRing('a, b, c')
>>> ER._test_category()   # indirect doctest
create_specialization(im_cubic_equation_roots, im_writhe_parameter=None, var='T', third_unity_root_name='E3')[source]

Return an appropriate ring containing the elements from the list im_cubic_equation_roots defining a conversion map from self mapping the cubic equation roots of self to im_cubic_equation_roots.

INPUT:

  • im_cubic_equation_roots – list or tuple of three ring elements such that there exists a ring homomorphism from the corresponding elements of self to them

OUTPUT:

A common parent containing the elements of im_cubic_equation_roots together with their inverses.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: ER = chbr.CubicHeckeExtensionRing('a, b, c')
sage: t = ER.an_element(); t
b^2*c^-1 + e3*a
sage: Sp1 = ER.create_specialization([E(5), E(7), E(3)]); Sp1
Universal Cyclotomic Field
sage: Sp1(t)
-E(105)^11 - E(105)^16 - E(105)^26 - E(105)^37 - E(105)^41
- E(105)^58 - E(105)^71 - E(105)^79 - E(105)^86 - E(105)^101
sage: MER = chbr.CubicHeckeExtensionRing('a, b, c, s', markov_trace_version=True)
sage: MER.create_specialization([E(5), E(7), E(3)], im_writhe_parameter=E(4))
Universal Cyclotomic Field
sage: a, b, c, s = MER.gens()
sage: Sp1(MER(t)/s)
E(420) + E(420)^29 + E(420)^89 + E(420)^149 + E(420)^169 + E(420)^209
+ E(420)^253 + E(420)^269 + E(420)^337 + E(420)^389

sage: Z3 = CyclotomicField(3); E3=Z3.gen()
sage: Sp2 = ER.create_specialization([E3, E3**2, Z3(1)])
sage: Sp2(t)
-1
sage: MER.create_specialization([E3, E3**2, 1], im_writhe_parameter=2)
Cyclotomic Field of order 3 and degree 2
sage: Sp2(MER(t)*s)
-2

sage: Sp3 = ER.create_specialization([5, 7, 11])
sage: Sp3(t)
5*E3 + 49/11
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> ER = chbr.CubicHeckeExtensionRing('a, b, c')
>>> t = ER.an_element(); t
b^2*c^-1 + e3*a
>>> Sp1 = ER.create_specialization([E(Integer(5)), E(Integer(7)), E(Integer(3))]); Sp1
Universal Cyclotomic Field
>>> Sp1(t)
-E(105)^11 - E(105)^16 - E(105)^26 - E(105)^37 - E(105)^41
- E(105)^58 - E(105)^71 - E(105)^79 - E(105)^86 - E(105)^101
>>> MER = chbr.CubicHeckeExtensionRing('a, b, c, s', markov_trace_version=True)
>>> MER.create_specialization([E(Integer(5)), E(Integer(7)), E(Integer(3))], im_writhe_parameter=E(Integer(4)))
Universal Cyclotomic Field
>>> a, b, c, s = MER.gens()
>>> Sp1(MER(t)/s)
E(420) + E(420)^29 + E(420)^89 + E(420)^149 + E(420)^169 + E(420)^209
+ E(420)^253 + E(420)^269 + E(420)^337 + E(420)^389

>>> Z3 = CyclotomicField(Integer(3)); E3=Z3.gen()
>>> Sp2 = ER.create_specialization([E3, E3**Integer(2), Z3(Integer(1))])
>>> Sp2(t)
-1
>>> MER.create_specialization([E3, E3**Integer(2), Integer(1)], im_writhe_parameter=Integer(2))
Cyclotomic Field of order 3 and degree 2
>>> Sp2(MER(t)*s)
-2

>>> Sp3 = ER.create_specialization([Integer(5), Integer(7), Integer(11)])
>>> Sp3(t)
5*E3 + 49/11
cubic_equation_galois_group()[source]

Return the Galois group of the cubic equation, which is the permutation group on the three generators together with its action on self.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: ER = chbr.CubicHeckeExtensionRing('a, b, c')
sage: G = ER.cubic_equation_galois_group()
sage: t = ER.an_element()
sage: [(g ,g*t) for g in G]
[((), b^2*c^-1 + e3*a),
((1,3,2), a^2*b^-1 + e3*c),
((1,2,3), e3*b + a^-1*c^2),
((2,3), e3*a + b^-1*c^2),
((1,3), a^-1*b^2 + e3*c),
((1,2), a^2*c^-1 + e3*b)]
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> ER = chbr.CubicHeckeExtensionRing('a, b, c')
>>> G = ER.cubic_equation_galois_group()
>>> t = ER.an_element()
>>> [(g ,g*t) for g in G]
[((), b^2*c^-1 + e3*a),
((1,3,2), a^2*b^-1 + e3*c),
((1,2,3), e3*b + a^-1*c^2),
((2,3), e3*a + b^-1*c^2),
((1,3), a^-1*b^2 + e3*c),
((1,2), a^2*c^-1 + e3*b)]
cyclotomic_generator()[source]

Return the third root of unity as generator of the base ring of self.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: ER  = chbr.CubicHeckeExtensionRing('a, b, c')
sage: ER.cyclotomic_generator()
e3
sage: _**3 == 1
True
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> ER  = chbr.CubicHeckeExtensionRing('a, b, c')
>>> ER.cyclotomic_generator()
e3
>>> _**Integer(3) == Integer(1)
True
field_embedding(characteristic=0)[source]

Return a field embedding of self.

INPUT:

  • characteristic – integer (default: \(0\)); the characteristic of the field

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: BR = chbr.CubicHeckeRingOfDefinition()
sage: ER = BR.extension_ring()
sage: ER.field_embedding()
Ring morphism:
From: Multivariate Laurent Polynomial Ring in a, b, c
        over Splitting Algebra of x^2 + x + 1
          with roots [e3, -e3 - 1]
        over Integer Ring
To:   Fraction Field of Multivariate Polynomial Ring in a, b, c
        over Cyclotomic Field of order 3 and degree 2
Defn: a |--> a
      b |--> b
      c |--> c
with map of base ring

sage: ER.field_embedding(characteristic=5)
Ring morphism:
From: Multivariate Laurent Polynomial Ring in a, b, c
        over Splitting Algebra of x^2 + x + 1
          with roots [e3, -e3 - 1]
        over Integer Ring
To:   Fraction Field of Multivariate Polynomial Ring in a, b, c
        over Finite Field in a of size 5^2
Defn: a |--> a
      b |--> b
      c |--> c
with map of base ring

sage: MER = ER.markov_trace_version()
sage: MER.field_embedding()
Ring morphism:
From: Multivariate Laurent Polynomial Ring in a, b, c, s
        over Splitting Algebra of x^2 + x + 1
          with roots [e3, -e3 - 1]
        over Integer Ring
To:   Fraction Field of Multivariate Polynomial Ring in a, b, c, s
        over Cyclotomic Field of order 3 and degree 2
Defn: a |--> a
      b |--> b
      c |--> c
      s |--> s
with map of base ring
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> BR = chbr.CubicHeckeRingOfDefinition()
>>> ER = BR.extension_ring()
>>> ER.field_embedding()
Ring morphism:
From: Multivariate Laurent Polynomial Ring in a, b, c
        over Splitting Algebra of x^2 + x + 1
          with roots [e3, -e3 - 1]
        over Integer Ring
To:   Fraction Field of Multivariate Polynomial Ring in a, b, c
        over Cyclotomic Field of order 3 and degree 2
Defn: a |--> a
      b |--> b
      c |--> c
with map of base ring

>>> ER.field_embedding(characteristic=Integer(5))
Ring morphism:
From: Multivariate Laurent Polynomial Ring in a, b, c
        over Splitting Algebra of x^2 + x + 1
          with roots [e3, -e3 - 1]
        over Integer Ring
To:   Fraction Field of Multivariate Polynomial Ring in a, b, c
        over Finite Field in a of size 5^2
Defn: a |--> a
      b |--> b
      c |--> c
with map of base ring

>>> MER = ER.markov_trace_version()
>>> MER.field_embedding()
Ring morphism:
From: Multivariate Laurent Polynomial Ring in a, b, c, s
        over Splitting Algebra of x^2 + x + 1
          with roots [e3, -e3 - 1]
        over Integer Ring
To:   Fraction Field of Multivariate Polynomial Ring in a, b, c, s
        over Cyclotomic Field of order 3 and degree 2
Defn: a |--> a
      b |--> b
      c |--> c
      s |--> s
with map of base ring
hom(im_gens, codomain=None, check=True, base_map=None)[source]

Return a homomorphism of self.

INPUT:

  • im_gens – tuple for the image of the generators of self

  • codomain – (optional) the codomain of the homomorphism

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: ER = chbr.CubicHeckeExtensionRing('a, b, c')
sage: UCF = UniversalCyclotomicField()
sage: map = ER.hom((UCF.gen(3),) + (UCF(3),UCF(4),UCF(5)))
sage: ER.an_element()
b^2*c^-1 + e3*a
sage: map(_)
-1/5*E(3) - 16/5*E(3)^2
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> ER = chbr.CubicHeckeExtensionRing('a, b, c')
>>> UCF = UniversalCyclotomicField()
>>> map = ER.hom((UCF.gen(Integer(3)),) + (UCF(Integer(3)),UCF(Integer(4)),UCF(Integer(5))))
>>> ER.an_element()
b^2*c^-1 + e3*a
>>> map(_)
-1/5*E(3) - 16/5*E(3)^2
markov_trace_version()[source]

Return the Markov trace version of self.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: ER = chbr.CubicHeckeExtensionRing('a, b, c')
sage: ER.markov_trace_version()
Multivariate Laurent Polynomial Ring in a, b, c, s
  over Splitting Algebra of x^2 + x + 1
    with roots [e3, -e3 - 1] over Integer Ring
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> ER = chbr.CubicHeckeExtensionRing('a, b, c')
>>> ER.markov_trace_version()
Multivariate Laurent Polynomial Ring in a, b, c, s
  over Splitting Algebra of x^2 + x + 1
    with roots [e3, -e3 - 1] over Integer Ring
mirror_involution()[source]

Return the involution of self corresponding to the involution of the cubic Hecke algebra (with the same name).

This means that it maps the generators of self to their inverses.

Note

The mirror involution of the braid group does not factor through the cubic Hecke algebra over its base ring, but it does if it is considered as \(\ZZ\)-algebra. The base ring elements are transformed by this automorphism.

OUTPUT: the involution as automorphism of self

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: ER = chbr.CubicHeckeExtensionRing('p, q, r')
sage: ER.mirror_involution()
Ring endomorphism of Multivariate Laurent Polynomial Ring in p, q, r
                     over Splitting Algebra of x^2 + x + 1
                       with roots [e3, -e3 - 1]
                     over Integer Ring
  Defn: p |--> p^-1
        q |--> q^-1
        r |--> r^-1
        with map of base ring
sage: _(ER.an_element())
e3*p^-1 + q^-2*r

sage: MER = chbr.CubicHeckeExtensionRing('p, q, r, s', markov_trace_version=True)
sage: MER.mirror_involution()
Ring endomorphism of Multivariate Laurent Polynomial Ring in p, q, r, s
  over Splitting Algebra of x^2 + x + 1
    with roots [e3, -e3 - 1] over Integer Ring
Defn: p |--> p^-1
q |--> q^-1
r |--> r^-1
s |--> s^-1
with map of base ring
sage: _(MER.an_element())
e3*p^-1*s + q^-2*r
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> ER = chbr.CubicHeckeExtensionRing('p, q, r')
>>> ER.mirror_involution()
Ring endomorphism of Multivariate Laurent Polynomial Ring in p, q, r
                     over Splitting Algebra of x^2 + x + 1
                       with roots [e3, -e3 - 1]
                     over Integer Ring
  Defn: p |--> p^-1
        q |--> q^-1
        r |--> r^-1
        with map of base ring
>>> _(ER.an_element())
e3*p^-1 + q^-2*r

>>> MER = chbr.CubicHeckeExtensionRing('p, q, r, s', markov_trace_version=True)
>>> MER.mirror_involution()
Ring endomorphism of Multivariate Laurent Polynomial Ring in p, q, r, s
  over Splitting Algebra of x^2 + x + 1
    with roots [e3, -e3 - 1] over Integer Ring
Defn: p |--> p^-1
q |--> q^-1
r |--> r^-1
s |--> s^-1
with map of base ring
>>> _(MER.an_element())
e3*p^-1*s + q^-2*r
class sage.algebras.hecke_algebras.cubic_hecke_base_ring.CubicHeckeRingOfDefinition(names=('u', 'v', 'w', 's'), order='degrevlex', markov_trace_version=False)[source]

Bases: Localization

The ring of definition of the cubic Hecke algebra.

It contains one invertible indeterminate (representing the product of the roots of the cubic equation) and two non invertible indeterminates.

Note

We follow a suggestion by Ivan Marin in the name ring of definition. We avoid alternative names like generic or universal base ring as these have some issues. The first option could be misleading in view of the term generic point used in algebraic geometry, which would mean the function field in u, v, w, here.

The second option is problematic since the base ring itself is not a universal object. Rather, the universal object is the cubic Hecke algebra considered as a \(\ZZ\)-algebra including u, v, w as pairwise commuting indeterminates. From this point of view the base ring appears to be a subalgebra of this universal object generated by u, v, w.

INPUT:

  • names – (default: 'u,v,w') string containing the names of the indeterminates separated by , or a triple of strings each of which are the names of one of the three indeterminates

  • order – string (default: 'degrevlex'); the term order; see also LaurentPolynomialRing_mpair

  • ring_of_definition – (optional) a CubicHeckeRingOfDefinition to specify the generic cubic Hecke base ring over which self may be realized as splitting ring via the as_splitting_algebra method

  • markov_trace_version – boolean (default: False); if this is set to True then self contains one invertible indeterminate in addition which is meant to represent the writhe factor of a Markov trace on the cubic Hecke algebra and which default name is s

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: BR = chbr.CubicHeckeRingOfDefinition()
sage: u, v, w = BR.gens()
sage: ele = 3*u*v-5*w**(-2)
sage: ER = BR.extension_ring()
sage: ER(ele)
3*a^2*b + 3*a*b^2 + 3*a^2*c + 9*a*b*c + 3*b^2*c
+ 3*a*c^2 + 3*b*c^2 + (-5)*a^-2*b^-2*c^-2
sage: phi1 = BR.hom( [4,3,1/1] )
sage: phi1(ele)
31

sage: LL.<t> = LaurentPolynomialRing(ZZ)
sage: phi2=BR.hom( [LL(4),LL(3),t] )
sage: phi2(ele)
-5*t^-2 + 36

sage: BR.create_specialization( [E(5), E(7), E(3)] )
Universal Cyclotomic Field
sage: _(ele)
-3*E(105) - 5*E(105)^2 - 5*E(105)^8 - 5*E(105)^11 - 5*E(105)^17
- 5*E(105)^23 - 5*E(105)^26 - 5*E(105)^29 - 5*E(105)^32 - 5*E(105)^38
- 5*E(105)^41 - 5*E(105)^44 - 5*E(105)^47 - 5*E(105)^53 - 5*E(105)^59
- 5*E(105)^62 - 5*E(105)^68 - 8*E(105)^71 - 5*E(105)^74 - 5*E(105)^83
- 5*E(105)^86 - 5*E(105)^89 - 5*E(105)^92 - 5*E(105)^101 - 5*E(105)^104
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> BR = chbr.CubicHeckeRingOfDefinition()
>>> u, v, w = BR.gens()
>>> ele = Integer(3)*u*v-Integer(5)*w**(-Integer(2))
>>> ER = BR.extension_ring()
>>> ER(ele)
3*a^2*b + 3*a*b^2 + 3*a^2*c + 9*a*b*c + 3*b^2*c
+ 3*a*c^2 + 3*b*c^2 + (-5)*a^-2*b^-2*c^-2
>>> phi1 = BR.hom( [Integer(4),Integer(3),Integer(1)/Integer(1)] )
>>> phi1(ele)
31

>>> LL = LaurentPolynomialRing(ZZ, names=('t',)); (t,) = LL._first_ngens(1)
>>> phi2=BR.hom( [LL(Integer(4)),LL(Integer(3)),t] )
>>> phi2(ele)
-5*t^-2 + 36

>>> BR.create_specialization( [E(Integer(5)), E(Integer(7)), E(Integer(3))] )
Universal Cyclotomic Field
>>> _(ele)
-3*E(105) - 5*E(105)^2 - 5*E(105)^8 - 5*E(105)^11 - 5*E(105)^17
- 5*E(105)^23 - 5*E(105)^26 - 5*E(105)^29 - 5*E(105)^32 - 5*E(105)^38
- 5*E(105)^41 - 5*E(105)^44 - 5*E(105)^47 - 5*E(105)^53 - 5*E(105)^59
- 5*E(105)^62 - 5*E(105)^68 - 8*E(105)^71 - 5*E(105)^74 - 5*E(105)^83
- 5*E(105)^86 - 5*E(105)^89 - 5*E(105)^92 - 5*E(105)^101 - 5*E(105)^104
create_specialization(im_cubic_equation_parameters, im_writhe_parameter=None)[source]

Return an appropriate Ring containing the elements from the list im_cubic_equation_parameters having a conversion map from self mapping the cubic equation parameters of self to im_cubic_equation_parameters.

INPUT:

  • im_cubic_equation_parameters – list or tuple of three ring elements such that there exists a ring homomorphism from the corresponding elements of self to them

OUTPUT:

A common parent containing the elements of im_cubic_equation_parameters together with an inverse of the third element.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: BR = chbr.CubicHeckeRingOfDefinition()
sage: t = BR.an_element(); t
(u^2 + v*w)/w
sage: Sp1 = BR.create_specialization([E(5), E(7), E(3)]); Sp1
Universal Cyclotomic Field
sage: Sp1(t)
E(105) + E(105)^8 + E(105)^29 - E(105)^37 + E(105)^43 - E(105)^52
+ E(105)^64 - E(105)^67 + E(105)^71 - E(105)^82 + E(105)^92
- E(105)^97

sage: MBR = chbr.CubicHeckeRingOfDefinition(markov_trace_version=True)
sage: MBR.create_specialization([E(5), E(7), E(3)], im_writhe_parameter=E(4))
Universal Cyclotomic Field
sage: u, v, w, s = MBR.gens()
sage: Sp1(MBR(t)/s)
E(420)^13 - E(420)^53 + E(420)^73 - E(420)^109 - E(420)^137
- E(420)^221 + E(420)^253 - E(420)^277 + E(420)^313 - E(420)^361
+ E(420)^373 - E(420)^389

sage: Z3 = CyclotomicField(3); E3=Z3.gen()
sage: Sp2 = BR.create_specialization([E3, E3**2, 1]); Sp2
Cyclotomic Field of order 3 and degree 2
sage: Sp2(t)
-2*zeta3 - 2
sage: MBR.create_specialization([E3, E3**2, 1], im_writhe_parameter=2)
Cyclotomic Field of order 3 and degree 2
sage: Sp2(MBR(t)/s)
-zeta3 - 1

sage: Sp3 = BR.create_specialization([5, 7, 11]); Sp3
Integer Ring localized at (11,)
sage: Sp3(t)
102/11
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> BR = chbr.CubicHeckeRingOfDefinition()
>>> t = BR.an_element(); t
(u^2 + v*w)/w
>>> Sp1 = BR.create_specialization([E(Integer(5)), E(Integer(7)), E(Integer(3))]); Sp1
Universal Cyclotomic Field
>>> Sp1(t)
E(105) + E(105)^8 + E(105)^29 - E(105)^37 + E(105)^43 - E(105)^52
+ E(105)^64 - E(105)^67 + E(105)^71 - E(105)^82 + E(105)^92
- E(105)^97

>>> MBR = chbr.CubicHeckeRingOfDefinition(markov_trace_version=True)
>>> MBR.create_specialization([E(Integer(5)), E(Integer(7)), E(Integer(3))], im_writhe_parameter=E(Integer(4)))
Universal Cyclotomic Field
>>> u, v, w, s = MBR.gens()
>>> Sp1(MBR(t)/s)
E(420)^13 - E(420)^53 + E(420)^73 - E(420)^109 - E(420)^137
- E(420)^221 + E(420)^253 - E(420)^277 + E(420)^313 - E(420)^361
+ E(420)^373 - E(420)^389

>>> Z3 = CyclotomicField(Integer(3)); E3=Z3.gen()
>>> Sp2 = BR.create_specialization([E3, E3**Integer(2), Integer(1)]); Sp2
Cyclotomic Field of order 3 and degree 2
>>> Sp2(t)
-2*zeta3 - 2
>>> MBR.create_specialization([E3, E3**Integer(2), Integer(1)], im_writhe_parameter=Integer(2))
Cyclotomic Field of order 3 and degree 2
>>> Sp2(MBR(t)/s)
-zeta3 - 1

>>> Sp3 = BR.create_specialization([Integer(5), Integer(7), Integer(11)]); Sp3
Integer Ring localized at (11,)
>>> Sp3(t)
102/11
cubic_equation(var='h', as_coefficients=False)[source]

Return the cubic equation over which the cubic Hecke algebra is defined.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: BR = chbr.CubicHeckeRingOfDefinition()
sage: BR.cubic_equation()
h^3 - u*h^2 + v*h - w
sage: BR.cubic_equation(var='t')
t^3 - u*t^2 + v*t - w
sage: BR.cubic_equation(as_coefficients=True)
[-w, v, -u, 1]
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> BR = chbr.CubicHeckeRingOfDefinition()
>>> BR.cubic_equation()
h^3 - u*h^2 + v*h - w
>>> BR.cubic_equation(var='t')
t^3 - u*t^2 + v*t - w
>>> BR.cubic_equation(as_coefficients=True)
[-w, v, -u, 1]
extension_ring(names=('a', 'b', 'c', 's'))[source]

Return the generic extension ring attached to self.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: BR = chbr.CubicHeckeRingOfDefinition()
sage: BR.extension_ring()
Multivariate Laurent Polynomial Ring in a, b, c
  over Splitting Algebra of x^2 + x + 1
    with roots [e3, -e3 - 1]
  over Integer Ring
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> BR = chbr.CubicHeckeRingOfDefinition()
>>> BR.extension_ring()
Multivariate Laurent Polynomial Ring in a, b, c
  over Splitting Algebra of x^2 + x + 1
    with roots [e3, -e3 - 1]
  over Integer Ring
markov_trace_version()[source]

Return the extension of the ring of definition needed to treat the formal Markov traces.

This appends an additional variable s to measure the writhe of knots and makes u and v invertible.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: GBR = chbr.CubicHeckeRingOfDefinition()
sage: GBR.markov_trace_version()
Multivariate Polynomial Ring in u, v, w, s
  over Integer Ring localized at (s, w, v, u)
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> GBR = chbr.CubicHeckeRingOfDefinition()
>>> GBR.markov_trace_version()
Multivariate Polynomial Ring in u, v, w, s
  over Integer Ring localized at (s, w, v, u)
mirror_involution()[source]

Return the involution of self corresponding to the involution of the cubic Hecke algebra (with the same name).

This means that it maps the last generator of self to its inverse and both others to their product with the image of the former.

From the cubic equation for a braid generator \(\beta_i\):

\[\beta_i^3 - u \beta_i^2 + v\beta_i -w = 0.\]

One deduces the following cubic equation for \(\beta_i^{-1}\):

\[\beta_i^{-3} -\frac{v}{w} \beta_i^{-2} + \frac{u}{w}\beta_i^{-1} - \frac{1}{w} = 0.\]

Note

The mirror involution of the braid group does not factor through the cubic Hecke algebra over its base ring, but it does if it is considered as \(\ZZ\)-algebra. The base ring elements are transformed by this automorphism.

OUTPUT: the involution as automorphism of self

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: BR = chbr.CubicHeckeRingOfDefinition()
sage: BR.mirror_involution()
Ring endomorphism of Multivariate Polynomial Ring in u, v, w
                     over Integer Ring localized at (w,)
  Defn: u |--> v/w
        v |--> u/w
        w |--> 1/w
sage: _(BR.an_element())
(v^2 + u)/w

sage: MBR = chbr.CubicHeckeRingOfDefinition(markov_trace_version=True)
sage: MBR.mirror_involution()
Ring endomorphism of Multivariate Polynomial Ring in u, v, w, s
                     over Integer Ring localized at (s, w, v, u)
Defn: u |--> v/w
v |--> u/w
w |--> 1/w
s |--> 1/s
sage: _(MBR.an_element())
(v^2 + u*s)/w
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> BR = chbr.CubicHeckeRingOfDefinition()
>>> BR.mirror_involution()
Ring endomorphism of Multivariate Polynomial Ring in u, v, w
                     over Integer Ring localized at (w,)
  Defn: u |--> v/w
        v |--> u/w
        w |--> 1/w
>>> _(BR.an_element())
(v^2 + u)/w

>>> MBR = chbr.CubicHeckeRingOfDefinition(markov_trace_version=True)
>>> MBR.mirror_involution()
Ring endomorphism of Multivariate Polynomial Ring in u, v, w, s
                     over Integer Ring localized at (s, w, v, u)
Defn: u |--> v/w
v |--> u/w
w |--> 1/w
s |--> 1/s
>>> _(MBR.an_element())
(v^2 + u*s)/w
specialize_homfly()[source]

Return a map to the two variable Laurent polynomial ring that is the parent of the HOMFLY-PT polynomial.

EXAMPLES:

sage: from sage.knots.knotinfo import KnotInfo
sage: CHA2 = algebras.CubicHecke(2)
sage: K5_1 = KnotInfo.K5_1.link()
sage: br = CHA2(K5_1.braid())
sage: mt = br.formal_markov_trace()
sage: MT = mt.base_ring()
sage: f = MT.specialize_homfly(); f
Composite map:
  From: Multivariate Polynomial Ring in u, v, w, s over Integer Ring
        localized at (s, w, v, u)
  To:   Multivariate Laurent Polynomial Ring in L, M over Integer Ring
  Defn:   Ring morphism:
          From: Multivariate Polynomial Ring in u, v, w, s
                over Integer Ring localized at (s, w, v, u)
          To:   Multivariate Polynomial Ring in L, M
                over Integer Ring localized at (M, M - 1, L)
          Defn: u |--> -M + 1
                v |--> -M + 1
                w |--> 1
                s |--> L
        then
          Conversion map:
          From: Multivariate Polynomial Ring in L, M
                over Integer Ring localized at (M, M - 1, L)
          To:   Multivariate Laurent Polynomial Ring in L, M
                over Integer Ring
sage: sup = mt.support()
sage: h1 = sum(f(mt.coefficient(b)) * b.regular_homfly_polynomial() for b in sup)
sage: L, M = f.codomain().gens()
sage: h2 = K5_1.homfly_polynomial()
sage: h1*L**(-5) == h2  # since the writhe of K5_1 is 5
True
>>> from sage.all import *
>>> from sage.knots.knotinfo import KnotInfo
>>> CHA2 = algebras.CubicHecke(Integer(2))
>>> K5_1 = KnotInfo.K5_1.link()
>>> br = CHA2(K5_1.braid())
>>> mt = br.formal_markov_trace()
>>> MT = mt.base_ring()
>>> f = MT.specialize_homfly(); f
Composite map:
  From: Multivariate Polynomial Ring in u, v, w, s over Integer Ring
        localized at (s, w, v, u)
  To:   Multivariate Laurent Polynomial Ring in L, M over Integer Ring
  Defn:   Ring morphism:
          From: Multivariate Polynomial Ring in u, v, w, s
                over Integer Ring localized at (s, w, v, u)
          To:   Multivariate Polynomial Ring in L, M
                over Integer Ring localized at (M, M - 1, L)
          Defn: u |--> -M + 1
                v |--> -M + 1
                w |--> 1
                s |--> L
        then
          Conversion map:
          From: Multivariate Polynomial Ring in L, M
                over Integer Ring localized at (M, M - 1, L)
          To:   Multivariate Laurent Polynomial Ring in L, M
                over Integer Ring
>>> sup = mt.support()
>>> h1 = sum(f(mt.coefficient(b)) * b.regular_homfly_polynomial() for b in sup)
>>> L, M = f.codomain().gens()
>>> h2 = K5_1.homfly_polynomial()
>>> h1*L**(-Integer(5)) == h2  # since the writhe of K5_1 is 5
True
specialize_kauffman()[source]

Return a map to the two variable Laurent polynomial ring that is the parent of the Kauffman polynomial.

EXAMPLES:

sage: from sage.knots.knotinfo import KnotInfo
sage: CHA2 = algebras.CubicHecke(2)
sage: K5_1 = KnotInfo.K5_1.link()
sage: br = CHA2(K5_1.braid())
sage: mt = br.formal_markov_trace()
sage: MT = mt.base_ring()
sage: f = MT.specialize_kauffman(); f
Composite map:
  From: Multivariate Polynomial Ring in u, v, w, s over Integer Ring
        localized at (s, w, v, u)
  To:   Multivariate Laurent Polynomial Ring in a, z over Integer Ring
  Defn:   Ring morphism:
          From: Multivariate Polynomial Ring in u, v, w, s
                over Integer Ring localized at (s, w, v, u)
          To:   Multivariate Polynomial Ring in a, z
                over Integer Ring localized at (z, a, a + z, a*z + 1)
          Defn: u |--> (a*z + 1)/a
                v |--> (a + z)/a
                w |--> 1/a
                s |--> a
        then
          Conversion map:
          From: Multivariate Polynomial Ring in a, z over Integer Ring
                localized at (z, a, a + z, a*z + 1)
          To:   Multivariate Laurent Polynomial Ring in a, z
                over Integer Ring
sage: sup = mt.support()
sage: k1 = sum(f(mt.coefficient(b)) * b.regular_kauffman_polynomial() for b in sup)
sage: a, z = f.codomain().gens()
sage: k2 = KnotInfo.K5_1.kauffman_polynomial()
sage: k1*a**(-5) == k2  # since the writhe of K5_1 is 5
True
>>> from sage.all import *
>>> from sage.knots.knotinfo import KnotInfo
>>> CHA2 = algebras.CubicHecke(Integer(2))
>>> K5_1 = KnotInfo.K5_1.link()
>>> br = CHA2(K5_1.braid())
>>> mt = br.formal_markov_trace()
>>> MT = mt.base_ring()
>>> f = MT.specialize_kauffman(); f
Composite map:
  From: Multivariate Polynomial Ring in u, v, w, s over Integer Ring
        localized at (s, w, v, u)
  To:   Multivariate Laurent Polynomial Ring in a, z over Integer Ring
  Defn:   Ring morphism:
          From: Multivariate Polynomial Ring in u, v, w, s
                over Integer Ring localized at (s, w, v, u)
          To:   Multivariate Polynomial Ring in a, z
                over Integer Ring localized at (z, a, a + z, a*z + 1)
          Defn: u |--> (a*z + 1)/a
                v |--> (a + z)/a
                w |--> 1/a
                s |--> a
        then
          Conversion map:
          From: Multivariate Polynomial Ring in a, z over Integer Ring
                localized at (z, a, a + z, a*z + 1)
          To:   Multivariate Laurent Polynomial Ring in a, z
                over Integer Ring
>>> sup = mt.support()
>>> k1 = sum(f(mt.coefficient(b)) * b.regular_kauffman_polynomial() for b in sup)
>>> a, z = f.codomain().gens()
>>> k2 = KnotInfo.K5_1.kauffman_polynomial()
>>> k1*a**(-Integer(5)) == k2  # since the writhe of K5_1 is 5
True

Return a map to the two variable Laurent polynomial ring that is the parent of the Links-Gould polynomial.

EXAMPLES:

sage: from sage.knots.knotinfo import KnotInfo
sage: CHA2 = algebras.CubicHecke(2)
sage: K5_1 = KnotInfo.K5_1.link()
sage: br = CHA2(K5_1.braid())
sage: mt = br.formal_markov_trace()
sage: MT = mt.base_ring()
sage: f = MT.specialize_links_gould(); f
Composite map:
  From: Multivariate Polynomial Ring in u, v, w, s over Integer Ring
        localized at (s, w, v, u)
  To:   Multivariate Laurent Polynomial Ring in t0, t1 over Integer Ring
  Defn:   Ring morphism:
          From: Multivariate Polynomial Ring in u, v, w, s
                over Integer Ring localized at (s, w, v, u)
          To:   Multivariate Polynomial Ring in t0, t1 over Integer Ring
                localized at (t1, t0, t0 + t1 - 1, t0*t1 - t0 - t1)
          Defn: u |--> t0 + t1 - 1
                v |--> t0*t1 - t0 - t1
                w |--> -t0*t1
                s |--> 1
        then
          Conversion map:
          From: Multivariate Polynomial Ring in t0, t1 over Integer Ring
                localized at (t1, t0, t0 + t1 - 1, t0*t1 - t0 - t1)
          To:   Multivariate Laurent Polynomial Ring in t0, t1 over Integer Ring
sage: sup = mt.support()
sage: sum(f(mt.coefficient(b)) * b.links_gould_polynomial() for b in sup)
-t0^4*t1 - t0^3*t1^2 - t0^2*t1^3 - t0*t1^4 + t0^4 + 2*t0^3*t1 + 2*t0^2*t1^2
+ 2*t0*t1^3 + t1^4 - t0^3 - 2*t0^2*t1 - 2*t0*t1^2 - t1^3 + t0^2 + 2*t0*t1
+ t1^2 - t0 - t1 + 1
>>> from sage.all import *
>>> from sage.knots.knotinfo import KnotInfo
>>> CHA2 = algebras.CubicHecke(Integer(2))
>>> K5_1 = KnotInfo.K5_1.link()
>>> br = CHA2(K5_1.braid())
>>> mt = br.formal_markov_trace()
>>> MT = mt.base_ring()
>>> f = MT.specialize_links_gould(); f
Composite map:
  From: Multivariate Polynomial Ring in u, v, w, s over Integer Ring
        localized at (s, w, v, u)
  To:   Multivariate Laurent Polynomial Ring in t0, t1 over Integer Ring
  Defn:   Ring morphism:
          From: Multivariate Polynomial Ring in u, v, w, s
                over Integer Ring localized at (s, w, v, u)
          To:   Multivariate Polynomial Ring in t0, t1 over Integer Ring
                localized at (t1, t0, t0 + t1 - 1, t0*t1 - t0 - t1)
          Defn: u |--> t0 + t1 - 1
                v |--> t0*t1 - t0 - t1
                w |--> -t0*t1
                s |--> 1
        then
          Conversion map:
          From: Multivariate Polynomial Ring in t0, t1 over Integer Ring
                localized at (t1, t0, t0 + t1 - 1, t0*t1 - t0 - t1)
          To:   Multivariate Laurent Polynomial Ring in t0, t1 over Integer Ring
>>> sup = mt.support()
>>> sum(f(mt.coefficient(b)) * b.links_gould_polynomial() for b in sup)
-t0^4*t1 - t0^3*t1^2 - t0^2*t1^3 - t0*t1^4 + t0^4 + 2*t0^3*t1 + 2*t0^2*t1^2
+ 2*t0*t1^3 + t1^4 - t0^3 - 2*t0^2*t1 - 2*t0*t1^2 - t1^3 + t0^2 + 2*t0*t1
+ t1^2 - t0 - t1 + 1
class sage.algebras.hecke_algebras.cubic_hecke_base_ring.GaloisGroupAction[source]

Bases: Action

Action on a multivariate polynomial ring by permuting the generators.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: from operator import mul
sage: R.<x, y, z> = ZZ[]
sage: G = SymmetricGroup(3)
sage: p = 5*x*y + 3*z**2
sage: R._unset_coercions_used()
sage: R.register_action(chbr.GaloisGroupAction(G, R, op=mul))
sage: s = G([2,3,1])
sage: s*p
3*x^2 + 5*y*z
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> from operator import mul
>>> R = ZZ['x, y, z']; (x, y, z,) = R._first_ngens(3)
>>> G = SymmetricGroup(Integer(3))
>>> p = Integer(5)*x*y + Integer(3)*z**Integer(2)
>>> R._unset_coercions_used()
>>> R.register_action(chbr.GaloisGroupAction(G, R, op=mul))
>>> s = G([Integer(2),Integer(3),Integer(1)])
>>> s*p
3*x^2 + 5*y*z
sage.algebras.hecke_algebras.cubic_hecke_base_ring.normalize_names_markov(names, markov_trace_version)[source]

Return a tuple of strings of variable names of length 3 resp. 4 (if markov_trace_version is True) according to the given input names.

INPUT:

  • names – passed to normalize_names()

  • markov_trace_version – boolean; if set to True four names are expected the last of which corresponds to the writhe factor of the Markov trace

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: chbr.normalize_names_markov('a, b, c', False)
('a', 'b', 'c')
sage: chbr.normalize_names_markov(('u', 'v', 'w', 's'), False)
('u', 'v', 'w')
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> chbr.normalize_names_markov('a, b, c', False)
('a', 'b', 'c')
>>> chbr.normalize_names_markov(('u', 'v', 'w', 's'), False)
('u', 'v', 'w')
sage.algebras.hecke_algebras.cubic_hecke_base_ring.register_ring_hom(ring_hom)[source]

Register the given ring homomorphism as conversion map.

EXAMPLES:

sage: from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
sage: BR = chbr.CubicHeckeRingOfDefinition()
sage: BR.create_specialization([E(5), E(7), E(3)])  # indirect doctest
Universal Cyclotomic Field
sage: _.convert_map_from(BR)
Ring morphism:
  From: Multivariate Polynomial Ring in u, v, w
          over Integer Ring localized at (w,)
  To:   Universal Cyclotomic Field
  Defn: u |--> E(5)
        v |--> E(7)
        w |--> E(3)
>>> from sage.all import *
>>> from sage.algebras.hecke_algebras import cubic_hecke_base_ring as chbr
>>> BR = chbr.CubicHeckeRingOfDefinition()
>>> BR.create_specialization([E(Integer(5)), E(Integer(7)), E(Integer(3))])  # indirect doctest
Universal Cyclotomic Field
>>> _.convert_map_from(BR)
Ring morphism:
  From: Multivariate Polynomial Ring in u, v, w
          over Integer Ring localized at (w,)
  To:   Universal Cyclotomic Field
  Defn: u |--> E(5)
        v |--> E(7)
        w |--> E(3)