GAP:OneIsomorphicToGroup

Function type
The function takes as input a finite group and outputs a list of finite group.

Behavior
The function outputs all finite groups (up to isomorphism of groups) that are 1-isomorphic to the input group.

Packages used
The function requires the Grape package.

Related functions

 * OneIsomorphismCheck
 * DirectedPowerGraph
 * UndirectedPowerGraph

Idea
The key idea is to use the fact that for finite groups, there are multiple equivalent definitions of 1-isomorphic. In particular:


 * finite groups are 1-isomorphic iff their directed power graphs are isomorphic
 * undirected power graph determines directed power graph for finite group

Code
DirectedPowerGraph := function(G) local L,o,f; o := Order(G); L := AsList(Set(G)); f := function(x,y) return(IsSubgroup(Group(L[x]),Group(L[y]))); end;; return(Graph(TrivialSubgroup(SymmetricGroup(o)),[1..o],OnPoints,f,true)); end;;

OrderStatistics := function(G) local L,D; L := List(Set(G),Order); D := DivisorsInt(Order(G)); return(List(D,x->Length(Filtered(L,y->x=y)))); end;;

OrderCumPowerStatistics := function(G) local L,D,E; D := DivisorsInt(Order(G)); L := List(D,a -> Set(List(Set(G),g -> g^a))); return(List(L,A -> List(D,x->Length(Filtered(A,g -> Order(g) = x))))); end;;

OrderCumRootStatistics := function(G) local D;       D := DivisorsInt(Order(G)); return(SortedList(List(Set(G),x -> [Order(x),List(D,d -> Length((Filtered(Set(G),y->y^d = x))))]))); end;;

OneIsomorphicToGroup := function(G) local d,o,op,ocr,L,L1,L2,L3,Gr; d := Order(G); o := OrderStatistics(G); L := Filtered(AllSmallGroups(d),P -> OrderStatistics(P) = o); op := OrderCumPowerStatistics(G); L1 := Filtered(L,P -> OrderCumPowerStatistics(P) = op); ocr := OrderCumRootStatistics(G); L2 := Filtered(L1,P -> OrderCumRootStatistics(P) = ocr); Gr := DirectedPowerGraph(G); return(Filtered(L2,P -> not(GraphIsomorphism(Gr,DirectedPowerGraph(P)) = fail))); end;;