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 indeterminatesorder
– string (default:'degrevlex'
); the term order; see alsoLaurentPolynomialRing_mpair
ring_of_definition
– (optional) aCubicHeckeRingOfDefinition
to specify the generic cubic Hecke base ring over whichself
may be realized as splitting ring via theas_splitting_algebra
methodthird_unity_root_name
– string (default:'e3'
); for setting the name of the third root if unity ofself
markov_trace_version
– boolean (default:False
); if this is set toTrue
thenself
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 iss
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 aSplittingAlgebra
; that is as an extension ring of the corresponding cubic Hecke algebra base ring (self._ring_of_definition
, as aCubicHeckeRingOfDefinition
) splitting its cubic equation into linear factors, such that the roots are images of the generators ofself
.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 fromself
mapping the cubic equation roots ofself
toim_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 ofself
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 ofself
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 byu, 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 indeterminatesorder
– string (default:'degrevlex'
); the term order; see alsoLaurentPolynomialRing_mpair
ring_of_definition
– (optional) aCubicHeckeRingOfDefinition
to specify the generic cubic Hecke base ring over whichself
may be realized as splitting ring via theas_splitting_algebra
methodmarkov_trace_version
– boolean (default:False
); if this is set toTrue
thenself
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 iss
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 fromself
mapping the cubic equation parameters ofself
toim_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 ofself
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 makesu
andv
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
- specialize_links_gould()[source]¶
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
isTrue
) according to the given input names.INPUT:
names
– passed tonormalize_names()
markov_trace_version
– boolean; if set toTrue
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)