Sharedgraphe-dechange.sageOpen in CoCalc
Code for worksheet
#W est la liste des variables correspondants à les coordonnées de Plücker
#Les éléments sont de la form ((a,b,c),): c'est à dire, c'est un 1-uplet,
#qui est constitué d'un triplet.

Tp=Subsets(range(7),k=3).list()
W=[(tuple(sorted(x)),) for x in Tp]

for i in range(5):
    W.remove(((i,i+1,i+2),))
W.remove(((0,5,6),))
W.remove(((0,1,6),))

def addm(a,u):
    return tuple(sorted([(a[0 ]+u)%7 ,(a[1 ]+u)%7 ,(a[2 ]+u)%7] ))

def miss(u):
    for i in range(7):
       if i not in u[0] and i not in u[1]:
          return i

#V est le tau-orbite qui correspond au sommet de degré trois
#indexé comme dans JKS
v=((1,3,5),(0,2,4))
V=[(addm(v[0],i),addm(v[1],i)) for i in range(7)]


# U est la liste des autres variables qui ne sont pas des Plückers
# elles sont indexées comme dans Jensen-King-Su
u=((0,2,4),(1,3,5))
U=[ (addm(u[0],i),addm(u[1],i))
    for i in range(7) ]


T=W+U+V #la liste des variables d'amas

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),
(0,4,5),(0,1,5),(2,3,5),(0,2,3)) #liste de Plückers compatibles avec u
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),
(0,3,4)) #liste de Plückers compatibles avec v



def compshort(x,y): #décider si deux Plückers sont compatibles
    if x==y:
        return False
    xprime=[i for i in x if i not in y]
    yprime=[i for i in y if i not in x]
    m=min(xprime)
    M=max(xprime)
    n=min(yprime)
    N=max(yprime)
    if m<n:
        if min([i for i in xprime if i>n]+[8])<N:
            return False
    if n<m:
        if min([i for i in yprime if i>m]+[8])<M:
            return False
    return True

def comp(x,y): #décider si deux variables d'amas sont compatibles
    if len(x)==len(y)==1:
        return compshort(x[0],y[0])
    if len(x)==len(y)==2:
        if x in U and y==(x[0],addm(x[1],-2)):
            return true
        if x in U and y==(addm(x[0],2),x[1]):
            return true
        if x in U and y==(addm(x[0],2),addm(x[1],2)):
            return true
        if x in U and y==(addm(x[0],-2),addm(x[1],-2)):
            return true
        if x in V and y==(x[0],addm(x[1],2)):
            return true
        if x in V and y==(addm(x[0],-2),x[1]):
            return true
        return false
    if len(x)==2 and len(y)==1:
        if x in U:
            d=miss(x)
	    if addm(y[0],-d-1) in cu:
	        return true
        if x in V:
            d=miss(x)
	    if addm(y[0],-d-1) in cv:
	        return true
        return false
    if len(y)==2 and len(x)==1:
        if y in U:
            d=miss(y)
	    if addm(x[0],-d-1) in cu:
	        return true
        if y in V:
            d=miss(y)
	    if addm(x[0],-d-1) in cv:
	        return true
        return false

G=Graph([T,comp]) #le graphe de compatibilité
D=G.clique_complex() #complexe amassée

def adj(x,y):
   return len([i for i in x if i in y])==5

H=Graph([[x.tuple() for x in D.facets()],adj]) #graphe d'échange de l'algèbre