CoCalc Shared Filesgraphe-dechange.sageOpen in CoCalc with one click!
Authors: Franco Saliola, Hugh Thomas
Views : 17
Description: code for worksheet
1
#W est la liste des variables correspondants à les coordonnées de Plücker
2
#Les éléments sont de la form ((a,b,c),): c'est à dire, c'est un 1-uplet,
3
#qui est constitué d'un triplet.
4
5
Tp=Subsets(range(7),k=3).list()
6
W=[(tuple(sorted(x)),) for x in Tp]
7
8
for i in range(5):
9
W.remove(((i,i+1,i+2),))
10
W.remove(((0,5,6),))
11
W.remove(((0,1,6),))
12
13
def addm(a,u):
14
return tuple(sorted([(a[0 ]+u)%7 ,(a[1 ]+u)%7 ,(a[2 ]+u)%7] ))
15
16
def miss(u):
17
for i in range(7):
18
if i not in u[0] and i not in u[1]:
19
return i
20
21
#V est le tau-orbite qui correspond au sommet de degré trois
22
#indexé comme dans JKS
23
v=((1,3,5),(0,2,4))
24
V=[(addm(v[0],i),addm(v[1],i)) for i in range(7)]
25
26
27
# U est la liste des autres variables qui ne sont pas des Plückers
28
# elles sont indexées comme dans Jensen-King-Su
29
u=((0,2,4),(1,3,5))
30
U=[ (addm(u[0],i),addm(u[1],i))
31
for i in range(7) ]
32
33
34
T=W+U+V #la liste des variables d'amas
35
36
cu=((0,1,3),(2,4,5),(1,4,5), (2,3,6), (0,1,4), (1,4,6), (0,4,6), (1,5,6),
37
(0,4,5),(0,1,5),(2,3,5),(0,2,3)) #liste de Plückers compatibles avec u
38
cv=((0,3,5),(3,5,6),(0,4,5),(1,2,5),(0,2,6),(1,2,4),(0,2,5),(0,1,5),(1,3,4),
39
(0,3,4)) #liste de Plückers compatibles avec v
40
41
42
43
def compshort(x,y): #décider si deux Plückers sont compatibles
44
if x==y:
45
return False
46
xprime=[i for i in x if i not in y]
47
yprime=[i for i in y if i not in x]
48
m=min(xprime)
49
M=max(xprime)
50
n=min(yprime)
51
N=max(yprime)
52
if m<n:
53
if min([i for i in xprime if i>n]+[8])<N:
54
return False
55
if n<m:
56
if min([i for i in yprime if i>m]+[8])<M:
57
return False
58
return True
59
60
def comp(x,y): #décider si deux variables d'amas sont compatibles
61
if len(x)==len(y)==1:
62
return compshort(x[0],y[0])
63
if len(x)==len(y)==2:
64
if x in U and y==(x[0],addm(x[1],-2)):
65
return true
66
if x in U and y==(addm(x[0],2),x[1]):
67
return true
68
if x in U and y==(addm(x[0],2),addm(x[1],2)):
69
return true
70
if x in U and y==(addm(x[0],-2),addm(x[1],-2)):
71
return true
72
if x in V and y==(x[0],addm(x[1],2)):
73
return true
74
if x in V and y==(addm(x[0],-2),x[1]):
75
return true
76
return false
77
if len(x)==2 and len(y)==1:
78
if x in U:
79
d=miss(x)
80
if addm(y[0],-d-1) in cu:
81
return true
82
if x in V:
83
d=miss(x)
84
if addm(y[0],-d-1) in cv:
85
return true
86
return false
87
if len(y)==2 and len(x)==1:
88
if y in U:
89
d=miss(y)
90
if addm(x[0],-d-1) in cu:
91
return true
92
if y in V:
93
d=miss(y)
94
if addm(x[0],-d-1) in cv:
95
return true
96
return false
97
98
G=Graph([T,comp]) #le graphe de compatibilité
99
D=G.clique_complex() #complexe amassée
100
101
def adj(x,y):
102
return len([i for i in x if i in y])==5
103
104
H=Graph([[x.tuple() for x in D.facets()],adj]) #graphe d'échange de l'algèbre
105
106
107
108