# coding: utf8 def fonctionCoucouCoxeter(): print ("Fichier coxeter.sage chargé") fonctionCoucouCoxeter() def deuxMouvement(rep,k): """ Prend en entrée la liste rep (liste d'entiers) et l'entier k. Renvoie la liste rep avec les lettres en position k et k+1 échangées. Attention, les positions sont prises de la droite vers la gauche. Attention, ne vérifie pas la validité du mouvement. """ if k>len(rep)-1 or k<=0: print("Position invalide") return [] res=deepcopy(rep) res[-k]=rep[-(k+1)] res[-(k+1)]=rep[-k] return(res) def troisMouvement(rep,k): """ Prend en entrée la liste rep (liste d'entiers) et l'entier k. Renvoie la liste rep avec un mouvement de tresse (i_k+2,i_k+1,i_k)->(i_k+1,i_k,i_k+1). Attention, les positions sont prises de la droite vers la gauche. Attention, ne vérifie pas la validité du mouvement. """ if k>len(rep)-2 or k<=0: print("Position invalide") return[] res=deepcopy(rep) res[-k]=rep[-(k+1)] res[-(k+1)]=rep[-k] res[-(k+2)]=rep[-(k+1)] return(res) def mouvementsPossibles(rep,W): """ Prend en entrée la liste rep (liste d'entiers) et le groupe de Weyl W et calcule l'ensemble des 2 et 3-mouvements possibles à partir du représentant rep. Attention, ne fonctionne qu'avec des groupes de type A,D ou E. Attention positions numérotées de la droite à la gauche. """ listeMouvementsPossibles=[] [Q0,Q1]=creerCarquois(W) listeAretesNonOrientees=[] for i in Q1: listeAretesNonOrientees=listeAretesNonOrientees+[set(i)] #On convertit les tuples des arêtes en ensemble pour oublier l'ordre #comme dans le diagramme de Dynkin for i in range(1,len(rep)): if {rep[-i],rep[-(i+1)]} in listeAretesNonOrientees: if i