Open in CoCalc
1
# This file was *autogenerated* from the file local_braid.sage
2
from sage.all_cmdline import * # import sage library
3
_sage_const_2 = Integer(2); _sage_const_1 = Integer(1); _sage_const_0 = Integer(0)
4
"""
5
Local Braid Groups
6
7
This module contains several extensions to the sage braid group class.
8
It fills in additional methods and extend the existing method burau_matrix
9
10
##############################################################################
11
# Copyright (C) 2016 Sebastian Oehms <[email protected]>
12
#
13
# Distributed under the terms of the GNU General Public License (GPL)
14
#
15
# The full text of the GPL is available at:
16
#
17
# http://www.gnu.org/licenses/
18
##############################################################################
19
20
This module contains extensions of the following classes from sage.groups.braid
21
22
sage class | extended class
23
-------------------------------------------------------------------------------
24
Braid | local_Braid
25
BraidGroup_class | local_BraidGroup_class
26
27
28
For further information see the documentation of the corresponding classes and methods
29
30
sage: print local_Braid.__doc__
31
sage: print local_Braid.burau_matrix_unitary.__doc__
32
sage: print local_Braid.__burau_matrix_wikipedia__.__doc__
33
sage: print local_Braid.__burau_matrix_unitary__.__doc__
34
35
sage: print local_BraidGroup_class.__doc__
36
sage: print local_BraidGroup_class.__doc__.__unitary_form__
37
38
EXAMPLES:
39
40
see the documentation of the corresponding classes and methods
41
42
TESTS:
43
44
see the documentation of the corresponding classes and methods
45
46
AUTHOR
47
48
- Sebastian Oehms, Oct. 2016
49
50
"""
51
52
53
54
####################################################################################################
55
# Extension to Braid Element Class defining the _burau_matrix_unitary_
56
####################################################################################################
57
from sage.groups.braid import *
58
59
class local_Braid(Braid):
60
"""
61
This Class contains extensions to the Braid Element class.
62
63
If you don't see this well formatted type
64
65
sage: print local_Braid.__doc__
66
67
This class has two new methods and one overwriting the corresponding methods of the class Braid.
68
69
New methods:
70
- __burau_matrix_wikipedia__
71
- __burau_matrix_unitary__
72
73
Modified:
74
. burau_matrix (using __burau_matrix_wikipedia__, __burau_matrix_unitary__ )
75
76
77
For more information type
78
79
sage: print local_Braid.__burau_matrix_wikipedia__.__doc__
80
sage: print local_Braid.__burau_matrix_unitary__.__doc__
81
sage: print local_Braid.burau_matrix.__doc__
82
83
AUTHOR
84
85
- Sebastian Oehms, Oct. 2016
86
87
"""
88
89
def __burau_matrix_wikipedia__( self, var='t'):
90
"""
91
The explicit reduced Burau representation given on Wikipedia since 11.03.2014 is different from the version
92
implemented in the braid-basis class. The version according to the recent Wikipedia-Page is implemented here.
93
94
If you don't see this well formatted type
95
96
sage: print local_Braid.__burau_matrix_wikipedia__.__doc__
97
98
99
Moreover it is the version used by Squier and Coxeter and will be used here to implement the unitary Burau
100
reoresentation
101
102
INPUT:
103
104
- "var": string (default: 't'); the name of the variable in the entries of the matrix. See also:
105
print sage.groups.braid.Braid.burau_matrix.__doc__
106
107
OUTPUT:
108
109
The Burau matrix of the braid. It is a matrix whose entries are Laurent polynomials in the variable "var".
110
111
EXAMPLES:
112
113
sage: sage.groups.braid.BraidGroup_class = local_BraidGroup_class
114
sage: B4 = BraidGroup(4)
115
sage: b1, b2, b3 = B4.gens()
116
sage: b = b1*b2/b3/b2
117
sage: type(b)
118
<class 'lib.local_braid.local_BraidGroup_class_with_category.element_class'>
119
sage: b.__burau_matrix_wikipedia__()
120
[ 1 - t -t^-1 + 1 -1]
121
[ 1 -t^-1 + 1 -1]
122
[ 1 -t^-1 0]
123
sage: b.__burau_matrix_wikipedia__(var='x')
124
[ 1 - x -x^-1 + 1 -1]
125
[ 1 -x^-1 + 1 -1]
126
[ 1 -x^-1 0]
127
128
compare with the original method
129
130
sage: b.burau_matrix()
131
[ 1 - t 0 t - t^2 t^2]
132
[ 1 0 0 0]
133
[ 0 0 1 0]
134
[ 0 t^-2 -t^-2 + t^-1 -t^-1 + 1]
135
sage: b.burau_matrix(reduced=True)
136
[ 0 -t + t^2 -t^2]
137
[ 0 1 - t + t^2 -t^2]
138
[ t^-2 -t^-2 + t^-1 - t + t^2 -t^-1 + 1 - t^2]
139
sage:
140
141
142
REFERENCES:
143
144
- wikipedia:'Burau_representation'
145
146
AUTHOR
147
148
- Sebastian Oehms, Oct. 2016
149
150
"""
151
R = LaurentPolynomialRing(IntegerRing(), var)
152
t = R.gen()
153
n = self.strands()
154
M = identity_matrix(R, n-_sage_const_1 )
155
for i in self.Tietze():
156
A = identity_matrix(R, n-_sage_const_1 )
157
if i > _sage_const_0 :
158
A[i-_sage_const_1 , i-_sage_const_1 ] = -t
159
if i > _sage_const_1 :
160
A[i-_sage_const_1 , i-_sage_const_2 ] = t
161
if i < n-_sage_const_1 :
162
A[i-_sage_const_1 , i] = _sage_const_1
163
if i < _sage_const_0 :
164
A[-i-_sage_const_1 , -i-_sage_const_1 ] = -t**(-_sage_const_1 )
165
if -i > _sage_const_1 :
166
A[-i-_sage_const_1 , -i-_sage_const_2 ] = _sage_const_1
167
if -i < n-_sage_const_1 :
168
A[-i-_sage_const_1 , -i] = t**(-_sage_const_1 )
169
M = M * A
170
return M
171
172
173
174
175
176
def __burau_matrix_unitary__(self, var='s'):
177
"""
178
Return the unitary form of the Burau matrix of the braid according to
179
180
CRAIG C. SQUIE: THE BURAU REPRESENTATION IS UNITARY, PROCEEDINGS OF THE AMERICAN MATHEMATICAL SOCIETY,
181
Volume 90. Number 2, February 1984
182
183
If you don't see this well formatted type
184
185
sage: print local_Braid.__burau_matrix_unitary__.__doc__
186
187
INPUT:
188
189
- "var": string (default: 's'); the name of the variable in the entries of the matrix. The connection with the
190
variable t of the original burau_matrix is t=s**2. See also:
191
print sage.groups.braid.Braid.burau_matrix.__doc__
192
193
OUTPUT:
194
195
The Burau matrix of the braid in the unitary form. It is obtained from the original burau_matrix by a base change
196
in order to preserve a hermitian form. It is a matrix whose entries are Laurent polynomials in the variable "var".
197
The original Burau matrix can be obtained by the method local_Braid.__burau_matrix_wikipedia__
198
199
EXAMPLES:
200
201
sage: sage.groups.braid.BraidGroup_class = local_BraidGroup_class
202
sage: B4 = BraidGroup(4)
203
sage: b1, b2, b3 = B4.gens()
204
sage: b = b1*b2/b3/b2
205
sage: type(b)
206
<class 'lib.local_braid.local_BraidGroup_class_with_category.element_class'>
207
sage: b.__burau_matrix_unitary__()
208
[ 1 - s^2 -s^-1 + s -s^2]
209
[ s^-1 -s^-2 + 1 -s]
210
[ s^-2 -s^-3 0]
211
sage: b.__burau_matrix_unitary__(var='x')
212
[ 1 - x^2 -x^-1 + x -x^2]
213
[ x^-1 -x^-2 + 1 -x]
214
[ x^-2 -x^-3 0]
215
sage:
216
217
compare with the version given on wikipedia:
218
219
sage: b.__burau_matrix_wikipedia__()
220
[ 1 - t -t^-1 + 1 -1]
221
[ 1 -t^-1 + 1 -1]
222
[ 1 -t^-1 0]
223
224
compare with the original method:
225
226
sage: b.burau_matrix()
227
[ 1 - t 0 t - t^2 t^2]
228
[ 1 0 0 0]
229
[ 0 0 1 0]
230
[ 0 t^-2 -t^-2 + t^-1 -t^-1 + 1]
231
sage: b.burau_matrix(reduced=True)
232
[ 0 -t + t^2 -t^2]
233
[ 0 1 - t + t^2 -t^2]
234
[ t^-2 -t^-2 + t^-1 - t + t^2 -t^-1 + 1 - t^2]
235
sage:
236
237
REFERENCES:
238
239
- Coxeter, H.S.M: "Factor groups of the braid groups, Proceedings of the Fourth Candian Mathematical Congress
240
(Vancover 1957), pp. 95-122".
241
242
- C. C. Squier:`THE BURAU REPRESENTATION IS UNITARY`, PROCEEDINGS OF THE
243
AMERICAN MATHEMATICAL SOCIETY
244
Volume 90. Number 2, February 1984
245
- Tyakay Venkataramana: Image of the Burau Representation at $d$-th Roots of unity. ANNALS OF MATHEMATICS MAY 2014
246
247
AUTHOR
248
249
- Sebastian Oehms, Oct. 2016
250
251
"""
252
253
BurauOri = self.__burau_matrix_wikipedia__( )
254
d = BurauOri.dimensions()[_sage_const_0 ]
255
oriDomain = LaurentPolynomialRing(IntegerRing(), names=('t',)); (t,) = oriDomain._first_ngens(1)
256
newDomain = LaurentPolynomialRing(IntegerRing(), var)
257
s = newDomain.gen()
258
subsVar = oriDomain.hom( [s**_sage_const_2 ], codomain = newDomain )
259
260
BurauMat = matrix(d,d, lambda i,j: subsVar(BurauOri[i,j] ) )
261
transformP = matrix( newDomain, d,d , lambda i, j: _sage_const_0 )
262
transformPI = matrix( newDomain, d,d , lambda i, j: _sage_const_0 )
263
for i in range(d):
264
transformP[i,i]=s**(i+_sage_const_1 )
265
transformPI[i,i]=s**(-i-_sage_const_1 )
266
res = transformPI * BurauMat * transformP
267
return res
268
269
270
def burau_matrix(self, var='t', reduced=False, version='default'):
271
"""
272
This method is a modification of the original burau_matrix-method. It contains an additional keyword-parameter
273
"version". If this keyword is not set or is set to the value 'default' it behaves like the original one.
274
275
If you don't see this well formatted type:
276
277
sage: print local_Braid.burau_matrix.__doc__
278
279
To read the original docstring type:
280
281
sage: print Braid.burau_matrix.__doc__
282
283
INPUT:
284
285
- "var": string (default: 't'); the name of the variable in the entries of the matrix. See also:
286
print sage.groups.braid.Braid.burau_matrix.__doc__
287
- "reduced": boolean (default: 'False'); whether to return the reduced or unreduced Burau representation.
288
Note: if version is set to a value different from 'default' this keyword is ignored and treated
289
as set to 'True' (this means: no unreduced form for other versions)
290
- "version": string (default = 'default' ). The following values are possible
291
292
- "default" the method behaves like the original one. For more information on this see
293
sage: print Braid.burau_matrix.__doc__
294
295
- "unitary" gives the unitary form according to Squier. For more information on this see
296
sage: print local_Braid.__burau_matrix_unitary__.__doc__
297
298
- any value else gives the reduced form given on wikipedia. For more information on this see
299
sage: print local_Braid.__burau_matrix_wikipedia__.__doc__
300
301
OUTPUT:
302
303
The Burau matrix of the braid. It is a matrix whose entries are Laurent polynomials in the variable "var".
304
305
EXAMPLES:
306
307
sage: sage.groups.braid.BraidGroup_class = local_BraidGroup_class
308
sage: B4 = BraidGroup(4)
309
sage: b1, b2, b3 = B4.gens()
310
sage: b = b1*b2/b3/b2
311
sage: type(b)
312
<class 'lib.local_braid.local_BraidGroup_class_with_category.element_class'>
313
sage: b.burau_matrix()
314
[ 1 - t 0 t - t^2 t^2]
315
[ 1 0 0 0]
316
[ 0 0 1 0]
317
[ 0 t^-2 -t^-2 + t^-1 -t^-1 + 1]
318
sage: b.burau_matrix(version='unitary')
319
[ 1 - t^2 -t^-1 + t -t^2]
320
[ t^-1 -t^-2 + 1 -t]
321
[ t^-2 -t^-3 0]
322
sage: b.burau_matrix(version='wiki')
323
[ 1 - t -t^-1 + 1 -1]
324
[ 1 -t^-1 + 1 -1]
325
[ 1 -t^-1 0]
326
sage: b.burau_matrix(version='wiki', reduced=True)
327
[ 1 - t -t^-1 + 1 -1]
328
[ 1 -t^-1 + 1 -1]
329
[ 1 -t^-1 0]
330
sage: b.burau_matrix(version='wiki', reduced=False)
331
[ 1 - t -t^-1 + 1 -1]
332
[ 1 -t^-1 + 1 -1]
333
[ 1 -t^-1 0]
334
sage: b.burau_matrix(reduced=True)
335
[ 0 -t + t^2 -t^2]
336
[ 0 1 - t + t^2 -t^2]
337
[ t^-2 -t^-2 + t^-1 - t + t^2 -t^-1 + 1 - t^2]
338
sage: b.burau_matrix(var='s', version='unitary')
339
[ 1 - s^2 -s^-1 + s -s^2]
340
[ s^-1 -s^-2 + 1 -s]
341
[ s^-2 -s^-3 0]
342
sage:
343
344
345
AUTHOR
346
347
- Sebastian Oehms, Oct. 2016
348
349
"""
350
351
if version == 'default':
352
return sage.groups.braid.Braid.burau_matrix(self, var=var, reduced=reduced )
353
elif version == 'unitary':
354
return self.__burau_matrix_unitary__(var=var)
355
else:
356
return self.__burau_matrix_wikipedia__(var=var)
357
358
359
360
361
class local_BraidGroup_class(BraidGroup_class):
362
"""
363
This Class contains extensions to the sage BraidGroup class.
364
365
If you don't see this well formatted type:
366
367
sage: print local_BraidGroup_class.__doc__
368
369
New methods:
370
371
- __unitary_form__
372
373
Modified:
374
375
. Element Class is local_Braid instead of Braid. This contains extension of the burau_matrix -method
376
For more information type:
377
378
sage: print local_Braid.__doc__
379
380
AUTHOR
381
382
- Sebastian Oehms, Oct. 2016
383
384
"""
385
Element = local_Braid
386
387
def __unitary_form__( self, var='s' ):
388
"""
389
Returns the hermitian form with respect to the __unitary_burau_matrix__ of the Element Class
390
391
If you don't see this well formatted type:
392
393
sage: print local_BraidGroup_class.__unitary_form__.__doc__
394
395
The hermitian form returned by this method is kept invariant by the unitary Burau matrices returned by the
396
local_Braid -method burau_matrix() setting the version keyword to 'unitary'
397
398
For more information on the unitary Burau matrices type
399
400
sage: print local_Braid.__burau_matrix_unitary__.__doc__
401
sage: print local_Braid.burau_matrix.__doc__
402
403
INPUT:
404
405
- "var": string (default: 's'); the name of the variable in the entries of the matrix of the unitary form.
406
407
OUTPUT:
408
409
The hermitian form as a quadratic matrix whose entries are Laurent polynomials in the variable "var".
410
411
EXAMPLES:
412
413
sage: sage.groups.braid.BraidGroup_class = local_BraidGroup_class
414
sage: B4 = BraidGroup(4)
415
sage: B4.__unitary_form__()
416
[s^-1 + s -1 0]
417
[ -1 s^-1 + s -1]
418
[ 0 -1 s^-1 + s]
419
sage:
420
sage:
421
sage: B4.__unitary_form__(var='x')
422
[x^-1 + x -1 0]
423
[ -1 x^-1 + x -1]
424
[ 0 -1 x^-1 + x]
425
sage:
426
427
REFERENCES:
428
429
- Coxeter, H.S.M: "Factor groups of the braid groups, Proceedings of the Fourth Candian Mathematical Congress
430
(Vancover 1957), pp. 95-122".
431
432
- C. C. Squier:`THE BURAU REPRESENTATION IS UNITARY`, PROCEEDINGS OF THE
433
AMERICAN MATHEMATICAL SOCIETY
434
Volume 90. Number 2, February 1984
435
436
AUTHOR
437
438
- Sebastian Oehms, Oct. 2016
439
440
"""
441
R = LaurentPolynomialRing(IntegerRing(), var)
442
t = R.gen()
443
n = self.strands()
444
M = (t+t**(-_sage_const_1 ))*identity_matrix(R, n-_sage_const_1 )
445
for i in range(n-_sage_const_2 ):
446
M[i,i+_sage_const_1 ] =-_sage_const_1
447
M[i+_sage_const_1 ,i] =-_sage_const_1
448
return M
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465