Les groupes Croisés (Cross group) des twists platoniques

Calculs, programmes, ... en GAP pour le Rubik's Cube, le Pyraminx, le Skewb, ...
Avatar de l’utilisateur
Morphocode
Crazy
Crazy
Homme
Balance
Messages : 745
Inscription : Lun 25/11/2013 17:06
Localisation : Paris
Contact :

Les groupes Croisés (Cross group) des twists platoniques

Message non lupar Morphocode » Ven 8/03/2024 19:22

Le groupe Croisé du Pyraminx

Pyraminx :
Image


On ignore les orientations, les sommets et les arêtes sont identifiés par un numéro comme indique la fig ci-dessous

Numérotation des pièces :
Image

On définit les 4 rotations comme ceci : (rotations croisées)
Image


On pose : (formules croisées)
K = < XY' | X,Y €{ G ,D , H , P } , sur les sommets >
* K engendre un groupe de permutations des sommets C, par définition C est le groupe Croisé du Pyraminx .

Ka = < XY' | X,Y €{ G ,D , H , P } , sur les arêtes >
* Ka engendre un groupe de permutations des arêtes Ca, par définition Ca est le groupe Croisé des arêtes .


Voici un script en GAP qui permet de trouver C et Ca


Code : Tout sélectionner


#FormuleCroise = < XY' | X,Y rotations croisée >
#Le groupe croisé du pyraminx (tétraèdre :S=4,F=4,A=6)

#le groupe Croisé des sommets (cross vertice)
vG := (9,8,10);
vD := (9,10,7) ;
vH := (8,7,10) ;
vP := (9,7,8) ;
SX := [vG, vD, vH, vP];;
SYp := [vG^-1, vD^-1, vH^-1, vP^-1];;
SXtxt := ['G', 'D', 'H', 'P'];; #rotation
SYptxt := ['g', 'd', 'h', 'p'];; #inverse


#le groupe Croisé des arêtes (Cross edge)
uG := (1,6,3) ;
uD := (2,3,5) ;
uH := (4,5,6) ;
uP := (1,2,4) ;

AX := [uG, uD, uH, uP];;
AYp := [uG^-1, uD^-1, uH^-1, uP^-1];;


# donne une formule-croisée de longueur 2n
RandomCrossFormula := function(n)
 local nombre, permutations, k , formule, m ;
 nombre := List([1..n], i -> RandomList([1..4]));; #[1..4] ==> 4 rotations

 #Print("\n listnombre = ", nombre , "\n" );
 
 permutations := [];
 formule := [];

 for k in nombre do
     
      Append(permutations,[SX[k]]); # pour le calcul
      Append(formule,[SXtxt[k]]); # pour affichage
      
      m :=  RandomList([1..4]);
      while k=m do
            m :=  RandomList([1..4]);     
        od;
      
       Append(permutations, [SYp[m]]);
      Append(formule,[SYptxt[m]]);
         
 od;

 Product(permutations); # calculer le resultat
 
 # affichage
 formule := ReplacedString( formule, "g", "G'" );;
 formule := ReplacedString( formule, "d", "D'" );;
 formule := ReplacedString( formule, "h", "H'" );;
 formule := ReplacedString( formule, "p", "P'" );;
 
 return formule;
end;

Print("\n ", RandomCrossFormula(5) , "\n" );

generators := Set(Arrangements([1..4],2), t -> SX[t[2]] * SYp[t[1]]);; #[1..4] ==> 4 rotations
Print("\n generateur = ", Length(generators) , "\n" );
Cross := Group(generators);;
Print("\n |Cross| = ", Size(Cross) , "\n" );
#IsSimpleGroup( Cross ) ;
Print("\n Cross = ", StructureDescription(Cross) , "\n" );

generators := Set(Arrangements([1..4],2), t -> AX[t[2]] * AYp[t[1]]);; #[1..4] ==> 4 rotations
Print("\n generateur = ", Length(generators) , "\n" );
Cross := Group(generators);;
Print("\n |Cross-edge| = ", Size(Cross) , "\n" );
#IsSimpleGroup( Cross ) ;
Print("\n Cross-edge = ", StructureDescription(Cross) , "\n" );





On trouve :
Image

Commentaire : C2 x C2 = Z2 x Z2 = le groupe 4-Klein assez célèbre
A5 = Premier groupe simple non abélien ==> donc célèbre aussi :oui:
Image

Avatar de l’utilisateur
Morphocode
Crazy
Crazy
Homme
Balance
Messages : 745
Inscription : Lun 25/11/2013 17:06
Localisation : Paris
Contact :

Re: Les groupes Croisés (Cross group) des twists platoniques

Message non lupar Morphocode » Ven 8/03/2024 19:51

Le groupe Croisé du Rubik's Cube

Rubik's Cube :
Image

On ignore les orientations, les sommets et les arêtes sont identifiés par un numéro comme indique la fig ci-dessous

Numérotation des pièces :
Image

On définit les 6 rotations comme ceci :
Image

On pose :
K = < XY' | X,Y €{ H,B,A,P,G,D } , sur les sommets >
* K engendre un groupe de permutations des sommets C, par définition C est le groupe Croisé du Rubik's Cube .

Ka= < XY' | X,Y €{ H,B,A,P,G,D } , sur les arêtes >
* Ka engendre un groupe de permutations des arêtes Ca, par définition Ca est le groupe Croisé des arêtes .


Voici un script en GAP qui permet de trouver C et Ca


Code : Tout sélectionner


# Cross = < XY' | X,Y rotations croisées = rotations de base >
# (Cube : F=6,S=8,A=12)
# 3  3  4
# 2  H  4
# 2  1  1
# -------
# 6  A  5|7 P  8
# -------
# 7  11 8
# 10 B  12
# 6  9  5

# le groupe Croisé du Rubik's Cube (Croisé sommet)
vH := (1,2,3,4) ;
vB := (5,8,7,6) ;
vA := (1,5,6,2) ;
vP := (4,3,7,8) ;
vG := (2,6,7,3) ;
vD := (1,4,8,5) ;
SX := [vH, vB, vA, vP, vG, vD];
SYp := [vH^-1, vB^-1, vA^-1, vP^-1, vG^-1, vD^-1 ] ;
SXtxt := ['H', 'B', 'A', 'P', 'G', 'D'];
SYptxt := ['h', 'b', 'a', 'p', 'g', 'd'] ; #h=face opposée de H

# le groupe Croisé des arêtes (Croisé arête)
uH := (1,2,3,4);
uB := (9,12,11,10);
uA := (1,5,9,6);
uP := (3,7,11,8);
uG := (2,6,10,7);
uD := (5,4,8,12) ;
AX := [uH, uB, uA, uP, uG, uD];
AYp := [uH^-1, uB^-1, uA^-1, uP^-1, uG^-1, uD^-1 ] ;


# donne une formule-croisée de longueur 2n
RandomCrossFormula := function(n)
 local nombre, permutations, k , formule, m ;
 nombre := List([1..n], i -> RandomList([1..6])); #[1..6] ==> 6 rotations
 permutations := [];
 formule := [];

 for k in nombre do
     
      Append(permutations,[SX[k]]);
      Append(formule,[SXtxt[k]]);
      
      m :=  RandomList([1..6]);
      while k=m do
            m :=  RandomList([1..6]);     
        od;
      
       Append(permutations, [SYp[m]]);
      Append(formule,[SYptxt[m]]);
         
 od;

 Product(permutations);
 
 formule := ReplacedString( formule, "h", "H'" );;
 formule := ReplacedString( formule, "b", "B'" );;
 formule := ReplacedString( formule, "a", "A'" );;
 formule := ReplacedString( formule, "p", "P'" );;
 formule := ReplacedString( formule, "g", "G'" );;
 formule := ReplacedString( formule, "d", "D'" );;
 
 return formule;
end;

#Print("\n ", RandomCrossFormula(5) , "\n" );

generators := Set(Arrangements([1..6],2), t -> SX[t[2]] * SYp[t[1]]);; #[1..6] ==> 6 rotations
Print("\n generateur = ", Length(generators) , "\n" );
Cross := Group(generators);;
Print("\n |Cross| = ", Size(Cross) , "\n" );
IsSimpleGroup( Cross ) ;
Print("\n Cross = ", StructureDescription(Cross) , "\n" );

generators := Set(Arrangements([1..6],2), t -> AX[t[2]] * AYp[t[1]]);; #[1..6] ==> 6 rotations
Cross := Group(generators);;
Print("\n Cross-edge = ", StructureDescription(Cross) , "\n" );






On trouve :
Image

Commentaire : PSL(3,2) = PSL(2,7) = GL(3,2) C'est le groupe simple GS168 à 168 éléments , il y a un seul groupe simple à 168 éléments donc très célèbre
C'est D. SINGMASTER qui a découvert le groupe Croisé du Rubik's Cube

NOTE : il est très simple de construire GS168, c'est un sous groupe de A7 engendré par les deux permutations :
a = (1,2,3,4,5,6,7)
b = (1,2)(3,6)

GS168 = < a, b >
Image

Avatar de l’utilisateur
Morphocode
Crazy
Crazy
Homme
Balance
Messages : 745
Inscription : Lun 25/11/2013 17:06
Localisation : Paris
Contact :

Re: Les groupes Croisés (Cross group) des twists platoniques

Message non lupar Morphocode » Sam 9/03/2024 08:37

Le groupe Croisé du FTO

FTO :
Image


On ignore les orientations, les sommets et les arêtes sont identifiés par un numéro comme indique la fig ci-dessous

Numérotation des pièces :
Image
Image

On définit les 8 rotations comme ceci : (rotations croisées)
Image


On pose : (formules croisées)
K = < XY' | X,Y €{ H,B,A,B,G,D, G , D } , sur les sommets >
* K engendre un groupe de permutations des sommets C, par définition C est le groupe Croisé du FTO .

Ka = < XY' | X,Y €{ H,B,A,B,G,D, G , D } , sur les arêtes >
* Ka engendre un groupe de permutations des arêtes Ca, par définition Ca est le groupe Croisé des arêtes .


Voici un script en GAP qui permet de trouver C et Ca


Code : Tout sélectionner


# Cross = < XY' | X,Y rotations croisées >
# (octaèdre : F=8,S=6,A=12)

# le groupe Croisé du FTO (Croisé sommet)
vH := (1,2,3) ;
vB := (4,5,6) ;
vA := (1,4,2) ;
vP := (3,6,5) ;
vG := (2,4,6) ;
vD := (1,5,4) ;
vL := (1,3,5) ; #L=face opposée à G
vR := (2,6,3) ; #R=face opposée à D
SX := [vH, vB, vA, vP, vG, vD, vL, vR];
SYp := [vH^-1, vB^-1, vA^-1, vP^-1, vG^-1, vD^-1, vL^-1, vR^-1];
SXtxt := ['H', 'B', 'A', 'P', 'G', 'D' , 'L', 'R'];
SYptxt := ['h', 'b', 'a', 'p', 'g', 'd', 'l', 'r'] ;


# le groupe Croisé des arêtes (Arête croisé)
uH := (1,2,3);
uB := (4,5,6);
uA := (1,7,8);
uP := (10,5,11);
uG := (8,6,9);
uD := (7,12,4);
uL := (3,11,12); #L=face opposée à G,
uR := (2,9,10) ; #R=face opposée à D
AX := [uH, uB, uA, uP, uG, uD, uL, uR];
AYp :=  [uH^-1, uB^-1, uA^-1, uP^-1, uG^-1, uD^-1, uL^-1, uR^-1];

# donne une formule-croisée de longueur 2n
RandomCrossFormula := function(n)
 local nombre, permutations, k , formule, m ;
 nombre := List([1..n], i -> RandomList([1..8])); #[1..8] ==> 8 rotations
 permutations := [];
 formule := [];

 for k in nombre do
     
      Append(permutations,[SX[k]]);
      Append(formule,[SXtxt[k]]);
      
      m :=  RandomList([1..8]);
      while k=m do
            m :=  RandomList([1..8]);     
        od;
      
       Append(permutations, [SYp[m]]);
      Append(formule,[SYptxt[m]]);
         
 od;

 Product(permutations);
 
 formule := ReplacedString( formule, "h", "H'" );;
 formule := ReplacedString( formule, "b", "B'" );;
 formule := ReplacedString( formule, "a", "A'" );;
 formule := ReplacedString( formule, "p", "P'" );;
 formule := ReplacedString( formule, "g", "G'" );;
 formule := ReplacedString( formule, "d", "D'" );;
 formule := ReplacedString( formule, "l", "L'" );;
 formule := ReplacedString( formule, "r", "R'" );;
 
 return formule;
end;

#Print("\n ", RandomCrossFormula(5) , "\n" );

generators := Set(Arrangements([1..8],2), t -> SX[t[2]] * SYp[t[1]]) ;; #[1..8] ==> 8 rotations
Print("\n generateur = ", Length(generators) , "\n" );
Cross := Group(generators) ;;
Print("\n |Cross| = ", Size(Cross) , "\n" );
#IsSimpleGroup( Cross ) ;
Print("\n Cross = ", StructureDescription(Cross) , "\n" );

generators := Set(Arrangements([1..8],2), t -> AX[t[2]] * AYp[t[1]]) ;; #[1..8] ==> 8 rotations
Cross := Group(generators) ;;
Print("\n Cross-edge = ", StructureDescription(Cross) , "\n" );






On trouve :
Image

Commentaire : A5 = PSL(2,5)
Image

Avatar de l’utilisateur
Morphocode
Crazy
Crazy
Homme
Balance
Messages : 745
Inscription : Lun 25/11/2013 17:06
Localisation : Paris
Contact :

Re: Les groupes Croisés (Cross group) des twists platoniques

Message non lupar Morphocode » Sam 9/03/2024 09:35

Le groupe Croisé du Megaminx

Megaminx :
Image


On ignore les orientations, les sommets et les arêtes sont identifiés par un numéro comme indique la fig ci-dessous

Numérotation des pièces :
Image
Image

On définit les 12 rotations comme ceci :
Image
Image

On pose :
K = < XY' | X,Y €{ H,B,A,P,G,D, H, B, A, P, G, D } , sur les sommets >
* K engendre un groupe de permutations des sommets C, par définition C est le groupe Croisé du Megaminx .

Ka= < XY' | X,Y €{ H,B,A,P,G,D, H, B, A, P, G, D } , sur les arêtes >
* Ka engendre un groupe de permutations des arêtes Ca, par définition Ca est le groupe Croisé des arêtes .


Voici un script en GAP qui permet de trouver C et Ca


Code : Tout sélectionner


# Cross = < XY' | X,Y cross rotations  >
# (dodécaèdre : F=12,S=20,A=30)
# le groupe Croisé du Megaminx

vH := (1,2,3,4,5);
vB := (6,7,8,9,10);
vA := (1,6,10,11,2);
vP := (5,4,12,13,14);
vG := (2,11,16,15,3);
vD := (1,5,14,7,6);
vh := (19,18,20,9,8); #h=face opposée à H
vb := (4,3,15,17,12);
va := (12,17,18,19,13);
vp := (11,10,9,20,16);
vg := (14,13,19,8,7);
vd  := (15,16,20,18,17);
SX := [vH, vB, vA, vP, vG, vD, vh, vb, va, vp, vg, vd];;
SYp := [vH^-1, vB^-1, vA^-1, vP^-1, vG^-1, vD^-1, vh^-1, vb^-1, va^-1, vp^-1, vg^-1, vd^-1];;
SXtxt := ['H', 'B', 'A', 'P', 'G', 'D', 'h', 'b', 'a', 'p', 'g', 'd'] ;;
SYptxt := ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'x', 'y', 'z'] ;;
# a=opposé de A


# le groupe Croisé d'arêtes du Megaminx
uH := (1,2,3,4,5);
uB := (6,7,8,9,10);
uA := (1,11,10,12,13);
uP := (4,15,16,17,14);
uG := (2,13,18,19,20);
uD := (5,14,21,6,11);
uh := (22,23,8,24,25);
ub := (3,20,26,27,15);
ua := (16,28,22,30,27);
up := (12,9,24,29,18);
ug := (21,7,23,28,17);
ud := (19,29,25,30,26);

AX := [uH, uB, uA, uP, uG, uD, uh, ub, ua, up, ug, ud ];;
AYp := [uH^-1, uB^-1, uA^-1, uP^-1, uG^-1, uD^-1, uh^-1, ub^-1, ua^-1, up^-1, ug^-1, ud^-1 ];;

# donne une formule-croisée de longueur 2n
RandomCrossFormula := function(n)
 local nombre, permutations, k , formule, m ;
 nombre := List([1..n], i -> RandomList([1..12])); #[1..12] ==> 12 rotations
 permutations := [];
 formule := [];

 for k in nombre do
     
      Append(permutations,[SX[k]]);
      Append(formule,[SXtxt[k]]);
      
      m :=  RandomList([1..12]);
      while k=m do
            m :=  RandomList([1..12]);     
        od;
      
       Append(permutations, [SYp[m]]);
      Append(formule,[SYptxt[m]]);
         
 od;

 Product(permutations);
 
 formule := ReplacedString( formule, "1", "H'" );;
 formule := ReplacedString( formule, "2", "B'" );;
 formule := ReplacedString( formule, "3", "A'" );;
 formule := ReplacedString( formule, "4", "P'" );;
 formule := ReplacedString( formule, "5", "G'" );;
 formule := ReplacedString( formule, "6", "D'" );;
 formule := ReplacedString( formule, "7", "h'" );;
 formule := ReplacedString( formule, "8", "b'" );;
 formule := ReplacedString( formule, "9", "a'" );;
 formule := ReplacedString( formule, "x", "p'" );;
 formule := ReplacedString( formule, "y", "g'" );;
 formule := ReplacedString( formule, "z", "d'" );;
 
 return formule;
end;

#Print("\n ", RandomCrossFormula(5) , "\n" );

generators := Set(Arrangements([1..12],2), t -> SX[t[2]] * SYp[t[1]]);;#[1..12] ==> 12 rotations
Print("\n generateur = ", Length(generators) , "\n" );
Cross := Group(generators);;
Print("\n |Cross| = ", Size(Cross) , "\n" );
Print("\n Cross = ", StructureDescription(Cross) , "\n" );

generators := Set(Arrangements([1..12],2), t -> AX[t[2]] * AYp[t[1]]);;#[1..12] ==> 12 rotations
Cross := Group(generators);;
Print("\n Cross-edge = ", StructureDescription(Cross) , "\n" );






On trouve :
Image
Image

Avatar de l’utilisateur
Morphocode
Crazy
Crazy
Homme
Balance
Messages : 745
Inscription : Lun 25/11/2013 17:06
Localisation : Paris
Contact :

Re: Les groupes Croisés (Cross group) des twists platoniques

Message non lupar Morphocode » Sam 9/03/2024 11:15

Le groupe Croisé du Master Icosamate

Master Isosamate :
Image


On ignore les orientations, les sommets et les arêtes sont identifiés par un numéro comme indique la fig ci-dessous

Numérotation des sommets :
Image

Numérotation des arêtess :
Image

On définit les 12 rotations comme ceci { H,B,A,P,G,D, H, B, A, P, G, D } H=face opposée de H:
Image

On pose : (rotation par rapport aux sommets)
K = < XY' | X,Y €{ H,B,A,P,G,D, H, B, A, P, G, D } , sur les sommets >
* K engendre un groupe de permutations des sommets C, par définition C est le groupe Croisé du Icosamate .

Ka= < XY' | X,Y €{ H,B,A,P,G,D, H, B, A, P, G, D } , sur les arêtes >
* Ka engendre un groupe de permutations des arêtes Ca, par définition Ca est le groupe Croisé des arêtes .


Voici un script en GAP qui permet de trouver C et Ca


Code : Tout sélectionner


# Cross = < XY' | X,Y rotations  croisées>
# Cross icosamate (icosaèdre : F=20, S=12 ,A=30)

vH := (2,3,4,5,6);
vB := (1,3,10,9,5);
vA := (1,6,12,11,3);
vP := (1,4,9,8,6);
vG := (1,2,11,10,4);
vD := (1,5,8,12,2);
vh := (12,8,9,10,11); #h=face opposée de H
vb := (8,7,11,2,6);
va := (4,10,7,8,5);
vp := (2,12,7,10,3);
vg := (12,6,5,9,7);
vd := (9,4,3,11,7);
SX := [vH, vB, vA, vP, vG, vD, vh, vb, va, vp, vg, vd];;
SYp := [vH^-1, vB^-1, vA^-1, vP^-1, vG^-1, vD^-1, vh^-1, vb^-1, va^-1, vp^-1, vg^-1, vd^-1];;
SXtxt :=   ['H', 'B', 'A', 'P', 'G', 'D', 'h', 'b', 'a', 'p', 'g', 'd'] ;; h=opposé de H
SYptxt := ['1',  '2', '3', '4', '5', '6',  '7', '8', '9', 'x', 'y', 'z'] ;; #7=inverse de h

# Cross icosamate aretes
uH := (16,20,19,18,17);
uB := (2,28,14,25,4);
uA := (2,5,22,11,29);
uP := (5,3,26,13,23);
uG := (1,30,15,27,3);
uD := (1,4,24,12,21);
uh := (11,12,13,14,15);
ub := (30,16,23,7,10);
ua := (27,9,7,24,18);
up := (28,20,21,6,9);
ug := (22,17,25,8,6);
ud := (29,10,8,26,19);
AX := [uH, uB, uA, uP, uG, uD, uh, ub, ua, up, ug, ud ];;
AYp := [uH^-1, uB^-1, uA^-1, uP^-1, uG^-1, uD^-1, uh^-1, ub^-1, ua^-1, up^-1, ug^-1, ud^-1 ];;
 
 
# donne une formule-croisée de longueur 2n
RandomCrossFormula := function(n)
 local nombre, permutations, k , formule, m ;
 nombre := List([1..n], i -> RandomList([1..12])); #[1..12] ==> 12 rotations
 permutations := [];
 formule := [];

 for k in nombre do
     
      Append(permutations,[SX[k]]);
      Append(formule,[SXtxt[k]]);
      
      m :=  RandomList([1..12]);
      while k=m do
            m :=  RandomList([1..12]);     
        od;
      
       Append(permutations, [SYp[m]]);
      Append(formule,[SYptxt[m]]);
         
 od;

 Product(permutations);
 
 formule := ReplacedString( formule, "1", "H'" );;
 formule := ReplacedString( formule, "2", "B'" );;
 formule := ReplacedString( formule, "3", "A'" );;
 formule := ReplacedString( formule, "4", "P'" );;
 formule := ReplacedString( formule, "5", "G'" );;
 formule := ReplacedString( formule, "6", "D'" );;
 formule := ReplacedString( formule, "7", "h'" );;
 formule := ReplacedString( formule, "8", "b'" );;
 formule := ReplacedString( formule, "9", "a'" );;
 formule := ReplacedString( formule, "x", "p'" );;
 formule := ReplacedString( formule, "y", "g'" );;
 formule := ReplacedString( formule, "z", "d'" );;
 
 return formule;
end;

Print("\n ", RandomCrossFormula(5) , "\n" );


generators := Set(Arrangements([1..12],2), t -> SX[t[2]] * SYp[t[1]]);;  #[1..12] ==> 12 rotations
Print("\n generateur = ", Length(generators) , "\n" );
Cross := Group(generators);;
Print("\n |Cross| = ", Size(Cross) , "\n" );
IsSimpleGroup( Cross ) ;
Transitivity(Cross);
Print("\n Cross = ", StructureDescription(Cross) , "\n" );

generators := Set(Arrangements([1..12],2), t -> AX[t[2]] * AYp[t[1]]);; #[1..12] ==> 12 rotations
Cross := Group(generators);;
Print("\n Cross-edge = ", StructureDescription(Cross) , "\n" );



On trouve :
Image

Commentaire : M12 est le groupe Mathieu 12 , très célèbre, car c'est un groupe simple sporadique, il n'y a que 26 groupes simples sporadiques !!
C'est J. CONWAY qui a découvert le groupe Croisé du Master-Icosamate.

M12 est 5-transitif ==> |M12| = 12 .11 .10 .9 .8 = 95040

Rappel : il est très simple de construire M12, c'est un sous groupe de S12 engendré par les deux permutations :
a = (1,12)(2,11)(3,10)(4,9)(5,8)(6,7)
b = (2,3,5,9,8,10,6,11,4,7,12)

M12 = < a, b >
Image