Cubic Braid Groups¶
This module is devoted to factor groups of the Artin braid groups, such that the images \(s_i\) of the braid generators have order three:
In general these groups have firstly been investigated by Coxeter, H.S.M. in: “Factor groups of the braid groups, Proceedings of the Fourth Canadian Mathematical Congress (Vancouver 1957), pp. 95-122”.
Coxeter showed, that these groups are finite as long as the number of strands is less than 6 and infinite else-wise. More explicitly the factor group on three strand braids is isomorphic to \(SL(2,3)\), on four strand braids to \(GU(3,2)\) and on five strand braids to \(Sp(4,3) \times C_3\). Today, these finite groups are known as irreducible complex reflection groups enumerated in the Shephard-Todd classification as \(G_{4}\), \(G_{25}\) and \(G_{32}\).
Coxeter realized these groups as subgroups of unitary groups with respect to a certain Hermitian form over the complex numbers (in fact over \(\QQ\) adjoined with a primitive \(12\)-th root of unity).
In “Einige endliche Faktorgruppen der Zopfgruppen” (Math. Z., 163 (1978), 291-302) J. Assion considered two series \(S(m)\) and \(U(m)\) of finite factors of these groups. The additional relations on the braid group generators \(\{ s_1, \cdots, s_{m-1}\}\) are
where \(t_i = (s_i s_{i+1})^3\). He showed that each series of finite cubic braid group factors must be an epimorphic image of one of his two series, as long as the groups with less than 5 strands are the full cubic braid groups, whereas the group on 5 strands is not. He realized the groups \(S(m)\) as symplectic groups over \(GF(3)\) (resp. subgroups therein) and \(U(m)\) as general unitary groups over \(GF(4)\) (resp. subgroups therein).
All the groups considered by Coxeter and Assion are considered as finitely
presented groups together with the classical realizations. It also allows
for the conversion maps between the two realizations. In addition, we can
construct other realizations and maps to matrix groups with help of the
Burau representation. In case gap3 and CHEVIE are installed, the
reflection groups (via the gap3 interface) are available, too. This can
be done using the methods as_classical_group(), as_matrix_group(),
as_permutation_group(), and as_reflection_group().
REFERENCES:
AUTHORS:
- Sebastian Oehms 2019-02-16, initial version. 
- sage.groups.cubic_braid.AssionGroupS(n=None, names='s')[source]¶
- Construct cubic braid groups - CubicBraidGroupwhich have been investigated by J.Assion using the notation S(m). This function is a short hand cut for setting the construction arguments- cbg_type=CubicBraidGroup.type.AssionSand default- names='s'.- INPUT: - n– integer (optional); the number of strands
- names– (default:- 's') string or list/tuple/iterable of strings
 - See also - EXAMPLES: - sage: S3 = AssionGroupS(3); S3 Assion group on 3 strands of type S sage: S3x = CubicBraidGroup(3, names='s', cbg_type=CubicBraidGroup.type.AssionS); S3x Assion group on 3 strands of type S sage: S3 == S3x True - >>> from sage.all import * >>> S3 = AssionGroupS(Integer(3)); S3 Assion group on 3 strands of type S >>> S3x = CubicBraidGroup(Integer(3), names='s', cbg_type=CubicBraidGroup.type.AssionS); S3x Assion group on 3 strands of type S >>> S3 == S3x True 
- sage.groups.cubic_braid.AssionGroupU(n=None, names='u')[source]¶
- Construct cubic braid groups as instance of - CubicBraidGroupwhich have been investigated by J.Assion using the notation U(m). This function is a short hand cut for setting the construction arguments- cbg_type=CubicBraidGroup.type.AssionUand default- names='u'.- INPUT: - n– integer (optional); the number of strands
- names– (default:- 's') string or list/tuple/iterable of strings
 - See also - EXAMPLES: - sage: U3 = AssionGroupU(3); U3 Assion group on 3 strands of type U sage: U3x = CubicBraidGroup(3, names='u', cbg_type=CubicBraidGroup.type.AssionU); U3x Assion group on 3 strands of type U sage: U3 == U3x True - >>> from sage.all import * >>> U3 = AssionGroupU(Integer(3)); U3 Assion group on 3 strands of type U >>> U3x = CubicBraidGroup(Integer(3), names='u', cbg_type=CubicBraidGroup.type.AssionU); U3x Assion group on 3 strands of type U >>> U3 == U3x True 
- class sage.groups.cubic_braid.CubicBraidElement(parent, x, check=True)[source]¶
- Bases: - FinitelyPresentedGroupElement- Elements of cubic factor groups of the braid group. - For more information see - CubicBraidGroup.- EXAMPLES: - sage: C4.<c1, c2, c3> = CubicBraidGroup(4); C4 Cubic Braid group on 4 strands sage: ele1 = c1*c2*c3^-1*c2^-1 sage: ele2 = C4((1, 2, -3, -2)) sage: ele1 == ele2 True - >>> from sage.all import * >>> C4 = CubicBraidGroup(Integer(4), names=('c1', 'c2', 'c3',)); (c1, c2, c3,) = C4._first_ngens(3); C4 Cubic Braid group on 4 strands >>> ele1 = c1*c2*c3**-Integer(1)*c2**-Integer(1) >>> ele2 = C4((Integer(1), Integer(2), -Integer(3), -Integer(2))) >>> ele1 == ele2 True - braid()[source]¶
- Return the canonical braid preimage of - selfas a- Braid.- EXAMPLES: - sage: C3.<c1, c2> = CubicBraidGroup(3) sage: c1.parent() Cubic Braid group on 3 strands sage: c1.braid().parent() Braid group on 3 strands - >>> from sage.all import * >>> C3 = CubicBraidGroup(Integer(3), names=('c1', 'c2',)); (c1, c2,) = C3._first_ngens(2) >>> c1.parent() Cubic Braid group on 3 strands >>> c1.braid().parent() Braid group on 3 strands 
 - burau_matrix(root_bur=None, domain=None, characteristic=None, var='t', reduced=False)[source]¶
- Return the Burau matrix of the cubic braid coset. - This method uses the same method belonging to - Braid, but reduces the indeterminate to a primitive sixth (resp. twelfth in case- reduced='unitary') root of unity.- INPUT (all arguments are optional keywords): - root_bur– six (resp. twelfth) root of unity in some field (default: root of unity over \(\QQ\))
- domain– (default: cyclotomic field of order 3 and degree 2, resp. the domain of- root_burif given) base ring for the Burau matrix
- characteristic– integer giving the characteristic of the domain (default: 0 or the characteristic of- domainif given)
- var– string used for the indeterminate name in case- root_burmust be constructed in a splitting field
- reduced– boolean or string (default:- False); for more information see the documentation of- burau_matrix()of- Braid
 - OUTPUT: - The Burau matrix of the cubic braid coset with entries in the domain given by the options. In case the option - reduced='unitary'is given a triple consisting of the Burau matrix, its adjoined and the Hermitian form is returned.- EXAMPLES: - sage: C3.<c1, c2> = CubicBraidGroup(3) sage: ele = c1*c2*c1 sage: # needs sage.rings.number_field sage: BuMa = ele.burau_matrix(); BuMa [ -zeta3 1 zeta3] [ -zeta3 zeta3 + 1 0] [ 1 0 0] sage: BuMa.base_ring() Cyclotomic Field of order 3 and degree 2 sage: BuMa == ele.burau_matrix(characteristic=0) True sage: BuMa = ele.burau_matrix(domain=QQ); BuMa [-t + 1 1 t - 1] [-t + 1 t 0] [ 1 0 0] sage: BuMa.base_ring() Number Field in t with defining polynomial t^2 - t + 1 sage: BuMa = ele.burau_matrix(domain = QQ[I, sqrt(3)]); BuMa # needs sage.symbolic [ 1/2*sqrt3*I + 1/2 1 -1/2*sqrt3*I - 1/2] [ 1/2*sqrt3*I + 1/2 -1/2*sqrt3*I + 1/2 0] [ 1 0 0] sage: BuMa.base_ring() # needs sage.symbolic Number Field in I with defining polynomial x^2 + 1 over its base field sage: BuMa = ele.burau_matrix(characteristic=7); BuMa [3 1 4] [3 5 0] [1 0 0] sage: BuMa.base_ring() Finite Field of size 7 sage: # needs sage.rings.finite_rings sage: BuMa = ele.burau_matrix(characteristic=2); BuMa [t + 1 1 t + 1] [t + 1 t 0] [ 1 0 0] sage: BuMa.base_ring() Finite Field in t of size 2^2 sage: F4.<r64> = GF(4) sage: BuMa = ele.burau_matrix(root_bur=r64); BuMa [r64 + 1 1 r64 + 1] [r64 + 1 r64 0] [ 1 0 0] sage: BuMa.base_ring() Finite Field in r64 of size 2^2 sage: BuMa = ele.burau_matrix(domain=GF(5)); BuMa [2*t + 2 1 3*t + 3] [2*t + 2 3*t + 4 0] [ 1 0 0] sage: BuMa.base_ring() Finite Field in t of size 5^2 sage: # needs sage.rings.number_field sage: BuMa, BuMaAd, H = ele.burau_matrix(reduced='unitary'); BuMa [ 0 zeta12^3] [zeta12^3 0] sage: BuMa * H * BuMaAd == H True sage: BuMa.base_ring() Cyclotomic Field of order 12 and degree 4 sage: BuMa, BuMaAd, H = ele.burau_matrix(domain=QQ[I, sqrt(3)], # needs sage.symbolic ....: reduced='unitary'); BuMa [0 I] [I 0] sage: BuMa.base_ring() # needs sage.symbolic Number Field in I with defining polynomial x^2 + 1 over its base field - >>> from sage.all import * >>> C3 = CubicBraidGroup(Integer(3), names=('c1', 'c2',)); (c1, c2,) = C3._first_ngens(2) >>> ele = c1*c2*c1 >>> # needs sage.rings.number_field >>> BuMa = ele.burau_matrix(); BuMa [ -zeta3 1 zeta3] [ -zeta3 zeta3 + 1 0] [ 1 0 0] >>> BuMa.base_ring() Cyclotomic Field of order 3 and degree 2 >>> BuMa == ele.burau_matrix(characteristic=Integer(0)) True >>> BuMa = ele.burau_matrix(domain=QQ); BuMa [-t + 1 1 t - 1] [-t + 1 t 0] [ 1 0 0] >>> BuMa.base_ring() Number Field in t with defining polynomial t^2 - t + 1 >>> BuMa = ele.burau_matrix(domain = QQ[I, sqrt(Integer(3))]); BuMa # needs sage.symbolic [ 1/2*sqrt3*I + 1/2 1 -1/2*sqrt3*I - 1/2] [ 1/2*sqrt3*I + 1/2 -1/2*sqrt3*I + 1/2 0] [ 1 0 0] >>> BuMa.base_ring() # needs sage.symbolic Number Field in I with defining polynomial x^2 + 1 over its base field >>> BuMa = ele.burau_matrix(characteristic=Integer(7)); BuMa [3 1 4] [3 5 0] [1 0 0] >>> BuMa.base_ring() Finite Field of size 7 >>> # needs sage.rings.finite_rings >>> BuMa = ele.burau_matrix(characteristic=Integer(2)); BuMa [t + 1 1 t + 1] [t + 1 t 0] [ 1 0 0] >>> BuMa.base_ring() Finite Field in t of size 2^2 >>> F4 = GF(Integer(4), names=('r64',)); (r64,) = F4._first_ngens(1) >>> BuMa = ele.burau_matrix(root_bur=r64); BuMa [r64 + 1 1 r64 + 1] [r64 + 1 r64 0] [ 1 0 0] >>> BuMa.base_ring() Finite Field in r64 of size 2^2 >>> BuMa = ele.burau_matrix(domain=GF(Integer(5))); BuMa [2*t + 2 1 3*t + 3] [2*t + 2 3*t + 4 0] [ 1 0 0] >>> BuMa.base_ring() Finite Field in t of size 5^2 >>> # needs sage.rings.number_field >>> BuMa, BuMaAd, H = ele.burau_matrix(reduced='unitary'); BuMa [ 0 zeta12^3] [zeta12^3 0] >>> BuMa * H * BuMaAd == H True >>> BuMa.base_ring() Cyclotomic Field of order 12 and degree 4 >>> BuMa, BuMaAd, H = ele.burau_matrix(domain=QQ[I, sqrt(Integer(3))], # needs sage.symbolic ... reduced='unitary'); BuMa [0 I] [I 0] >>> BuMa.base_ring() # needs sage.symbolic Number Field in I with defining polynomial x^2 + 1 over its base field 
 
- class sage.groups.cubic_braid.CubicBraidGroup(names, cbg_type=None)[source]¶
- Bases: - UniqueRepresentation,- FinitelyPresentedGroup- Factor groups of the Artin braid group mapping their generators to elements of order 3. - These groups are implemented as a particular case of finitely presented groups similar to the - BraidGroup_class.- A cubic braid group can be created by giving the number of strands, and the name of the generators in a similar way as it works for the - BraidGroup_class.- INPUT: - names– see the corresponding documentation of- BraidGroup_class
- cbg_type– (default:- CubicBraidGroup.type.Coxeter; see explanation below) enum type- CubicBraidGroup.type
 - Setting the keyword - cbg_typeto one on the values- CubicBraidGroup.type.AssionSor- CubicBraidGroup.type.AssionU, the additional relations due to Assion are added:\[\begin{split}\begin{array}{lll} \mbox{S:} & s_3 s_1 t_2 s_1 t_2^{-1} t_3 t_2 s_1 t_2^{-1} t_3^{-1} = 1 & \mbox{ for } m >= 5 \mbox{ in case } S(m), \\ \mbox{U:} & t_1 t_3 = 1 & \mbox{ for } m >= 5 \mbox{ in case } U(m), \end{array}\end{split}\]- where \(t_i = (s_i s_{i+1})^3\). If - cbg_type == CubicBraidGroup.type.Coxeter(default) only the cubic relation on the generators is active (Coxeter’s case of investigation). Note that for \(n = 2, 3, 4\), the groups do not differ between the three possible values of- cbg_type(as finitely presented groups). However, the- CubicBraidGroup.type.Coxeter,- CubicBraidGroup.type.AssionSand- CubicBraidGroup.type.AssionUare different, so they have different classical realizations implemented.- See also - Instances can also be constructed more easily by using - CubicBraidGroup(),- AssionGroupS()and- AssionGroupU().- EXAMPLES: - sage: U3 = CubicBraidGroup(3, cbg_type=CubicBraidGroup.type.AssionU); U3 Assion group on 3 strands of type U sage: U3.gens() (c0, c1) - >>> from sage.all import * >>> U3 = CubicBraidGroup(Integer(3), cbg_type=CubicBraidGroup.type.AssionU); U3 Assion group on 3 strands of type U >>> U3.gens() (c0, c1) - Alternative possibilities defining - U3:- sage: U3 = AssionGroupU(3); U3 Assion group on 3 strands of type U sage: U3.gens() (u0, u1) sage: U3.<u1,u2> = AssionGroupU(3); U3 Assion group on 3 strands of type U sage: U3.gens() (u1, u2) - >>> from sage.all import * >>> U3 = AssionGroupU(Integer(3)); U3 Assion group on 3 strands of type U >>> U3.gens() (u0, u1) >>> U3 = AssionGroupU(Integer(3), names=('u1', 'u2',)); (u1, u2,) = U3._first_ngens(2); U3 Assion group on 3 strands of type U >>> U3.gens() (u1, u2) - Alternates naming the generators: - sage: U3 = AssionGroupU(3, 'a, b'); U3 Assion group on 3 strands of type U sage: U3.gens() (a, b) sage: C3 = CubicBraidGroup(3, 't'); C3 Cubic Braid group on 3 strands sage: C3.gens() (t0, t1) sage: U3.is_isomorphic(C3) True sage: U3.as_classical_group() Subgroup generated by [(1,7,6)(3,19,14)(4,15,10)(5,11,18)(12,16,20), (1,12,13)(2,15,19)(4,9,14)(5,18,8)(6,21,16)] of (The projective general unitary group of degree 3 over Finite Field of size 2) sage: C3.as_classical_group() Subgroup with 2 generators ( [ E(3)^2 0] [ 1 -E(12)^7] [-E(12)^7 1], [ 0 E(3)^2] ) of General Unitary Group of degree 2 over Universal Cyclotomic Field with respect to positive definite hermitian form [-E(12)^7 + E(12)^11 -1] [ -1 -E(12)^7 + E(12)^11] - >>> from sage.all import * >>> U3 = AssionGroupU(Integer(3), 'a, b'); U3 Assion group on 3 strands of type U >>> U3.gens() (a, b) >>> C3 = CubicBraidGroup(Integer(3), 't'); C3 Cubic Braid group on 3 strands >>> C3.gens() (t0, t1) >>> U3.is_isomorphic(C3) True >>> U3.as_classical_group() Subgroup generated by [(1,7,6)(3,19,14)(4,15,10)(5,11,18)(12,16,20), (1,12,13)(2,15,19)(4,9,14)(5,18,8)(6,21,16)] of (The projective general unitary group of degree 3 over Finite Field of size 2) >>> C3.as_classical_group() Subgroup with 2 generators ( [ E(3)^2 0] [ 1 -E(12)^7] [-E(12)^7 1], [ 0 E(3)^2] ) of General Unitary Group of degree 2 over Universal Cyclotomic Field with respect to positive definite hermitian form [-E(12)^7 + E(12)^11 -1] [ -1 -E(12)^7 + E(12)^11] - REFERENCES: - Element[source]¶
- alias of - CubicBraidElement
 - as_classical_group(embedded=False)[source]¶
- Create an isomorphic image of - selfas a classical group according to the construction given by Coxeter resp. Assion.- INPUT: - embedded– boolean (default:- False); this boolean effects the cases of Assion groups when they are realized as projective groups only. More precisely: if- selfis of- cbg_type CubicBraidGroup.type.AssionS(for example) and the number of strands- nis even, than its classical group is a subgroup of- PSp(n,3)(being centralized by the element- self.centralizing_element(projective=True)). By default this group will be given. Setting- embedded = Truethe classical realization is given as subgroup of its classical enlargement with one more strand (in this case as subgroup of- Sp(n,3)).
 - OUTPUT: - Depending on the type of - selfand the number of strands an instance of- Sp(n-1,3),- GU(n-1,2), subgroup of- PSp(n,3),- PGU(n,2), or a subgroup of- GU(n-1, UCF)(- cbg_type == CubicBraidGroup.type.Coxeter) with respect to a certain Hermitian form attached to the Burau representation (used by Coxeter and Squier). Here- UCFstands for the universal cyclotomic field.- EXAMPLES: - sage: # needs sage.rings.finite_rings sage: U3 = AssionGroupU(3) sage: U3Cl = U3.as_classical_group(); U3Cl Subgroup generated by [(1,7,6)(3,19,14)(4,15,10)(5,11,18)(12,16,20), (1,12,13)(2,15,19)(4,9,14)(5,18,8)(6,21,16)] of (The projective general unitary group of degree 3 over Finite Field of size 2) sage: U3Clemb = U3.as_classical_group(embedded=True); U3Clemb Subgroup with 2 generators ( [0 0 a] [a + 1 a a] [0 1 0] [ a a + 1 a] [a 0 a], [ a a a + 1] ) of General Unitary Group of degree 3 over Finite Field in a of size 2^2 sage: u = U3([-2,1,-2,1]); u (u1^-1*u0)^2 sage: uCl = U3Cl(u); uCl (1,16)(2,9)(3,10)(4,19)(6,12)(7,20)(13,21)(14,15) sage: uCle = U3Clemb(u); uCle [a + 1 a + 1 1] [a + 1 0 a] [ 1 a a] sage: U3(uCl) == u True sage: U3(uCle) == u True sage: U4 = AssionGroupU(4) sage: U4Cl = U4.as_classical_group(); U4Cl General Unitary Group of degree 3 over Finite Field in a of size 2^2 sage: U3Clemb.ambient() == U4Cl True sage: # needs sage.rings.number_field sage: C4 = CubicBraidGroup(4) sage: C4Cl = C4.as_classical_group(); C4Cl Subgroup with 3 generators ( [ E(3)^2 0 0] [ 1 -E(12)^7 0] [-E(12)^7 1 0] [ 0 E(3)^2 0] [ 0 0 1], [ 0 -E(12)^7 1], [ 1 0 0] [ 0 1 -E(12)^7] [ 0 0 E(3)^2] ) of General Unitary Group of degree 3 over Universal Cyclotomic Field with respect to positive definite hermitian form [-E(12)^7 + E(12)^11 -1 0] [ -1 -E(12)^7 + E(12)^11 -1] [ 0 -1 -E(12)^7 + E(12)^11] - >>> from sage.all import * >>> # needs sage.rings.finite_rings >>> U3 = AssionGroupU(Integer(3)) >>> U3Cl = U3.as_classical_group(); U3Cl Subgroup generated by [(1,7,6)(3,19,14)(4,15,10)(5,11,18)(12,16,20), (1,12,13)(2,15,19)(4,9,14)(5,18,8)(6,21,16)] of (The projective general unitary group of degree 3 over Finite Field of size 2) >>> U3Clemb = U3.as_classical_group(embedded=True); U3Clemb Subgroup with 2 generators ( [0 0 a] [a + 1 a a] [0 1 0] [ a a + 1 a] [a 0 a], [ a a a + 1] ) of General Unitary Group of degree 3 over Finite Field in a of size 2^2 >>> u = U3([-Integer(2),Integer(1),-Integer(2),Integer(1)]); u (u1^-1*u0)^2 >>> uCl = U3Cl(u); uCl (1,16)(2,9)(3,10)(4,19)(6,12)(7,20)(13,21)(14,15) >>> uCle = U3Clemb(u); uCle [a + 1 a + 1 1] [a + 1 0 a] [ 1 a a] >>> U3(uCl) == u True >>> U3(uCle) == u True >>> U4 = AssionGroupU(Integer(4)) >>> U4Cl = U4.as_classical_group(); U4Cl General Unitary Group of degree 3 over Finite Field in a of size 2^2 >>> U3Clemb.ambient() == U4Cl True >>> # needs sage.rings.number_field >>> C4 = CubicBraidGroup(Integer(4)) >>> C4Cl = C4.as_classical_group(); C4Cl Subgroup with 3 generators ( [ E(3)^2 0 0] [ 1 -E(12)^7 0] [-E(12)^7 1 0] [ 0 E(3)^2 0] [ 0 0 1], [ 0 -E(12)^7 1], <BLANKLINE> [ 1 0 0] [ 0 1 -E(12)^7] [ 0 0 E(3)^2] ) of General Unitary Group of degree 3 over Universal Cyclotomic Field with respect to positive definite hermitian form [-E(12)^7 + E(12)^11 -1 0] [ -1 -E(12)^7 + E(12)^11 -1] [ 0 -1 -E(12)^7 + E(12)^11] 
 - as_matrix_group(root_bur=None, domain=None, characteristic=None, var='t', reduced=False)[source]¶
- Create an epimorphic image of - selfas a matrix group by use of the burau representation.- INPUT: - root_bur– (default: root of unity over \(\QQ\)) six (resp. twelfth) root of unity in some field
- domain– (default: cyclotomic field of order 3 and degree 2, resp. the domain of- root_burif given) base ring for the Burau matrix
- characteristic– integer (optional); the characteristic of the domain; if none of the keywords- root_bur,- domainand- characteristicare given, the default characteristic is 3 (resp. 2) if- selfis of- cbg_type- CubicBraidGroup.type.AssionS(resp.- CubicBraidGroup.type.AssionU)
- var– string used for the indeterminate name in case- root_burmust be constructed in a splitting field
- reduced– boolean (default:- False); for more information see the documentation of- Braid.burau_matrix()
 - EXAMPLES: - sage: # needs sage.rings.finite_rings sage: C5 = CubicBraidGroup(5) sage: C5Mch5 = C5.as_matrix_group(characteristic=5); C5Mch5 Matrix group over Finite Field in t of size 5^2 with 4 generators ( [2*t + 2 3*t + 4 0 0 0] [ 1 0 0 0 0] [ 0 0 1 0 0] [ 0 0 0 1 0] [ 0 0 0 0 1], [ 1 0 0 0 0] [ 0 2*t + 2 3*t + 4 0 0] [ 0 1 0 0 0] [ 0 0 0 1 0] [ 0 0 0 0 1], [ 1 0 0 0 0] [ 0 1 0 0 0] [ 0 0 2*t + 2 3*t + 4 0] [ 0 0 1 0 0] [ 0 0 0 0 1], [ 1 0 0 0 0] [ 0 1 0 0 0] [ 0 0 1 0 0] [ 0 0 0 2*t + 2 3*t + 4] [ 0 0 0 1 0] ) sage: c = C5([3,4,-2,-3,1]); c c2*c3*c1^-1*c2^-1*c0 sage: m = C5Mch5(c); m [2*t + 2 3*t + 4 0 0 0] [ 0 0 0 1 0] [2*t + 1 0 2*t + 2 3*t 3*t + 3] [2*t + 2 0 0 3*t + 4 0] [ 0 0 2*t + 2 3*t + 4 0] sage: m_back = C5(m) sage: m_back == c True sage: U5 = AssionGroupU(5); U5 Assion group on 5 strands of type U sage: U5Mch3 = U5.as_matrix_group(characteristic=3) Traceback (most recent call last): ... ValueError: Burau representation does not factor through the relations - >>> from sage.all import * >>> # needs sage.rings.finite_rings >>> C5 = CubicBraidGroup(Integer(5)) >>> C5Mch5 = C5.as_matrix_group(characteristic=Integer(5)); C5Mch5 Matrix group over Finite Field in t of size 5^2 with 4 generators ( [2*t + 2 3*t + 4 0 0 0] [ 1 0 0 0 0] [ 0 0 1 0 0] [ 0 0 0 1 0] [ 0 0 0 0 1], <BLANKLINE> [ 1 0 0 0 0] [ 0 2*t + 2 3*t + 4 0 0] [ 0 1 0 0 0] [ 0 0 0 1 0] [ 0 0 0 0 1], <BLANKLINE> [ 1 0 0 0 0] [ 0 1 0 0 0] [ 0 0 2*t + 2 3*t + 4 0] [ 0 0 1 0 0] [ 0 0 0 0 1], <BLANKLINE> [ 1 0 0 0 0] [ 0 1 0 0 0] [ 0 0 1 0 0] [ 0 0 0 2*t + 2 3*t + 4] [ 0 0 0 1 0] ) >>> c = C5([Integer(3),Integer(4),-Integer(2),-Integer(3),Integer(1)]); c c2*c3*c1^-1*c2^-1*c0 >>> m = C5Mch5(c); m [2*t + 2 3*t + 4 0 0 0] [ 0 0 0 1 0] [2*t + 1 0 2*t + 2 3*t 3*t + 3] [2*t + 2 0 0 3*t + 4 0] [ 0 0 2*t + 2 3*t + 4 0] >>> m_back = C5(m) >>> m_back == c True >>> U5 = AssionGroupU(Integer(5)); U5 Assion group on 5 strands of type U >>> U5Mch3 = U5.as_matrix_group(characteristic=Integer(3)) Traceback (most recent call last): ... ValueError: Burau representation does not factor through the relations 
 - as_permutation_group(use_classical=True)[source]¶
- Return a permutation group isomorphic to - selfthat has a group isomorphism from- selfas a conversion.- INPUT: - use_classical– boolean (default:- True); the permutation group is calculated via the attached classical matrix group as this results in a smaller degree; if- False, the permutation group will be calculated using- self(as finitely presented group)
 - EXAMPLES: - sage: C3 = CubicBraidGroup(3) sage: PC3 = C3.as_permutation_group() sage: assert C3.is_isomorphic(PC3) # random (with respect to the occurrence of the info message) sage: PC3.degree() 8 sage: c = C3([2,1-2]) sage: C3(PC3(c)) == c True - >>> from sage.all import * >>> C3 = CubicBraidGroup(Integer(3)) >>> PC3 = C3.as_permutation_group() >>> assert C3.is_isomorphic(PC3) # random (with respect to the occurrence of the info message) >>> PC3.degree() 8 >>> c = C3([Integer(2),Integer(1)-Integer(2)]) >>> C3(PC3(c)) == c True 
 - as_reflection_group()[source]¶
- Return an isomorphic image of - selfas irreducible complex reflection group.- This is possible only for the finite cubic braid groups of - cbg_type- CubicBraidGroup.type.Coxeter.- Note - This method uses the sage implementation of reflection group via the - gap3- CHEVIEpackage. These must be installed in order to use this method.- EXAMPLES: - sage: # optional - gap3 sage: C3.<c1,c2> = CubicBraidGroup(3) sage: R3 = C3.as_reflection_group(); R3 Irreducible complex reflection group of rank 2 and type ST4 sage: R3.cartan_matrix() [-2*E(3) - E(3)^2 E(3)^2] [ -E(3)^2 -2*E(3) - E(3)^2] sage: R3.simple_roots() Finite family {1: (0, -2*E(3) - E(3)^2), 2: (2*E(3)^2, E(3)^2)} sage: R3.simple_coroots() Finite family {1: (0, 1), 2: (1/3*E(3) - 1/3*E(3)^2, 1/3*E(3) - 1/3*E(3)^2)} - >>> from sage.all import * >>> # optional - gap3 >>> C3 = CubicBraidGroup(Integer(3), names=('c1', 'c2',)); (c1, c2,) = C3._first_ngens(2) >>> R3 = C3.as_reflection_group(); R3 Irreducible complex reflection group of rank 2 and type ST4 >>> R3.cartan_matrix() [-2*E(3) - E(3)^2 E(3)^2] [ -E(3)^2 -2*E(3) - E(3)^2] >>> R3.simple_roots() Finite family {1: (0, -2*E(3) - E(3)^2), 2: (2*E(3)^2, E(3)^2)} >>> R3.simple_coroots() Finite family {1: (0, 1), 2: (1/3*E(3) - 1/3*E(3)^2, 1/3*E(3) - 1/3*E(3)^2)} - Conversion maps: - sage: # optional - gap3 sage: r = R3.an_element() sage: cr = C3(r); cr c1*c2 sage: mr = r.matrix(); mr [ 1/3*E(3) - 1/3*E(3)^2 2/3*E(3) + 1/3*E(3)^2] [-2/3*E(3) + 2/3*E(3)^2 2/3*E(3) + 1/3*E(3)^2] sage: C3Cl = C3.as_classical_group() sage: C3Cl(cr) [ E(3)^2 -E(4)] [-E(12)^7 0] - >>> from sage.all import * >>> # optional - gap3 >>> r = R3.an_element() >>> cr = C3(r); cr c1*c2 >>> mr = r.matrix(); mr [ 1/3*E(3) - 1/3*E(3)^2 2/3*E(3) + 1/3*E(3)^2] [-2/3*E(3) + 2/3*E(3)^2 2/3*E(3) + 1/3*E(3)^2] >>> C3Cl = C3.as_classical_group() >>> C3Cl(cr) [ E(3)^2 -E(4)] [-E(12)^7 0] - The reflection groups can also be viewed as subgroups of unitary groups over the universal cyclotomic field. Note that the unitary group corresponding to the reflection group is isomorphic but different from the classical group due to different hermitian forms for the unitary groups they live in: - sage: # optional - gap3 sage: C4 = CubicBraidGroup(4) sage: R4 = C4.as_reflection_group() sage: R4.invariant_form() [1 0 0] [0 1 0] [0 0 1] sage: _ == C4.classical_invariant_form() False - >>> from sage.all import * >>> # optional - gap3 >>> C4 = CubicBraidGroup(Integer(4)) >>> R4 = C4.as_reflection_group() >>> R4.invariant_form() [1 0 0] [0 1 0] [0 0 1] >>> _ == C4.classical_invariant_form() False 
 - braid_group()[source]¶
- Return a - BraidGroupwith identical generators, such that there exists an epimorphism to- self.- OUTPUT: a - BraidGrouphaving conversion maps to and from- self(which is just a section in the latter case)- EXAMPLES: - sage: U5 = AssionGroupU(5); U5 Assion group on 5 strands of type U sage: B5 = U5.braid_group(); B5 Braid group on 5 strands sage: b = B5([4,3,2,-4,1]) sage: u = U5([4,3,2,-4,1]) sage: u == b False sage: b.burau_matrix() [ 1 - t t 0 0 0] [ 1 - t 0 t 0 0] [ 1 - t 0 0 0 t] [ 1 - t 0 0 1 -1 + t] [ 1 0 0 0 0] sage: u.burau_matrix() [t + 1 t 0 0 0] [t + 1 0 t 0 0] [t + 1 0 0 0 t] [t + 1 0 0 1 t + 1] [ 1 0 0 0 0] sage: bU = U5(b) sage: uB = B5(u) sage: bU == u True sage: uB == b True - >>> from sage.all import * >>> U5 = AssionGroupU(Integer(5)); U5 Assion group on 5 strands of type U >>> B5 = U5.braid_group(); B5 Braid group on 5 strands >>> b = B5([Integer(4),Integer(3),Integer(2),-Integer(4),Integer(1)]) >>> u = U5([Integer(4),Integer(3),Integer(2),-Integer(4),Integer(1)]) >>> u == b False >>> b.burau_matrix() [ 1 - t t 0 0 0] [ 1 - t 0 t 0 0] [ 1 - t 0 0 0 t] [ 1 - t 0 0 1 -1 + t] [ 1 0 0 0 0] >>> u.burau_matrix() [t + 1 t 0 0 0] [t + 1 0 t 0 0] [t + 1 0 0 0 t] [t + 1 0 0 1 t + 1] [ 1 0 0 0 0] >>> bU = U5(b) >>> uB = B5(u) >>> bU == u True >>> uB == b True 
 - cardinality()[source]¶
- To avoid long wait-time on calculations the order will be obtained using the classical realization. - OUTPUT: cardinality of the group as integer or infinity - EXAMPLES: - sage: S15 = AssionGroupS(15) sage: S15.order() 109777561863482259035023554842176139436811616256000 sage: C6 = CubicBraidGroup(6) sage: C6.order() +Infinity - >>> from sage.all import * >>> S15 = AssionGroupS(Integer(15)) >>> S15.order() 109777561863482259035023554842176139436811616256000 >>> C6 = CubicBraidGroup(Integer(6)) >>> C6.order() +Infinity 
 - centralizing_element(embedded=False)[source]¶
- Return the centralizing element defined by the work of Assion (Hilfssatz 1.1.3 and 1.2.3). - INPUT: - embedded– boolean (default;- False); this boolean only effects the cases of Assion groups when they are realized as projective groups. More precisely: if- selfis of- cbg_type CubicBraidGroup.type.AssionS(for example) and the number of strands- nis even, than its classical group is a subgroup of- PSp(n,3)being centralized by the element return for option- embedded=False. Otherwise the image of this element inside the embedded classical group will be returned (see option embedded of- classical_group()).
 - OUTPUT: - Depending on the optional keyword a permutation as an element of - PSp(n,3)(type S) or- PGU(n,2)(type U) for- n = 0 mod 2(type S) resp.- n = 0 mod 3(type U) is returned. Otherwise, the centralizing element is a matrix belonging to- Sp(n,3)resp.- GU(n,2).- EXAMPLES: - sage: U3 = AssionGroupU(3); U3 Assion group on 3 strands of type U sage: U3Cl = U3.as_classical_group(); U3Cl Subgroup generated by [(1,7,6)(3,19,14)(4,15,10)(5,11,18)(12,16,20), (1,12,13)(2,15,19)(4,9,14)(5,18,8)(6,21,16)] of (The projective general unitary group of degree 3 over Finite Field of size 2) sage: c = U3.centralizing_element(); c (1,16)(2,9)(3,10)(4,19)(6,12)(7,20)(13,21)(14,15) sage: c in U3Cl True sage: P = U3Cl.ambient_group() sage: P.centralizer(c) == U3Cl True - >>> from sage.all import * >>> U3 = AssionGroupU(Integer(3)); U3 Assion group on 3 strands of type U >>> U3Cl = U3.as_classical_group(); U3Cl Subgroup generated by [(1,7,6)(3,19,14)(4,15,10)(5,11,18)(12,16,20), (1,12,13)(2,15,19)(4,9,14)(5,18,8)(6,21,16)] of (The projective general unitary group of degree 3 over Finite Field of size 2) >>> c = U3.centralizing_element(); c (1,16)(2,9)(3,10)(4,19)(6,12)(7,20)(13,21)(14,15) >>> c in U3Cl True >>> P = U3Cl.ambient_group() >>> P.centralizer(c) == U3Cl True - Embedded version: - sage: cm = U3.centralizing_element(embedded=True); cm [a + 1 a + 1 1] [a + 1 0 a] [ 1 a a] sage: U4 = AssionGroupU(4) sage: U4Cl = U4.as_classical_group() sage: cm in U4Cl True sage: [cm * U4Cl(g) == U4Cl(g) * cm for g in U4.gens()] [True, True, False] - >>> from sage.all import * >>> cm = U3.centralizing_element(embedded=True); cm [a + 1 a + 1 1] [a + 1 0 a] [ 1 a a] >>> U4 = AssionGroupU(Integer(4)) >>> U4Cl = U4.as_classical_group() >>> cm in U4Cl True >>> [cm * U4Cl(g) == U4Cl(g) * cm for g in U4.gens()] [True, True, False] 
 - classical_invariant_form()[source]¶
- Return the invariant form of the classical realization of - self.- OUTPUT: - A square matrix of dimension according to the space the classical realization is operating on. In the case of the full cubic braid groups and of the Assion groups of - cbg_type CubicBraidGroup.type.AssionUthe matrix is Hermitian. In the case of the Assion groups of- cbg_type CubicBraidGroup.type.AssionSit is alternating. Note that the invariant form of the full cubic braid group on more than 5 strands is degenerated (causing the group to be infinite).- In the case of Assion groups having projective classical groups, the invariant form corresponds to the ambient group of its classical embedding. - EXAMPLES: - sage: S3 = AssionGroupS(3) sage: S3.classical_invariant_form() [0 1] [2 0] sage: S4 = AssionGroupS(4) sage: S4.classical_invariant_form() [0 0 0 1] [0 0 1 0] [0 2 0 0] [2 0 0 0] sage: S5 = AssionGroupS(5) sage: S4.classical_invariant_form() == S5.classical_invariant_form() True sage: U4 = AssionGroupU(4) sage: U4.classical_invariant_form() [0 0 1] [0 1 0] [1 0 0] sage: C5 = CubicBraidGroup(5) sage: C5.classical_invariant_form() [-E(12)^7 + E(12)^11 -1 0 0] [ -1 -E(12)^7 + E(12)^11 -1 0] [ 0 -1 -E(12)^7 + E(12)^11 -1] [ 0 0 -1 -E(12)^7 + E(12)^11] sage: _.is_singular() False sage: C6 = CubicBraidGroup(6) sage: C6.classical_invariant_form().is_singular() True - >>> from sage.all import * >>> S3 = AssionGroupS(Integer(3)) >>> S3.classical_invariant_form() [0 1] [2 0] >>> S4 = AssionGroupS(Integer(4)) >>> S4.classical_invariant_form() [0 0 0 1] [0 0 1 0] [0 2 0 0] [2 0 0 0] >>> S5 = AssionGroupS(Integer(5)) >>> S4.classical_invariant_form() == S5.classical_invariant_form() True >>> U4 = AssionGroupU(Integer(4)) >>> U4.classical_invariant_form() [0 0 1] [0 1 0] [1 0 0] >>> C5 = CubicBraidGroup(Integer(5)) >>> C5.classical_invariant_form() [-E(12)^7 + E(12)^11 -1 0 0] [ -1 -E(12)^7 + E(12)^11 -1 0] [ 0 -1 -E(12)^7 + E(12)^11 -1] [ 0 0 -1 -E(12)^7 + E(12)^11] >>> _.is_singular() False >>> C6 = CubicBraidGroup(Integer(6)) >>> C6.classical_invariant_form().is_singular() True 
 - codegrees()[source]¶
- Return the codegrees of - self.- This only makes sense when - selfis a finite reflection group.- EXAMPLES: - sage: CubicBraidGroup(5).codegrees() (0, 6, 12, 18) - >>> from sage.all import * >>> CubicBraidGroup(Integer(5)).codegrees() (0, 6, 12, 18) 
 - cubic_braid_subgroup(nstrands=None)[source]¶
- Return a cubic braid group as subgroup of - selfon the first- nstrandsstrands.- INPUT: - nstrands– (default:- self.strands() - 1) integer at least 1 and at most- self.strands()giving the number of strands of the subgroup
 - Warning - Since - selfis inherited from- UniqueRepresentation, the obtained instance is identical to other instances created with the same arguments (see example below). The ambient group corresponds to the last call of this method.- EXAMPLES: - sage: U5 = AssionGroupU(5) sage: U3s = U5.cubic_braid_subgroup(3) sage: u1, u2 = U3s.gens() sage: u1 in U5 False sage: U5(u1) in U5.gens() True sage: U3s is AssionGroupU(3) True sage: U3s.ambient() == U5 True - >>> from sage.all import * >>> U5 = AssionGroupU(Integer(5)) >>> U3s = U5.cubic_braid_subgroup(Integer(3)) >>> u1, u2 = U3s.gens() >>> u1 in U5 False >>> U5(u1) in U5.gens() True >>> U3s is AssionGroupU(Integer(3)) True >>> U3s.ambient() == U5 True 
 - degrees()[source]¶
- Return the degrees of - self.- This only makes sense when - selfis a finite reflection group.- EXAMPLES: - sage: CubicBraidGroup(4).degrees() (6, 9, 12) - >>> from sage.all import * >>> CubicBraidGroup(Integer(4)).degrees() (6, 9, 12) 
 - index_set()[source]¶
- Return the index set of - self.- This is the set of integers \(0,\dots,n-2\) where \(n\) is the number of strands. - This is only used when - selfis a finite reflection group.- EXAMPLES: - sage: CubicBraidGroup(3).index_set() [0, 1] - >>> from sage.all import * >>> CubicBraidGroup(Integer(3)).index_set() [0, 1] 
 - is_finite()[source]¶
- Return if - selfis a finite group or not.- EXAMPLES: - sage: CubicBraidGroup(6).is_finite() False sage: AssionGroupS(6).is_finite() True - >>> from sage.all import * >>> CubicBraidGroup(Integer(6)).is_finite() False >>> AssionGroupS(Integer(6)).is_finite() True 
 - order()[source]¶
- To avoid long wait-time on calculations the order will be obtained using the classical realization. - OUTPUT: cardinality of the group as integer or infinity - EXAMPLES: - sage: S15 = AssionGroupS(15) sage: S15.order() 109777561863482259035023554842176139436811616256000 sage: C6 = CubicBraidGroup(6) sage: C6.order() +Infinity - >>> from sage.all import * >>> S15 = AssionGroupS(Integer(15)) >>> S15.order() 109777561863482259035023554842176139436811616256000 >>> C6 = CubicBraidGroup(Integer(6)) >>> C6.order() +Infinity 
 - simple_reflections()[source]¶
- Return the generators of - self.- This is only used when - selfis a finite reflection group.- EXAMPLES: - sage: CubicBraidGroup(3).simple_reflections() (c0, c1) - >>> from sage.all import * >>> CubicBraidGroup(Integer(3)).simple_reflections() (c0, c1) 
 - strands()[source]¶
- Return the number of strands of the braid group whose image is - self.- OUTPUT: - Integer- EXAMPLES: - sage: C4 = CubicBraidGroup(4) sage: C4.strands() 4 - >>> from sage.all import * >>> C4 = CubicBraidGroup(Integer(4)) >>> C4.strands() 4 
 - class type(*values)[source]¶
- Bases: - Enum- Enum class to select the type of the group: - Coxeter–- 'C'the full cubic braid group
- AssionS–- 'S'finite factor group of type S considered by Assion
- AssionU–- 'U'finite factor group of type U considered by Assion
 - EXAMPLES: - sage: S2 = CubicBraidGroup(2, cbg_type=CubicBraidGroup.type.AssionS); S2 Assion group on 2 strands of type S sage: U3 = CubicBraidGroup(2, cbg_type='U') Traceback (most recent call last): ... TypeError: the cbg_type must be an instance of <enum 'CubicBraidGroup.type'> - >>> from sage.all import * >>> S2 = CubicBraidGroup(Integer(2), cbg_type=CubicBraidGroup.type.AssionS); S2 Assion group on 2 strands of type S >>> U3 = CubicBraidGroup(Integer(2), cbg_type='U') Traceback (most recent call last): ... TypeError: the cbg_type must be an instance of <enum 'CubicBraidGroup.type'>