\documentclass[
paper=A4,
pagesize,
fontsize=11pt,
titlepage=false,
fleqn,
toc=flat,
bibliography=totoc,
index=totoc,
listof=flat]{scrartcl}
\usepackage{scrhack}
\setuptoc{toc}{leveldown}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xltxtra}
\usepackage[
left=3cm,
right=2cm,
top=2cm,
bottom=2cm,
includeheadfoot]{geometry}
\usepackage[automark,headsepline,ilines,komastyle]{scrpage2}
\pagestyle{scrheadings}
\usepackage{fixltx2e}
\raggedbottom
\usepackage{ellipsis,ragged2e,marginnote}
\usepackage{inconsolata}
\renewcommand{\familydefault}{\sfdefault}
\setkomafont{sectioning}{\normalcolor\bfseries}
\setkomafont{disposition}{\normalcolor\bfseries}
\usepackage{mathtools}
\mathtoolsset{showonlyrefs=true}
\usepackage{amssymb}
\usepackage{sfmath}
\usepackage[USenglish]{babel}
\usepackage{etoolbox}
\usepackage{url}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage[Export]{adjustbox}
\adjustboxset{max size={\textwidth}{0.7\textheight}}
\usepackage{textcomp}
\def\leftqquote{``}\def\rightqqoute{''}
\catcode`\"=13
\def"{\bgroup\def"{\rightqqoute\egroup}\leftqquote}
\makeatletter
\preto{\@verbatim}{\topsep=0pt \partopsep=0pt }
\makeatother
\usepackage{color}
\definecolor{midgray}{rgb}{0.5,0.5,0.5}
\definecolor{lightyellow}{rgb}{1,1,.92}
\definecolor{dblackcolor}{rgb}{0.0,0.0,0.0}
\definecolor{dbluecolor}{rgb}{.01,.02,0.7}
\definecolor{dredcolor}{rgb}{1,0,0}
\definecolor{dbrowncolor}{rgb}{0.625,0.3125,0}
\definecolor{dgraycolor}{rgb}{0.30,0.3,0.30}
\definecolor{graycolor}{rgb}{0.35,0.35,0.35}
\usepackage{listings}
\lstdefinelanguage{Sage}[]{Python}
{morekeywords={True,False,sage,singular},
sensitive=true}
\lstset{
showtabs=False,
showspaces=False,
showstringspaces=False,
commentstyle={\ttfamily\color{dbrowncolor}},
keywordstyle={\ttfamily\color{dbluecolor}\bfseries},
stringstyle ={\ttfamily\color{dgraycolor}\bfseries},
numberstyle ={\tiny\color{midgray}},
backgroundcolor=\color{lightyellow},
language = Sage,
basicstyle={\ttfamily},
extendedchars=true,
keepspaces=true,
aboveskip=1em,
belowskip=0.1em,
breaklines=true,
prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\backslash}},
}
\newcommand{\Bold}[1]{\mathbb{#1}}
\newcommand{\ZZ}{\Bold{Z}}
\newcommand{\NN}{\Bold{N}}
\newcommand{\RR}{\Bold{R}}
\newcommand{\CC}{\Bold{C}}
\newcommand{\FF}{\Bold{F}}
\newcommand{\QQ}{\Bold{Q}}
\newcommand{\QQbar}{\overline{\QQ}}
\newcommand{\CDF}{\Bold{C}}
\newcommand{\CIF}{\Bold{C}}
\newcommand{\CLF}{\Bold{C}}
\newcommand{\RDF}{\Bold{R}}
\newcommand{\RIF}{\Bold{I} \Bold{R}}
\newcommand{\RLF}{\Bold{R}}
\newcommand{\CFF}{\Bold{CFF}}
\newcommand{\GF}[1]{\Bold{F}_{#1}}
\newcommand{\Zp}[1]{\ZZ_{#1}}
\newcommand{\Qp}[1]{\QQ_{#1}}
\newcommand{\Zmod}[1]{\ZZ/#1\ZZ}
\newcommand{\lt}{<}
\newcommand{\gt}{>}
\newcommand{\lequal}{≤}
\newcommand{\gequal}{≥}
\newcommand{\notequal}{≠}
\lstset{literate=
{á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
{Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
{à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
{À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
{ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
{Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
{â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
{Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
{œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
{ã}{{\~a}}1 {Ã}{{\~A}}1 {õ}{{\~o}}1 {Õ}{{\~O}}1
{ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
{€}{{\EUR}}1 {£}{{\pounds}}1
}
\title{Introduction to the CubicBraidGroup class}
\author{Sebastian Oehms}
\date{18.3.2017}
\begin{document}
\maketitle
\tableofcontents
\begin{lstlisting}
\end{lstlisting}\section{Using the CubicBraidGroup class}
\subsection{Introduction}
{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 Candian Mathematical Congress (Vancover 1957), pp. 95-122''.}
{Coxeter showed, that these groups are finite as long as the number of strands is less than 6 and infinite elsewise. More explicitely 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$. 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 dimensional factors of these groups. The additional relations on the braid group generators $\{ s_1, \cdots , s_{m-1}\}$ are}
{$$ \begin{array}{rllll}
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 of} & S(m) \\
t_1 t_3 = 1 & \mbox{ for } & m >= 5 & \mbox{ in case of } & U(m)
\end{array} $$}
{where $t_i = (s_i s_{i+1})^3$. He showed that each series of finite cubic braid group factors must be an epimorhic 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 conidered by Coxeter and Assion as finitely presented groups (via the gap interface) together with the classical realizations given by the authors. It also contains the coercion 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 under sage version 7.2 (or later) the reflection groups via the gap3
interface are availlable, too. The methods for all this functionality are:}
\begin{itemize}
\item{as\_classical\_group}
\item{as\_matrix\_group}
\item{as\_reflection\_group (needs sage version 7.2 up and gap3 + CHEVIE)}
\item{as\_permutation\_group}
\end{itemize}
{Further methods are:}
\begin{itemize}
\item{order }
\item{pre\_image\_braid\_group}
\item{cubic\_braid\_subgroup}
\item{character\_table}
\end{itemize}
{AUTHOR}
{Sebastian Oehms, Sept. 2016}
\begin{lstlisting}
\end{lstlisting}\subsection{Getting started}
{The CubicBraidGroup class is not integrated into the sage library, right now. If you are using sage on your own computer you may install the CubicBraidGoup class following the README.txt file
To use the CubicBraidGroup on this plattform you can create a jupyter notebook or a sage worksheet (like this) and start with a cell containing the first line of this:}
\begin{lstlisting}
from cubic_braid import *
\end{lstlisting}
\begin{lstlisting}
\end{lstlisting}
{To execute the command you must click on the ``play'' symbol (\gt |) above (instead of carriage return key in a shell sessiion)}
{On your own computer in a command-line sage-session you must start with this line, as well. For further information on how to get started see the README.txt-File.}
{The general documentation concerning the CubicBraidGroup class can be shown using the following command.}
\begin{lstlisting}
print CubicBraidGroup_class.__doc__
\end{lstlisting}\begin{verbatim}
Class to handel cubic factors of braid group on n strands
If you don't see this well formated type
sage: print CubicBraidGroup_class.__doc__
This class implements quotient groups of the braid group mapping their generators to
elements of order 3
(see the module header for more informations 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 BraidGroup_class docomentation)
- "AdditionalRelation": (keyword, explantaion see below)
- "verbose": (keyword, explantaion see below)
RAISE (on init):
- ValueError: "the number of strands must be an integer larger than one"
Setting the keyword 'AdditionalRelation' to one on the values 'S' or 'U' the
additional relations due to
Assion are added:
'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$ for $m >= 5$
'U': $t_1 t_3 = 1$ for $m >= 5$
where $t_i = (s_i s_{i+1})^3$. If AdditionalRelation='C' (default) only the cubic
relation on the generators is
active (Coxeters case of investigation). Note that for n=2,3,4 the groups do not
differ between the three possible
values of AdditionalRelation (as finitely presented groups). But anyway, the classes
for 'C', 'S' and 'U' are
different, since they have different classical realizations implemented .
Setting the keyword verbose it is possible to print time stamp messages in order to do
a performance or
call stack debugging. This keyword uses the timeStampControl class. For more
information on this type
print setupTimeStamp.__doc__
print timeStampControl.__doc__
print timeStampControl.print_timestamp.__doc__
print print_time_tb.__doc__
The creation of instances of this class can also be done more easy by help of the
functions CubicBraidGroup,
AssionGroupS and AssionGroupU (similar to the function BraidGroup with respect to the
BraidGroup_class)
EXAMPLES:
sage: from cubic_braid import *
sage: U3 = CubicBraidGroup(3, AdditionalRelation = 'U'); U3
Assion group on 3 strands of type U
sage: U3.gens()
(c0, c1)
alternate 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 )
True
sage: U3.as_classical_group()
Subgroup of (The projective general unitary group of degree 3 over Finite Field of
size 2) 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)]
sage: C3.as_classical_group()
Subgroup of General Unitary Group of degree 2 over Universal Cyclotomic Field with
respect to hermitian form
[-E(12)^7 + E(12)^11 -1]
[ -1 -E(12)^7 + E(12)^11]
generated by (
[ E(3) E(12)^11]
[ 0 1],
[ 1 0]
[E(12)^11 E(3)])
using verbose mode:
sage: C3.<c1,c2> = CubicBraidGroup(3, verbose=True); C3
L: StackInfo Elapse: 0, Total: 0 Ident: C3 In: __init__ Line: 403
L: StackInfo Elapse: 197, Total: 0 Begin In:
__create_classical_realization__ Line: 910
L: StackInfo Elapse: 8, Total: 0 Begin In: as_matrix_group Line: 1031
L: Body Elapse: 92, Total: 0 genList prepared In: as_matrix_group
Line: 1038
L: Body Elapse: 52, Total: 0 MatGroup defined In: as_matrix_group
Line: 1054
L: StackInfo Elapse: 356, Total: 0 Begin In: gap_hom Line: 143
L: Debug Elapse: 8, Total: 0 GroupHomomorphis In: gap_hom Line: 188
L: Debug Elapse: 17, Total: 0 checked if groupMap works In: gap_hom
Line: 199
L: StackInfo Elapse: 8, Total: 0 End In: gap_hom Line: 226
L: StackInfo Elapse: 44, Total: 0 Begin In: __check_homomorphism__ Line:
60
L: StackInfo Elapse: 52, Total: 0 End In: __check_homomorphism__ Line: 625
L: Body Elapse: 3, Total: 0 Hom from self defined In:
as_matrix_group Line: 1064
L: StackInfo Elapse: 62, Total: 0 Begin In: gap_hom Line: 143
L: Debug Elapse: 4, Total: 0 GroupHomomorphis In: gap_hom Line: 188
L: Debug Elapse: 20, Total: 0 checked if groupMap works In: gap_hom
Line: 199
L: StackInfo Elapse: 4, Total: 0 End In: gap_hom Line: 226
L: Body Elapse: 35, Total: 0 Section to self defined In:
as_matrix_group Line: 1077
L: StackInfo Elapse: 3, Total: 0 Ende In: as_matrix_group Line: 1102
L: StackInfo Elapse: 3, Total: 0 End In: __create_classical_realization__
Line: 975
L: StackInfo Elapse: 12, Total: 0 Ident: C3 In: __init__ Line: 472
Cubic Braid group on 3 strands
sage:
sage:
sage: C3.<c1,c2> = CubicBraidGroup(3, verbose=30); C3
L: StackInfo Elapse: 62, Total: 0 (truncated 1) Begin In:
__create_classical_realization__ Line: 910
---> __init__ In: lib/cubic_braid.py Line: 471
---> __classcall__ In: /opt/sage/sage-6.9-i686-Linux/local/lib/python2.7/site-
packages/sage/structure
/unique_representation.py Line: 1021
---> CubicBraidGroup In: lib/cubic_braid.py Line: 1231
L: StackInfo Elapse: 405, Total: 0 Begin In: as_matrix_group Line: 1031
---> __create_classical_realization__ In: lib/cubic_braid.py Line: 968
---> __init__ In: lib/cubic_braid.py Line: 471
---> __classcall__ In: /opt/sage/sage-6.9-i686-Linux/local/lib/python2.7/site-
packages/sage/structure
/unique_representation.py Line: 1021
L: Body Elapse: 145, Total: 0 genList prepared In: as_matrix_group
Line: 1038
---> __create_classical_realization__ In: lib/cubic_braid.py Line: 968
---> __init__ In: lib/cubic_braid.py Line: 471
---> __classcall__ In: /opt/sage/sage-6.9-i686-Linux/local/lib/python2.7/site-
packages/sage/structure
/unique_representation.py Line: 1021
Cubic Braid group on 3 strands
sage:
TESTS:
sage: C4 = CubicBraidGroup(4)
sage: TestSuite(C4).run()
sage: C5 = CubicBraidGroup(5)
sage: TestSuite(C5).run()
sage: C6 = CubicBraidGroup(6)
sage: TestSuite(C6).run()
sage: S3 = AssionGroupS(3)
sage: TestSuite(S3).run()
sage: S4 = AssionGroupS(4)
sage: TestSuite(S5).run()
sage: U3 = AssionGroupU(3)
sage: TestSuite(U3).run()
sage: U4 = AssionGroupU(4)
sage: TestSuite(U4).run()
sage: U5 = AssionGroupU(5)
sage: TestSuite(U5).run()
METHODS (implemented / overwriten here):
- as_classical_group(): type
sage: print CubicBraidGroup_class.as_classical_group.__doc__
- as_matrix_group(): type
sage: print CubicBraidGroup_class.as_matrix_group.__doc__
- as_refection_group(): type
sage: print CubicBraidGroup_class.as_refection_group.__doc__
- as_permutation_group(): type
sage: print CubicBraidGroup_class.as_permutation_group.__doc__
- pre_image_braid_group: type
sage: print CubicBraidGroup_class.pre_image_braid_group.__doc__
- cubic_braid_subgroup(): type
sage: print CubicBraidGroup_class.cubic_braid_subgroup.__doc__
- centralizing_element(): type
sage: print CubicBraidGroup_class.centralizing_element.__doc__
- order(): type
sage: print CubicBraidGroup_class.order.__doc__
- character_table(): type
sage: print CubicBraidGroup_class.character_table.__doc__
AUTHOR
- Sebastian Oehms, Sept. 2016
REFERENCES:
- Coxeter, H.S.M: "Factor groups of the braid groups, Proceedings of the Fourth
Candian Mathematical Congress
(Vancover 1957), pp. 95-122".
- J. Assion: "Einige endliche Faktorgruppen der Zopfgruppen" (Math. Z., 163 (1978),
291-302)
\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}\subsection{First steps}
{To definine the cubic braid group on 3 strand, for example, type:}
\begin{lstlisting}
C3 = CubicBraidGroup( 3 ); C3
\end{lstlisting}\begin{verbatim}Cubic Braid group on 3 strands\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{There are several ways to obtain the braid generators as variables: First using the pre defined names:}
\begin{lstlisting}
C3.inject_variables()
\end{lstlisting}\begin{verbatim}Defining c0, c1\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{Second, if you like to use your own names it is possiblbe to include a generator declaration inside the group declaration in two ways (caution: sage-kernel needed, this does no work for a pure python kernel):}
\begin{lstlisting}
C4.<c1, c2, c3> = CubicBraidGroup(4); print "Element of C4", c1*c2**2*c3
U4 = AssionGroupU(4, 'a, b, c' ); a, b, c = U4.gens(); print "Element of U4", a*b**2*c
\end{lstlisting}\begin{verbatim}Element of C4\end{verbatim}\begin{verbatim} c1*c2^2*c3\end{verbatim}\begin{verbatim}Element of U4\end{verbatim}\begin{verbatim} a*b^2*c\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{But, note:}
\begin{lstlisting}
S4 = AssionGroupS(4); x, y, z = S4.gens(); print "Element of S4", x*y**2*z
\end{lstlisting}\begin{verbatim}Element of S4\end{verbatim}\begin{verbatim} s0*s1^2*s2\end{verbatim}
\begin{lstlisting}
\end{lstlisting}\subsection{Classical realization}
{Now, lets define Coxeter's realization of the 3 strand cubic braid group:}
\begin{lstlisting}
C3Cl = C3.as_classical_group(); C3Cl
\end{lstlisting}\begin{verbatim}Subgroup of General Unitary Group of degree 2 over Universal Cyclotomic Field with respect
to hermitian form:
[-E(12)^7 + E(12)^11 -1]
[ -1 -E(12)^7 + E(12)^11] generated by:
([ E(3) E(12)^11]
[ 0 1], [ 1 0]
[E(12)^11 E(3)])\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{You may apply any method implemented for groups and finitely presented resp. finitely generated matrix groups in sage to C3 resp. C3Cl, for instance to check if they are isomorphic:}
\begin{lstlisting}
C3.is_isomorphic( C3Cl )
\end{lstlisting}\begin{verbatim}True\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{To see which methods are available say:}
\begin{lstlisting}
print 'Attributes of C3:\n', dir(C3), '\n\n'
print 'Attributes of C3Cl:\n', dir(C3Cl), '\n\n'
\end{lstlisting}\begin{verbatim}Attributes of C3:
['CartesianProduct', 'Element', 'Hom', '_AdditionalRelation_', '_TimeStampSub_',
'_TimeStamp_', '__cached_methods', '__call__', '__check_homomorphism__', '__class__',
'__classcall__', '__contains__', '__copy__', '__create_classical_realization__',
'__deepcopy__', '__delattr__', '__dict__', '__dir__', '__div__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__',
'__hash__', '__init__', '__init_extra__', '__iter__', '__le__', '__len__', '__lt__',
'__make_element_class__', '__metaclass__', '__module__', '__mul__', '__ne__', '__new__',
'__nonzero__', '__print_timestamp__', '__pyx_vtable__', '__qualname__', '__rdiv__',
'__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__setstate__',
'__sizeof__', '__str__', '__subclasshook__', '__temporarily_change_names', '__weakref__',
'_abstract_element_class', '_ambient', '_an_element_', '_ascii_art_', '_assign_names',
'_axiom_', '_axiom_init_', '_b_', '_base', '_bi_', '_cache_an_element', '_cache_key',
'_centralizing_element_', '_centralizing_matrix_', '_checked_homomorphism_',
'_classical_base_group_', '_classical_base_group_gens_', '_classical_embedding_',
'_classical_group_', '_classical_group_gens_', '_clear_cache_', '_cmp_',
'_coerce_map_from_', '_coerce_map_via', '_coercions_used', '_convert_map_from_',
'_convert_method_name', '_defining_names', '_doccls', '_element_constructor',
'_element_constructor_', '_element_constructor_from_element_class',
'_element_init_pass_parent', '_factory_data', '_first_ngens', '_free_group',
'_free_group_', '_fricas_', '_fricas_init_', '_gap_', '_gap_gens', '_gap_init_',
'_generic_convert_map', '_get_action_', '_giac_', '_giac_init_', '_gp_', '_gp_init_',
'_ident_', '_included_private_doc_', '_init_category_', '_initial_action_list',
'_initial_coerce_list', '_initial_convert_list', '_interface_', '_interface_init_',
'_interface_is_cached_', '_internal_coerce_map_from', '_internal_convert_map_from',
'_introspect_coerce', '_is_category_initialized', '_is_valid_homomorphism_', '_kash_',
'_kash_init_', '_latex_', '_libgap', '_libgap_', '_macaulay2_', '_macaulay2_init_',
'_magma_init_', '_maple_', '_maple_init_', '_mathematica_', '_mathematica_init_',
'_maxima_', '_maxima_init_', '_maxima_lib_', '_maxima_lib_init_', '_names', '_nstrands_',
'_octave_', '_octave_init_', '_pari_', '_pari_init_', '_populate_coercion_lists_',
'_pre_image_braid_group_', '_r_init_', '_reduction', '_refine_category_', '_relations',
'_repr_', '_repr_option', '_richcmp', '_sage_', '_set_element_constructor', '_singular_',
'_singular_init_', '_subgroup_constructor', '_t_', '_test_an_element',
'_test_associativity', '_test_cardinality', '_test_category', '_test_constructions',
'_test_elements', '_test_elements_eq_reflexive', '_test_elements_eq_symmetric',
'_test_elements_eq_transitive', '_test_elements_neq', '_test_eq', '_test_inverse',
'_test_new', '_test_not_implemented_methods', '_test_one', '_test_pickling', '_test_prod',
'_test_some_elements', '_tester', '_ti_', '_unicode_art_', '_unset_category',
'_unset_coercions_used', '_unset_embedding', '_verbose_', 'abelian_invariants',
'alexander_matrix', 'algebra', 'ambient', 'an_element', 'as_classical_group',
'as_matrix_group', 'as_permutation_group', 'as_reflection_group', 'base', 'base_ring',
'cardinality', 'cartesian_product', 'categories', 'category', 'cayley_graph',
'cayley_table', 'center', 'centralizing_element', 'change_debug_options',
'character_table', 'class_function', 'coerce', 'coerce_embedding', 'coerce_map_from',
'conjugacy_class', 'conjugacy_class_representatives', 'conjugacy_classes', 'construction',
'convert_map_from', 'cubic_braid_subgroup', 'db', 'direct_product', 'dump', 'dumps',
'element_class', 'epimorphisms', 'free_group', 'gap', 'gen', 'generators', 'gens',
'gens_dict', 'gens_dict_recursive', 'get_action', 'group_generators', 'has_base',
'has_coerce_map_from', 'holomorph', 'hom', 'inject_variables', 'intersection',
'irreducible_characters', 'is_abelian', 'is_atomic_repr', 'is_coercion_cached',
'is_commutative', 'is_conversion_cached', 'is_empty', 'is_exact', 'is_finite',
'is_isomorphic', 'is_multiplicative', 'is_parent_of', 'is_subgroup', 'latex_name',
'latex_variable_names', 'list', 'magma_generators', 'monoid_generators',
'multiplication_table', 'ngens', 'normalize_names', 'objgen', 'objgens', 'one',
'one_element', 'order', 'parent', 'pre_image_braid_group', 'prod', 'product',
'product_from_element_class_mul', 'quotient', 'random_element', 'register_action',
'register_coercion', 'register_conversion', 'register_embedding',
'regular_representation', 'relations', 'rename', 'reset_name', 'rewriting_system', 'save',
'semidirect_product', 'semigroup_generators', 'simplification_isomorphism', 'simplified',
'some_elements', 'structure_description', 'subgroup', 'submonoid', 'subsemigroup',
'trivial_representation', 'variable_name', 'variable_names']\end{verbatim}\begin{verbatim}
\end{verbatim}\begin{verbatim}Attributes of C3Cl:
['CartesianProduct', 'Element', 'Hom', '_Hom_', '__cached_methods', '__call__',
'__class__', '__cmp__', '__contains__', '__delattr__', '__dict__', '__dir__', '__div__',
'__doc__', '__format__', '__getattribute__', '__getitem__', '__getstate__', '__hash__',
'__init__', '__init_extra__', '__iter__', '__len__', '__make_element_class__',
'__module__', '__mul__', '__new__', '__nonzero__', '__pyx_vtable__', '__qualname__',
'__rdiv__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__',
'__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__temporarily_change_names',
'__weakref__', '_abstract_element_class', '_ambient', '_an_element_', '_ascii_art_',
'_assign_names', '_axiom_', '_axiom_init_', '_base', '_cache_an_element', '_cache_key',
'_check_matrix', '_cmp_', '_cmp_generators', '_coerce_map_from_', '_coerce_map_via',
'_coercions_used', '_convert_map_from_', '_convert_method_name', '_defining_names',
'_deg', '_doccls', '_element_constructor', '_element_constructor_',
'_element_constructor_from_element_class', '_element_init_pass_parent', '_factory_data',
'_first_ngens', '_fricas_', '_fricas_init_', '_gap_', '_gap_gens', '_gap_init_',
'_generic_convert_map', '_get_action_', '_giac_', '_giac_init_', '_gp_', '_gp_init_',
'_init_category_', '_initial_action_list', '_initial_coerce_list',
'_initial_convert_list', '_interface_', '_interface_init_', '_interface_is_cached_',
'_internal_coerce_map_from', '_internal_convert_map_from', '_introspect_coerce',
'_is_category_initialized', '_is_valid_homomorphism_', '_kash_', '_kash_init_', '_latex_',
'_libgap', '_libgap_', '_macaulay2_', '_macaulay2_init_', '_magma_init_', '_maple_',
'_maple_init_', '_mathematica_', '_mathematica_init_', '_maxima_', '_maxima_init_',
'_maxima_lib_', '_maxima_lib_init_', '_names', '_octave_', '_octave_init_', '_pari_',
'_pari_init_', '_populate_coercion_lists_', '_r_init_', '_reduction', '_refine_category_',
'_repr_', '_repr_option', '_richcmp', '_sage_', '_set_element_constructor', '_singular_',
'_singular_init_', '_subgroup_constructor', '_test_an_element', '_test_associativity',
'_test_cardinality', '_test_category', '_test_elements', '_test_elements_eq_reflexive',
'_test_elements_eq_symmetric', '_test_elements_eq_transitive', '_test_elements_neq',
'_test_eq', '_test_inverse', '_test_new', '_test_not_implemented_methods', '_test_one',
'_test_pickling', '_test_prod', '_test_some_elements', '_tester', '_unicode_art_',
'_unset_category', '_unset_coercions_used', '_unset_embedding', 'algebra', 'ambient',
'an_element', 'as_matrix_group', 'as_permutation_group', 'base', 'base_ring',
'cardinality', 'cartesian_product', 'categories', 'category', 'cayley_graph',
'cayley_table', 'center', 'class_function', 'coerce', 'coerce_embedding',
'coerce_map_from', 'conjugacy_class', 'conjugacy_class_representatives',
'conjugacy_classes', 'construction', 'convert_map_from', 'db', 'degree', 'dump', 'dumps',
'element_class', 'gap', 'gen', 'generators', 'gens', 'gens_dict', 'gens_dict_recursive',
'get_action', 'group_generators', 'has_base', 'has_coerce_map_from', 'holomorph', 'hom',
'inject_variables', 'intersection', 'invariant_generators', 'irreducible_characters',
'is_abelian', 'is_atomic_repr', 'is_coercion_cached', 'is_commutative',
'is_conversion_cached', 'is_empty', 'is_exact', 'is_finite', 'is_isomorphic',
'is_multiplicative', 'is_parent_of', 'is_subgroup', 'latex_name', 'latex_variable_names',
'list', 'magma_generators', 'matrix_space', 'module_composition_factors',
'monoid_generators', 'multiplication_table', 'ngens', 'normalize_names', 'objgen',
'objgens', 'one', 'one_element', 'order', 'parent', 'prod', 'product',
'product_from_element_class_mul', 'quotient', 'random_element', 'register_action',
'register_coercion', 'register_conversion', 'register_embedding',
'regular_representation', 'rename', 'reset_name', 'save', 'semidirect_product',
'semigroup_generators', 'some_elements', 'structure_description', 'subgroup', 'submonoid',
'subsemigroup', 'trivial_representation', 'variable_name', 'variable_names']
\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{The above used method ``as\_classical\_group'' is a special method of the CubicBraidGroup class. It returns the realization of the cubic braid group as classical group. These are (in principal) symplectic groups over $GF(3)$ resp. unitary groups over $GF(4)$ in the case of Assion groups of type ``S'' and ``U'' respectively (realization of Assion) and subgroups of the unitary groups over $\QQ$ adjoined with a primitive 12-th root of unity with respect to a certain hermitian form in the case of the ordinary cubic braid groups (Coxeters realization):}
\begin{lstlisting}
S3 = AssionGroupS(3); print S3; print ""
S3Cl = S3.as_classical_group(); print S3Cl; print ""
U3 = AssionGroupU(3); print U3; print ""
U3Cl = U3.as_classical_group(); print U3Cl
\end{lstlisting}\begin{verbatim}Assion group on 3 strands of type S\end{verbatim}\begin{verbatim}
\end{verbatim}\begin{verbatim}Symplectic Group of degree 2 over Finite Field of size 3
\end{verbatim}\begin{verbatim}Assion group on 3 strands of type U\end{verbatim}\begin{verbatim}
\end{verbatim}\begin{verbatim}Subgroup of (The projective general unitary group of degree 3 over Finite Field of size 2)
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)]\end{verbatim}
\begin{lstlisting}
\end{lstlisting}\subsection{Exceptions in Assions series}
{U3Cl is an exception to the statement above! It is not identical to the unitary group of degree 2. This exception occurs if the number of strands is zero mululo three in the case of Assion groups of type U resp. if the number of strands is even concerning the Assion groups of type S. But, since U3Cl is a subgroup of U4Cl (the unitary group of degree 3 over $GF(4)$ ) you may obtain it like this:}
\begin{lstlisting}
U3Clemb = U3.as_classical_group( embedded = True); print U3Clemb; print ""
um1, um2 =U3Clemb.gens()
U4 = AssionGroupU(4)
U4Cl = U4.as_classical_group(); print U4Cl; print ""
print 'first generator in U4Cl?', um1 in U4Cl
print 'second generator in U4Cl?', um2 in U4Cl
\end{lstlisting}\begin{verbatim}Matrix group over Finite Field in a of size 2^2 with 2 generators (
[0 0 a] [a + 1 a a]
[0 1 0] [ a a + 1 a]
[a 0 a], [ a a a + 1]
)
\end{verbatim}\begin{verbatim}General Unitary Group of degree 3 over Finite Field in a of size 2^2 with respect to
hermitian form:
[0 0 1]
[0 1 0]
[1 0 0]
\end{verbatim}\begin{verbatim}first generator in U4Cl? True\end{verbatim}\begin{verbatim}second generator in U4Cl? True\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{Don't confuse about the difference with respect to the base field concerning GU(3,2) (size 2²) and PGU(3,2) (size 2) which is caused by non conform conventions inside sage.}
\subsubsection{Description of the exceptions as centralizer}
{Assion described the exceptional cases of the groups $S(m)$ and $U(m)$ as centralizer groups of certain elements in the projective counterpart of the corresponding classical group. These elements can be obtained by the following method:}
\begin{lstlisting}
u3cent = U3.centralizing_element(); print "centalizing element (u3cent):\n
print "u3cent in U3Cl?
print "u3cent in U3Clemb?
u3centP = U3.centralizing_element(projective = True ); print "projective centalizing element (u3centP):\n
print "u3centP in U3Cl?
print "u3centP in U3Clemb?
PU3 = U3Cl.ambient_group(); print "Ambient Group of U3Cl (PU3):\n
PU3cent = PU3.centralizer(u3centP); print "Centralizer of u3centP in PU3 (PU3cent):\n
print "Check PU3cent == U3Cl:
\end{lstlisting}\begin{verbatim}centalizing element (u3cent):
[a + 1 a + 1 1]
[a + 1 0 a]
[ 1 a a]
\end{verbatim}\begin{verbatim}u3cent in U3Cl? True\end{verbatim}\begin{verbatim}u3cent in U3Clemb? True
\end{verbatim}\begin{verbatim}projective centalizing element (u3centP):
(1,16)(2,9)(3,10)(4,19)(6,12)(7,20)(13,21)(14,15)
\end{verbatim}\begin{verbatim}u3centP in U3Cl? True\end{verbatim}\begin{verbatim}u3centP in U3Clemb? False
\end{verbatim}\begin{verbatim}Ambient Group of U3Cl (PU3):
The projective general unitary group of degree 3 over Finite Field of size 2
\end{verbatim}\begin{verbatim}Centralizer of u3centP in PU3 (PU3cent):
Subgroup of (The projective general unitary group of degree 3 over Finite Field of size 2)
generated by [(2,3,4)(6,13,20)(7,12,21)(8,11,18)(9,10,19),
(1,6,7)(3,14,19)(4,10,15)(5,18,11)(12,20,16),
(1,16)(2,9)(3,10)(4,19)(6,12)(7,20)(13,21)(14,15)]
\end{verbatim}\begin{verbatim}Check PU3cent == U3Cl: True\end{verbatim}
\begin{lstlisting}
\end{lstlisting}\subsection{Conversion maps}
{Observe, that the cubic braid groups do not differ from the corresponding Assion groups in terms of isomorphism as long as the number of strand is less than five:}
\begin{lstlisting}
print 'C3 isomorphic to S3?', C3.is_isomorphic(S3)
print 'C3 isomorphic to U3?', C3.is_isomorphic(U3)
print 'C3 isomorphic to S3Cl?', C3.is_isomorphic(S3Cl)
print 'C3 isomorphic to U3Cl?', C3.is_isomorphic(U3Cl)
print 'C3 isomorphic to U3Clemb?', C3.is_isomorphic(U3Clemb)
\end{lstlisting}\begin{verbatim}C3 isomorphic to S3?\end{verbatim}\begin{verbatim}True\end{verbatim}\begin{verbatim}C3 isomorphic to U3?\end{verbatim}\begin{verbatim}True\end{verbatim}\begin{verbatim}C3 isomorphic to S3Cl? True\end{verbatim}\begin{verbatim}C3 isomorphic to U3Cl? True\end{verbatim}\begin{verbatim}C3 isomorphic to U3Clemb? True\end{verbatim}\begin{verbatim}True\end{verbatim}\begin{verbatim}C3 isomorphic to S3Cl? True\end{verbatim}\begin{verbatim}C3 isomorphic to U3Cl? True\end{verbatim}\begin{verbatim}C3 isomorphic to U3Clemb? True\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{These isomorphisms are canonical in the case of S3 and U3 since all these groups are defined as finitely presented groups with identical number of generators and according relations:}
\begin{lstlisting}
print 'Relations of C3:\n
print 'Relations of S3:\n
\end{lstlisting}\begin{verbatim}Relations of C3:
[c0*c1*c0*c1^-1*c0^-1*c1^-1, c0^3, c1^3]
\end{verbatim}\begin{verbatim}Relations of S3:
[s0*s1*s0*s1^-1*s0^-1*s1^-1, s0^3, s1^3]
\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{In the other cases the maps are realized as conversion maps, that is:}
\begin{lstlisting}
C3.inject_variables(); element = c0*c1**2; image_element = C3Cl(element)
print 'Image of
U3.inject_variables(); element = u0*u1**2; image_element = U3Cl(element)
print 'Image of
image_element = U3Clemb(element)
print 'Image of
\end{lstlisting}\begin{verbatim}Defining c0, c1\end{verbatim}\begin{verbatim}Image of c0*c1^2 in C3Cl:
[ -E(3)^2 E(12)^7]
[-E(12)^7 E(3)^2]
\end{verbatim}\begin{verbatim}Defining u0, u1\end{verbatim}\begin{verbatim}Image of u0*u1^2 in U3Cl:
(1,7,16,20)(2,19,9,4)(3,15,10,14)(5,11)(6,13,12,21)(8,18)
\end{verbatim}\begin{verbatim}Image of u0*u1^2 in U3Clemb:
[ 1 1 a + 1]
[a + 1 a a + 1]
[ a 0 a]
\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{You may also convert in the opposite direction:}
\begin{lstlisting}
elements = list(S3Cl.some_elements())
image_elements = [ S3(element) for element in elements ]
print 'Images of\n\n
\end{lstlisting}\begin{verbatim}Images of
[1 1]
[0 1]
and
[0 1]
[2 0]
in S3:
[s1, s0*s1*s0]
\end{verbatim}
\begin{lstlisting}
\end{lstlisting}\subsection{Preimages in the Artin braid group}
{For each element of a cubic braid group you can define a preimage in the braid group as instance of the element class of the braid group class:}
\begin{lstlisting}
braid_elements = [element.braid() for element in image_elements ]
print 'Braid preimages of\n
type(braid_elements[0])
jones_polynomial = [element.jones_polynomial() for element in braid_elements ]
print 'Coresponding Jones polynomials:\n
burau_matrix = braid_elements[1].burau_matrix()
print 'Burau matrix to second braid preimage:\n
\end{lstlisting}\begin{verbatim}Braid preimages of
[1 1]
[0 1]
and
[0 1]
[2 0]:
[s1, s0*s1*s0]
\end{verbatim}\begin{verbatim}<class 'lib.local_braid.local_BraidGroup_class_with_category.element_class'>\end{verbatim}\begin{verbatim}Coresponding Jones polynomials:
[-sqrt(t) - 1/sqrt(t), -t^(5/2) - sqrt(t)]
\end{verbatim}\begin{verbatim}Burau matrix to second braid preimage:
[ 1 - t t - t^2 t^2]
[ 1 - t t 0]
[ 1 0 0]\end{verbatim}
\begin{lstlisting}
\end{lstlisting}\subsection{Burau matrices for the cubic braid groups}
{You can calculate the burau matrix correspondig to elements of the cubic braid groups, as well. By default you will get it as matrix over {\textbackslash}QQ adjoint with a third root of unity (zeta3):}
\begin{lstlisting}
elem = image_elements[1]
print "Burau:\n
\end{lstlisting}\begin{verbatim}Burau:
[ -zeta3 1 zeta3]
[ -zeta3 zeta3 + 1 0]
[ 1 0 0]\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{Using the additional options of this method, you can construct representations in finite matrix groups, as well:}
\begin{lstlisting}
bur_mat = elem.burau_matrix(characteristic = 5)
print "Burau in characteristic 5:\n
\end{lstlisting}\begin{verbatim}Burau in characteristic 5:
[2*rI + 2 1 3*rI + 3]
[2*rI + 2 3*rI + 4 0]
[ 1 0 0]
base_ring: Finite Field in rI of size 5^2\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{To see all possible options type (but again, note that carriage return is ignored in the sage worksheet. To see it better use jupyter notebook or command line):}
\begin{lstlisting}
print CubicBraidElement.burau_matrix.__doc__
\end{lstlisting}\begin{verbatim}
Return the Burau matrix of the cubic braid coset.
If you don't see this well formated type
sage: print CubicBraidElement.burau_matrix.__doc_
This method uses the same method belonging to the Braid class, but reduces the
parameter to a primitive six
root of unity, respectivly an element vanishing on the polynomial $x^2-x+1$
INPUT: (all parameters are optional by keyword )
- "rootBur": six root of unity in some field (default six 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 rootBur if given)
- "reduced": boolean (default: False); whether to return the reduced or unreduced
Burau representation
(see Braid class )
- "characteristic": integer giving the characteristic of the domain (default is 0
or the characteristic of
the doamain if given)
- "version": values:
'unitary': gives the unitary form according to Squier (see
Braid._unitary_burau_matrix_() )
'default': the method behaves like the original one of the Braid
-class
any value else: gives the reduced form given on wikipedia
OUTPUT:
The Burau matrix of the cubic braid coset with entries in the domain given by
the options
If you need the values of the reconstructed keywords "rootBur", "Domain" or
"characteristic" use the internal
version _burau_matrix_ of this method
RAISE:
- ValueError: 'characteristic must be in integer'
- ValueError: 'characteristic must be a prime'
- ValueError: 'characteristic of Domain does not match given characteristic'
- ValueError: 'rootBur must belong to a domain containing 1'
- ValueError: 'rootBur must vanish on $x^2-x+1$ default case
- ValueError: 'rootBur must vanish on $x^4-x^2+1$ in case of call with version
= 'unitary'
EXAMPLES::
sage: C3.<c1, c2> = CubicBraidGroup(3)
sage: ele1 = c1*c2*c1
sage: BurauTest = ele1.burau_matrix(); print BurauTest
[ -zeta3 1 zeta3]
[ -zeta3 zeta3 + 1 0]
[ 1 0 0]
sage: BurauTest.base_ring()
Cyclotomic Field of order 3 and degree 2
sage:
sage: BurauTest = ele1.burau_matrix( characteristic = 0 ); print BurauTest
[ -zeta3 1 zeta3]
[ -zeta3 zeta3 + 1 0]
[ 1 0 0]
sage: BurauTest.base_ring()
Cyclotomic Field of order 3 and degree 2
sage:
sage: BurauTest = ele1.burau_matrix( Domain = QQ ); print BurauTest
Warning: Domain extended to splitting field of tT^2 - tT + 1
[-rI + 1 1 rI - 1]
[-rI + 1 rI 0]
[ 1 0 0]
sage: BurauTest.base_ring()
Number Field in rI with defining polynomial tT^2 - tT + 1
sage:
sage: BurauTest = ele1.burau_matrix( Domain = QQ[I, sqrt(3)] ); print
BurauTest
[ 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: BurauTest.base_ring()
Number Field in I with defining polynomial x^2 + 1 over its base field
sage:
sage: BurauTest = ele1.burau_matrix( characteristic = 7 ); print BurauTest
[3 1 4]
[3 5 0]
[1 0 0]
sage: BurauTest.base_ring()
Finite Field of size 7
sage:
sage: BurauTest = ele1.burau_matrix( characteristic = 2 ); print BurauTest
[rI + 1 1 rI + 1]
[rI + 1 rI 0]
[ 1 0 0]
sage: BurauTest.base_ring()
Finite Field in rI of size 2^2
sage:
sage:
sage: F4.<r64> = GF(4)
sage: BurauTest = ele1.burau_matrix( rootBur=r64 ); print BurauTest
[r64 + 1 1 r64 + 1]
[r64 + 1 r64 0]
[ 1 0 0]
sage: BurauTest.base_ring()
Finite Field in r64 of size 2^2
sage:
sage: BurauTest = ele1.burau_matrix( Domain = GF(5) ); print BurauTest
Warning: Domain extended to splitting field of tT^2 + 4*tT + 1
[2*rI + 2 1 3*rI + 3]
[2*rI + 2 3*rI + 4 0]
[ 1 0 0]
sage: BurauTest.base_ring()
Finite Field in rI of size 5^2
sage:
sage: BurauTest = ele1.burau_matrix( version = 'unitary' ); print BurauTest
[ 0 -zeta12^3]
[-zeta12^3 0]
sage: BurauTest.base_ring()
Cyclotomic Field of order 12 and degree 4
sage:
sage: BurauTest = ele1.burau_matrix( Domain = QQ[I, sqrt(3)], version =
'unitary' ); print BurauTest
[ 0 -I]
[-I 0]
sage: BurauTest.base_ring()
Number Field in I with defining polynomial x^2 + 1 over its base field
AUTHOR:
- Sebastian Oehms, Sept. 2016
REFERENCES:
- :wikipedia: "Burau_representation"
for more inormation type
sage: print Braid.burau_matrix.__doc__
sage: print local_Braid.burau_matrix.__doc__
sage: print local_Braid.__burau_matrix_wikipedia__.__doc__
sage: print local_Braid.__burau_matrix_unitary__.__doc__
\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}\subsection{Other matrix group realizations via the Burau representation}
{If you want to create the image of the Burau representation as as matrix group together with the corresponding group homorphism you just need to type, for instance:}
\begin{lstlisting}
C3c7 = C3.as_matrix_group( Domain = GF(7) ); C3c7
\end{lstlisting}\begin{verbatim}Matrix group over Finite Field of size 7 with 2 generators (
[3 5 0] [1 0 0]
[1 0 0] [0 3 5]
[0 0 1], [0 1 0]
)\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{Conversion maps are availlable as in the case of the classical groups:}
\begin{lstlisting}
c1, c2 = C3.gens(); elemC3 = c1*c2
elemC3c7 = C3c7( elemC3 ); print "elemC3c7:\n", elemC3c7
elemC3back = C3( elemC3c7 ); print "elemC3back:\n", elemC3back
print "Check: ", elemC3back == elemC3
\end{lstlisting}\begin{verbatim}elemC3c7:
[3 1 4]
[1 0 0]
[0 1 0]\end{verbatim}\begin{verbatim}elemC3back:
c0*c1\end{verbatim}\begin{verbatim}Check: True\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{Of course, the map backwards is a group homomorphism only if the representation is faithfull. In general this conversion map is a section.
Further, note that the Burau representation does factor through the relations of Assion, just for certain characteristic.}
\subsection{Realization as complex reflection groups}
{A third kind of realization of the cubic braid groups leads to complex reflection groups. This realization is availlable starting wirh sage version 7.2 if in addition gap3 with the CHEVIE package is installed. In this case the complex reflection group is obtained by:}
\begin{lstlisting}
R3 = C3.as_reflection_group(); R3
\end{lstlisting}\begin{verbatim}Irreducible complex reflection group of rank 2 and type ST4\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{All methods implemented for the IrreduclibeComplexReflectionGroup class can be used for R3, for example:}
\begin{lstlisting}
ctmat = R3.cartan_matrix(); print "Cartan matrix corresponding to
simproots = R3.simple_roots(); print "simple roots corresponding to
reflhplanes = R3.reflection_hyperplanes(); print "reflection hyperplanes corresponding to
coxele = R3.coxeter_element(); print "Coxeter element corresponding to
\end{lstlisting}\begin{verbatim}Cartan matrix corresponding to Cubic Braid group on 3 strands:
[-2*E(3) - E(3)^2 E(3)^2]
[ -E(3)^2 -2*E(3) - E(3)^2]
\end{verbatim}\begin{verbatim}simple roots corresponding to Cubic Braid group on 3 strands:
Finite family {1: (0, -2*E(3) - E(3)^2), 2: (2*E(3)^2, E(3)^2)}
\end{verbatim}\begin{verbatim}reflection hyperplanes corresponding to Cubic Braid group on 3 strands:
Finite family {1: Vector space of degree 2 and dimension 1 over Universal Cyclotomic Field
Basis matrix:
[1 0], 2: Vector space of degree 2 and dimension 1 over Universal Cyclotomic Field
Basis matrix:
[ 1 -1], 3: Vector space of degree 2 and dimension 1 over Universal Cyclotomic Field
Basis matrix:
[ 1 -E(3)], 4: Vector space of degree 2 and dimension 1 over Universal Cyclotomic Field
Basis matrix:
[ 1 -E(3)^2]}\end{verbatim}\begin{verbatim}\end{verbatim}\begin{verbatim}Coxeter element corresponding to Cubic Braid group on 3 strands:
(1,7,6,12,23,20)(2,8,17,24,9,5)(3,16,10,19,15,21)(4,14,11,22,18,13)\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{Elements in R3 may be interpreted as element of the cubic braid group or the classical realization via conversion:}
\begin{lstlisting}
coxeleC3 = C3(coxele); print "Coxeter element as element of
coxeleC3Cl = C3Cl(coxele); print "Coxeter element as element of the classical group corresponding to the
\end{lstlisting}\begin{verbatim}Coxeter element as element of Cubic Braid group on 3 strands:
c0*c1\end{verbatim}\begin{verbatim}\end{verbatim}\begin{verbatim}Coxeter element as element of the classical group corresponding to the Cubic Braid group
on 3 strands:
[ 0 E(4)]
[E(12)^11 E(3)]\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{Conversion backwards is posible, as well:}
\begin{lstlisting}
c1, c2 = C3.gens()
element = c1*c2/c1/c2; elementcl = C3Cl(element)
image = R3(element); print "Image of
image = R3(elementcl); print "Image of \n
\end{lstlisting}\begin{verbatim}Image of c0*c1*c0^-1*c1^-1 in Irreducible complex reflection group of rank 2 and type ST4:
(1,15,12,16)(2,18,24,14)(3,17,19,5)(4,20,22,6)(7,9,23,8)(10,11,21,13)
\end{verbatim}\begin{verbatim}Image of
[ E(3) E(12)^11]
[-E(12)^11 -E(3)]
in Irreducible complex reflection group of rank 2 and type ST4:
(1,15,12,16)(2,18,24,14)(3,17,19,5)(4,20,22,6)(7,9,23,8)(10,11,21,13)\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}\subsection{Realization as permutation groups}
{A third kind of realization of the cubic braid groups is that as permutation groups. This realization is in sage available for all finetely presented groups via the gap interface. In addition you will get coercion maps here, as well and a permutation group constructed with respect to the classical realization. This is the default in the call:}
\begin{lstlisting}
C3.as_permutation_group()
\end{lstlisting}\begin{verbatim}Subgroup of (Symmetric group of order 8! as a permutation group) generated by
[(2,3,5)(4,6,8), (1,2,4)(5,7,6)]\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
{To obtain the permutation group calculated for the finitely presented group you must type:}
\begin{lstlisting}
C3.as_permutation_group( native = True )
\end{lstlisting}\begin{verbatim}Subgroup of (Symmetric group of order 8! as a permutation group) generated by
[(2,4,5)(3,6,7), (1,2,3)(5,8,6)]\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
\end{lstlisting}\subsection{Other useful methods}
{In principal you can use all gap functions being available for these types of groups and being implemented via the gap interface of sage. Use the online help ("print dir(C3)" for example) as shown above to see them all. Here are some examples:}
\begin{lstlisting}
S3.character_table()
\end{lstlisting}\begin{verbatim}[ 1 1 1 1 1 1 1]
[ 1 -zeta3 - 1 zeta3 1 zeta3 -zeta3 - 1 1]
[ 1 zeta3 -zeta3 - 1 1 -zeta3 - 1 zeta3 1]
[ 2 -1 -1 -2 1 1 0]
[ 2 -zeta3 zeta3 + 1 -2 -zeta3 - 1 zeta3 0]
[ 2 zeta3 + 1 -zeta3 -2 zeta3 -zeta3 - 1 0]
[ 3 0 0 3 0 0 -1]\end{verbatim}\begin{verbatim}\end{verbatim}
\begin{lstlisting}
U7 = AssionGroupU( 7 ); print "Order of U7:", U7.order()
\end{lstlisting}\begin{verbatim}Order of U7:\end{verbatim}\begin{verbatim} 82771476480\end{verbatim}
\begin{lstlisting}
conCls1s2 = S4.conjugacy_class( x*y**2*z ); conCls1s2
\end{lstlisting}\begin{verbatim}Conjugacy class of s0*s1^2*s2 in Assion group on 4 strands of type S\end{verbatim}
\begin{lstlisting}
\end{lstlisting}
\end{document}