#LEZIONE 3: Sessione GAP # Group Actions (Cfr. HOWTO GAP) g:=SymmetricGroup(3); Orbit(g,1,OnPoints); Orbit(g,[1,2],OnSets); Orbit(g,[1,2],OnTuples); Orbit(g,[1,1],OnTuples); Stabilizer(g,2,OnPoints); Orbits(g,Cartesian([1..3],[1..3]),OnTuples); Size(last); g:=SymmetricGroup(5); Orbits(g,[[1,2]],OnSets); #Funzioni di insiemi Intersection([1,3],[2,3]); Intersection([1,3],[2,4]); #Definiamo una funzione bool:=function(x,y) return Intersection(x,y)=[]; end; bool([1,2],[3,4]); bool([1,2],[1,4]); #Il package Grape LoadPackage("Grape"); #Costruire un grafo con la funzione Graph dall'azione di un gruppo e da una funzione booleana sulle coppie di vertici. (Manuale Grape) Petersen:=Graph(SymmetricGroup(5),[[1,2]],OnSets,function(x,y) return Intersection(x,y)=[];end); #Costruire un grafo con la funzione Graph da una matrice di adiacenza. (Manuale Grape) A:=[ [0, 1, 0, 0, 1, 1, 0, 0, 0, 0], [1, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 1, 0, 1, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 1, 0, 0, 0, 1, 0], [1, 0, 0, 1, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 1, 0, 0, 1], [0, 1, 0, 0, 0, 1, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 1], [0, 0, 0, 0, 1, 1, 0, 0, 1, 0] ]; Petersen2:= Graph( Group(()), [1..10], OnPoints, function(x,y) return A[x][y]=1; end, true ); B:=[[0, 0, 1, 1, 0, 1, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0, 1, 0, 0, 0], [1, 0, 0, 0, 1, 0, 0, 1, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 1, 0, 0, 1], [0, 1, 0, 0, 0, 1, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 1], [0, 0, 0, 0, 1, 1, 0, 0, 1, 0]]; Petersen3:= Graph( Group(()), [1..10], OnPoints, function(x,y) return B[x][y]=1; end, true ); #Esploriamo i grafi in Gap con le funzioni del cap. 3 del manuale di Grape Girth(Petersen2); Girth(Petersen3); #Testiamo un isomorfimo tra grafi (Manuale Grape, cap. 8) IsIsomorphicGraph(Petersen,Petersen3); #Costruiamo un isomorfismo tra grafi isomorfi GraphIsomorphism(Petersen,Petersen3); #Calcoliamo la matrice di adiacenza di un grafo Pet:=CollapsedAdjacencyMat(Group(()),Petersen); Pet3:=CollapsedAdjacencyMat(Group(()),Petersen3); perm:=GraphIsomorphism(Petersen,Petersen3); #Verifichiamo che l'simorfismo trasforma una matrice di adiacenza nell'altra PPP:=PermutationMat(perm,10); Pet3=Inverse(PPP)*Pet*PPP;