def __init__(self, names): """ Python constructor. INPUT: - ``names`` -- a tuple of strings. The names of the generators. TESTS:: sage: B1 = BraidGroup(5) # indirect doctest sage: B1 Braid group on 5 strands Check that :trac:`14081` is fixed:: sage: BraidGroup(2) Braid group on 2 strands sage: BraidGroup(('a',)) Braid group on 2 strands """ n = len(names) if n<1: #n is the number of generators, not the number of strands (see ticket 14081) raise ValueError("the number of strands must be an integer bigger than one") free_group = FreeGroup(names) rels = [] for i in range(1, n): if i<n-1: rels.append(free_group([i, i+1, i, -i-1, -i, -i-1])) for j in range(i+2, n): rels.append(free_group([i, j, -i, -j])) FinitelyPresentedGroup.__init__(self, free_group, tuple(rels)) self._nstrands_ = n+1
def __init__(self, coxeter_matrix, names): """ Initialize ``self``. TESTS:: sage: A = ArtinGroup(['D',4]) sage: TestSuite(A).run() sage: A = ArtinGroup(['B',3], ['x','y','z']) sage: TestSuite(A).run() """ self._coxeter_group = CoxeterGroup(coxeter_matrix) free_group = FreeGroup(names) rels = [] # Generate the relations based on the Coxeter graph I = coxeter_matrix.index_set() for ii, i in enumerate(I): for j in I[ii + 1:]: m = coxeter_matrix[i, j] if m == Infinity: # no relation continue elt = [i, j] * m for ind in range(m, 2 * m): elt[ind] = -elt[ind] rels.append(free_group(elt)) FinitelyPresentedGroup.__init__(self, free_group, tuple(rels))
def __init__(self, names): """ Python constructor. INPUT: - ``names`` -- a tuple of strings. The names of the generators. TESTS:: sage: B1 = BraidGroup(5) # indirect doctest sage: B1 Braid group on 5 strands """ n = len(names) if n<2: raise ValueError("n must be an integer bigger than one") free_group = FreeGroup(names) rels = [] for i in range(1, n): if i<n-1: rels.append(free_group([i, i+1, i, -i-1, -i, -i-1])) for j in range(i+2, n): rels.append(free_group([i, j, -i, -j])) FinitelyPresentedGroup.__init__(self, free_group, tuple(rels)) self._nstrands_ = n+1
def __init__(self, coxeter_matrix, names): """ Initialize ``self``. TESTS:: sage: A = ArtinGroup(['D',4]) sage: TestSuite(A).run() sage: A = ArtinGroup(['B',3], ['x','y','z']) sage: TestSuite(A).run() """ self._coxeter_group = CoxeterGroup(coxeter_matrix) free_group = FreeGroup(names) rels = [] # Generate the relations based on the Coxeter graph I = coxeter_matrix.index_set() for ii,i in enumerate(I): for j in I[ii+1:]: m = coxeter_matrix[i,j] if m == Infinity: # no relation continue elt = [i,j]*m for ind in range(m, 2*m): elt[ind] = -elt[ind] rels.append(free_group(elt)) FinitelyPresentedGroup.__init__(self, free_group, tuple(rels))
def __init__(self, G, names): """ Initialize ``self``. TESTS:: sage: G = RightAngledArtinGroup(graphs.CycleGraph(5)) sage: TestSuite(G).run() """ self._graph = G F = FreeGroup(names=names) CG = Graph(G).complement() # Make sure it's mutable CG.relabel() # Standardize the labels cm = [[-1] * CG.num_verts() for _ in range(CG.num_verts())] for i in range(CG.num_verts()): cm[i][i] = 1 for u, v in CG.edge_iterator(labels=False): cm[u][v] = 2 cm[v][u] = 2 self._coxeter_group = CoxeterGroup( CoxeterMatrix(cm, index_set=G.vertices())) rels = tuple( F([i + 1, j + 1, -i - 1, -j - 1]) for i, j in CG.edge_iterator(labels=False)) # +/- 1 for indexing FinitelyPresentedGroup.__init__(self, F, rels)
def __init__(self, names): """ Python constructor. INPUT: - ``names`` -- a tuple of strings. The names of the generators. TESTS:: sage: B1 = BraidGroup(5) # indirect doctest sage: B1 Braid group on 5 strands sage: TestSuite(B1).run() Check that :trac:`14081` is fixed:: sage: BraidGroup(2) Braid group on 2 strands sage: BraidGroup(('a',)) Braid group on 2 strands Check that :trac:`15505` is fixed:: sage: B=BraidGroup(4) sage: B.relations() (s0*s1*s0*s1^-1*s0^-1*s1^-1, s0*s2*s0^-1*s2^-1, s1*s2*s1*s2^-1*s1^-1*s2^-1) sage: B=BraidGroup('a,b,c,d,e,f') sage: B.relations() (a*b*a*b^-1*a^-1*b^-1, a*c*a^-1*c^-1, a*d*a^-1*d^-1, a*e*a^-1*e^-1, a*f*a^-1*f^-1, b*c*b*c^-1*b^-1*c^-1, b*d*b^-1*d^-1, b*e*b^-1*e^-1, b*f*b^-1*f^-1, c*d*c*d^-1*c^-1*d^-1, c*e*c^-1*e^-1, c*f*c^-1*f^-1, d*e*d*e^-1*d^-1*e^-1, d*f*d^-1*f^-1, e*f*e*f^-1*e^-1*f^-1) """ n = len(names) if n < 1: #n is the number of generators, not the number of strands (see ticket 14081) raise ValueError( "the number of strands must be an integer bigger than one") free_group = FreeGroup(names) rels = [] for i in range(1, n): rels.append(free_group([i, i + 1, i, -i - 1, -i, -i - 1])) for j in range(i + 2, n + 1): rels.append(free_group([i, j, -i, -j])) FinitelyPresentedGroup.__init__(self, free_group, tuple(rels)) self._nstrands_ = n + 1
def __init__(self, names): """ Python constructor. INPUT: - ``names`` -- a tuple of strings. The names of the generators. TESTS:: sage: B1 = BraidGroup(5) # indirect doctest sage: B1 Braid group on 5 strands sage: TestSuite(B1).run() Check that :trac:`14081` is fixed:: sage: BraidGroup(2) Braid group on 2 strands sage: BraidGroup(('a',)) Braid group on 2 strands Check that :trac:`15505` is fixed:: sage: B=BraidGroup(4) sage: B.relations() (s0*s1*s0*s1^-1*s0^-1*s1^-1, s0*s2*s0^-1*s2^-1, s1*s2*s1*s2^-1*s1^-1*s2^-1) sage: B=BraidGroup('a,b,c,d,e,f') sage: B.relations() (a*b*a*b^-1*a^-1*b^-1, a*c*a^-1*c^-1, a*d*a^-1*d^-1, a*e*a^-1*e^-1, a*f*a^-1*f^-1, b*c*b*c^-1*b^-1*c^-1, b*d*b^-1*d^-1, b*e*b^-1*e^-1, b*f*b^-1*f^-1, c*d*c*d^-1*c^-1*d^-1, c*e*c^-1*e^-1, c*f*c^-1*f^-1, d*e*d*e^-1*d^-1*e^-1, d*f*d^-1*f^-1, e*f*e*f^-1*e^-1*f^-1) """ n = len(names) if n<1: #n is the number of generators, not the number of strands (see ticket 14081) raise ValueError("the number of strands must be an integer bigger than one") free_group = FreeGroup(names) rels = [] for i in range(1, n): rels.append(free_group([i, i+1, i, -i-1, -i, -i-1])) for j in range(i+2, n+1): rels.append(free_group([i, j, -i, -j])) FinitelyPresentedGroup.__init__(self, free_group, tuple(rels)) self._nstrands_ = n+1
def __init__(self, G): """ Initialize ``self``. INPUT: - ``G`` -- a graph TESTS:: sage: G = RightAngledArtinGroup(graphs.CycleGraph(5)) sage: TestSuite(G).run() """ self._graph = G F = FreeGroup(names=['v{}'.format(v) for v in self._graph.vertices()]) CG = Graph(G).complement() # Make sure it's mutable CG.relabel() # Standardize the labels rels = tuple(F([i+1, j+1, -i-1, -j-1]) for i,j in CG.edges(False)) #+/- 1 for indexing FinitelyPresentedGroup.__init__(self, F, rels)
def __init__(self, G): """ Initialize ``self``. INPUT: - ``G`` -- a graph TESTS:: sage: G = RightAngledArtinGroup(graphs.CycleGraph(5)) sage: TestSuite(G).run() """ self._graph = G F = FreeGroup(names=['v{}'.format(v) for v in self._graph.vertices()]) CG = Graph(G).complement() # Make sure it's mutable CG.relabel() # Standardize the labels rels = tuple(F([i+1, j+1, -i-1, -j-1]) for i,j in CG.edges(False)) #+/- 1 for indexing FinitelyPresentedGroup.__init__(self, F, rels)
def __init__(self, G, names): """ Initialize ``self``. TESTS:: sage: G = RightAngledArtinGroup(graphs.CycleGraph(5)) sage: TestSuite(G).run() """ self._graph = G F = FreeGroup(names=names) CG = Graph(G).complement() # Make sure it's mutable CG.relabel() # Standardize the labels cm = [[-1]*CG.num_verts() for _ in range(CG.num_verts())] for i in range(CG.num_verts()): cm[i][i] = 1 for u,v in CG.edge_iterator(labels=False): cm[u][v] = 2 cm[v][u] = 2 self._coxeter_group = CoxeterGroup(CoxeterMatrix(cm, index_set=G.vertices())) rels = tuple(F([i + 1, j + 1, -i - 1, -j - 1]) for i, j in CG.edge_iterator(labels=False)) # +/- 1 for indexing FinitelyPresentedGroup.__init__(self, F, rels)