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:

\[s_i^3 = 1\]

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, \cdot , s_{m-1}\}\) are

\[\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\). 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).

This class implements all the groups considered by Coxeter and Assion as finitely presented groups together with the classical realizations given by the authors. It also contains the conversion maps between the two ways of realization. In addition the user 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. The methods for all this functionality are 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')

Construct cubic braid groups as instance of CubicBraidGroup which 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.AssionS and default names='s'.

For more information type CubicBraidGroup?

INPUT:

  • n – integer or None (default). The number of strands. This argument is passed to the corresponding argument of the classcall of CubicBraidGroup.

  • names – string or list/tuple/iterable of strings (default:’s’). This argument is passed to the corresponding argument of the classcall of CubicBraidGroup.

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
sage.groups.cubic_braid.AssionGroupU(n=None, names='u')

Construct cubic braid groups as instance of CubicBraidGroup which 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.AssionU and default names='u'.

For more information type CubicBraidGroup?

INPUT:

  • n – integer or None (default). The number of strands. This argument is passed to the corresponding argument of the classcall of CubicBraidGroup.

  • names – string or list/tuple/iterable of strings (default:’u’). This argument is passed to the corresponding argument of the classcall of CubicBraidGroup.

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
class sage.groups.cubic_braid.CubicBraidElement(parent, x, check=True)

Bases: sage.groups.finitely_presented.FinitelyPresentedGroupElement

This class models elements of cubic factor groups of the braid group. It is the element class of the CubicBraidGroup.

For more information see the documentation of the parent 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
braid()

Return the canonical braid preimage of self as Object of the class Braid.

OUTPUT:

The preimage of self as instance of 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
burau_matrix(root_bur=None, domain=None, characteristic=None, var='t', reduced=False)

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 – base_ring for the Burau matrix (default is Cyclotomic Field of order 3 and degree 2, resp. the domain of \(root_bur\) if given).

  • characteristic - integer giving the characteristic of the domain (default is 0 or the characteristic of \(domain\) if given).

  • var – string used for the indeterminate name in case root_bur must be constructed in a splitting field.

  • reduced – boolean (default: False) or string; 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: 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
[ 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()
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: 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: 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)], reduced='unitary'); BuMa
[0 I]
[I 0]
sage: BuMa.base_ring()
Number Field in I with defining polynomial x^2 + 1 over its base field
class sage.groups.cubic_braid.CubicBraidGroup(names, cbg_type=None)

Bases: sage.groups.finitely_presented.FinitelyPresentedGroup

This class implements factor groups of the Artin braid group mapping their generators to elements of order 3 (see the module header for more information on these groups).

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 (to the constructor):

  • names – see the corresponding documentation of BraidGroup_class.

  • cbg_type – (optional keyword, default = CubicBraidGroup.type.Coxeter, see explanation below) of enum type CubicBraidGroup.type.

Setting the keyword cbg_type to one on the values CubicBraidGroup.type.AssionS or 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). But anyway, the instances for CubicBraidGroup.type.Coxeter, CubicBraidGroup.type.AssionS and CubicBraidGroup.type.AssionU are different, since they have different classical realizations implemented.

The creation of instances of this class can also be done more easily by help of CubicBraidGroup(), AssionGroupS() and AssionGroupU() (similar to BraidGroup() with respect to BraidGroup_class).

EXAMPLES:

sage: U3 = CubicBraidGroup(3, cbg_type=CubicBraidGroup.type.AssionU); U3
Assion group on 3 strands of type U
sage: 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)

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)
#I  Forcing finiteness test
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]

REFERENCES:

Element

alias of CubicBraidElement

as_classical_group(embedded=False)

Creates an isomorphic image of self as a classical group according to the construction given by Coxeter resp. Assion.

INPUT (optional keyword):

  • embedded – boolean (default = False). This boolean does effect the cases of Assion groups when they are realized as projective groups, only. More precisely: if self is of cbg_type CubicBraidGroup.type.AssionS (for example) and the number of strands n is 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 = True the 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 self and 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 UCF stands for the universal cyclotomic field.

EXAMPLES:

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: 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]
as_matrix_group(root_bur=None, domain=None, characteristic=None, var='t', reduced=False)

Creates an epimorphic image of self as a matrix group by use of the burau representation.

INPUT (all arguments are optional by keyword):

  • root_bur – six (resp. twelfth) root of unity in some field (default root of unity over \(\QQ\)).

  • domain – base_ring for the Burau matrix (default is Cyclotomic Field of order 3 and degree 2, resp. the domain of \(root_bur\) if given).

  • characteristic - integer giving the characteristic of the domain (default is 0 or the characteristic of \(domain\) if given) If none of the keywords \(root_bur\), \(domain\) and \(characteristic\) is given the default characteristic is 3 (resp. 2) if self is of cbg_type CubicBraidGroup.type.AssionS (resp. CubicBraidGroup.type.AssionU).

  • var – string used for the indeterminate name in case \(root_bur\) must be constructed in a splitting field.

  • reduced – boolean (default: False); for more information see the documentation of burau_matrix() of Braid.

OUTPUT:

An instance of the class FinitelyGeneratedMatrixGroup_gap according to the input arguments together with a group homomorphism registered as a conversion from self to it.

EXAMPLES:

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
as_permutation_group(use_classical=True)

This method returns a permutation group isomorphic to self together with group isomorphism from self as a conversion.

INPUT (all arguments are optional by keyword):

  • use_classical – (boolean, default True) by default the permutation group is calculated via the attached classical matrix group, since this results in a smaller degree. If set to False the permutation group will be calculated using self (as finitely presented group).

OUTPUT:

An instance of class PermutationGroup_generic together with a group homomorphism from self registered as a conversion.

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)
#I  Forcing finiteness test
sage: PC3.degree()
8
sage: c = C3([2,1-2])
sage: C3(PC3(c)) == c
True
as_reflection_group()

Creates an isomorphic image of self as irreducible complex reflection group. This is possible only for the finite cubic braid groups of cbg_type CubicBraidGroup.type.Coxeter.

This method uses the sage implementation of reflection group via the gap3 CHEVIE package. To use this method you must have gap3 together with CHEVIE installed!

OUTPUT:

An instance of the class IrreducibleComplexReflectionGroup together with a group isomorphism from self registered as a conversion.

EXAMPLES:

sage: C3.<c1,c2> = CubicBraidGroup(3)           # optional - gap3
sage: R3 = C3.as_reflection_group(); R3         # optional - gap3
Irreducible complex reflection group of rank 2 and type ST4
sage: R3.cartan_matrix()                        # optional - gap3
[-2*E(3) - E(3)^2           E(3)^2]
[        -E(3)^2 -2*E(3) - E(3)^2]
sage: R3.simple_roots()                         # optional - gap3
Finite family {1: (0, -2*E(3) - E(3)^2), 2: (2*E(3)^2, E(3)^2)}
sage: R3.simple_coroots()                       # optional - gap3
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: r = R3.an_element()                       # optional - gap3
sage: cr = C3(r); cr                            # optional - gap3
c1*c2
sage: mr = r.matrix(); mr                       # optional - gap3
[ 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()            # optional - gap3
sage: C3Cl(cr)                                  # optional - gap3
[ 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: C4 = CubicBraidGroup(4)                   # optional - gap3
sage: R4 = C4.as_reflection_group()             # optional - gap3
sage: R4.invariant_form()                       # optional - gap3
[1 0 0]
[0 1 0]
[0 0 1]
sage: _ == C4.classical_invariant_form()        # optional - gap3
False
braid_group()

Return an Instance of BraidGroup with identical generators, such that there exists an epimorphism to self.

OUTPUT:

Instance of BraidGroup having 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
cardinality()

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
centralizing_element(embedded=False)

Return the centralizing element defined by the work of Assion (Hilfssatz 1.1.3 and 1.2.3).

INPUT (optional):

  • embedded – boolean (default = False). This boolean just effects the cases of Assion groups when they are realized as projective groups. More precisely: if self is of cbg_type CubicBraidGroup.type.AssionS (for example) and the number of strands n is 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) reps. n = 0 mod 3 (type U) is returned. Else-wise, the centralizing element is a matrix belonging to Sp(n,3) reps. 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

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]
classical_invariant_form()

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.AssionU the matrix is hermitian. In the case of the Assion groups of cbg_type CubicBraidGroup.type.AssionS it 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
codegrees()

Return the codegrees of self.

This only makes sense when self is a finite reflection group.

EXAMPLES:

sage: CubicBraidGroup(5).codegrees()
(0, 6, 12, 18)
cubic_braid_subgroup(nstrands=None)

Creates a cubic braid group as subgroup of self on the first nstrands strands.

INPUT:

  • nstrands – integer > 0 and < self.strands() giving the number of strands for the subgroup. The default is one strand less than self has.

OUTPUT:

An instance of this class realizing the subgroup.

Note

Since self is 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
degrees()

Return the degrees of self.

This only makes sense when self is a finite reflection group.

EXAMPLES:

sage: CubicBraidGroup(4).degrees()
(6, 9, 12)
index_set()

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 self is a finite reflection group.

EXAMPLES:

sage: CubicBraidGroup(3).index_set()
[0, 1]
is_finite()

Method from GroupMixinLibGAP overwritten because of performance reason.

EXAMPLES:

sage: CubicBraidGroup(6).is_finite()
False
sage: AssionGroupS(6).is_finite()
True
order()

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
simple_reflections()

Return the generators of self.

This is only used when self is a finite reflection group.

EXAMPLES:

sage: CubicBraidGroup(3).simple_reflections()
(c0, c1)
strands()

Return the number of strands of the braid group whose image is self.

OUTPUT: Integer.

EXAMPLES:

sage: C4 = CubicBraidGroup(4)
sage: C4.strands()
4
class type

Bases: enum.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'>