GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
#######################################
#######################################
InstallGlobalFunction(SimplicialNerveOfTwoComplex,
function(K,dim)
local A, Vertices, NrSimplices, Simplices, SimplicesLst, EnumeratedSimplex,
bool, s, VL,x, y, d, i,j,k,l,m,n,RedundantFaces;
##########################
if not Dimension(K)<=2 then
Print("This function can only be applied to 2-dimensional simplicial complexes.\n");
return fail;
fi;
##########################
Vertices:=StructuralCopy(K!.vertices);
VL:=Length(Vertices);
SimplicesLst:=StructuralCopy(K!.simplicesLst);
Apply(SimplicesLst[3], x->SSortedList(x));
SimplicesLst[3]:=SSortedList(SimplicesLst[3]);
if dim>=3 then
SimplicesLst[4]:=[];
for s in SimplicesLst[3] do
i:=s[1];j:=s[2];k:=s[3];
for l in [k+1..VL] do
if
SSortedList([i,j,l]) in SimplicesLst[3] and
SSortedList([i,l,k]) in SimplicesLst[3] and
SSortedList([l,j,k]) in SimplicesLst[3]
then Add(SimplicesLst[4],SSortedList([i,j,k,l])); fi;
od;od;
SimplicesLst[4]:=SSortedList(SimplicesLst[4]);
if Length(SimplicesLst[4])=0 then dim:=2; fi;
fi;
if dim>=4 then
SimplicesLst[5]:=[];
for s in SimplicesLst[4] do
i:=s[1];j:=s[2];k:=s[3];l:=s[4];
for m in [l+1..VL] do
if
SSortedList([m,i,j]) in SimplicesLst[3] and
SSortedList([m,i,k]) in SimplicesLst[3] and
SSortedList([m,i,l]) in SimplicesLst[3] and
SSortedList([m,j,k]) in SimplicesLst[3] and
SSortedList([m,j,l]) in SimplicesLst[3] and
SSortedList([m,k,l]) in SimplicesLst[3]
then Add(SimplicesLst[5],SSortedList([i,j,k,l,m])); fi;
od;od;
SimplicesLst[5]:=SSortedList(SimplicesLst[5]);
if Length(SimplicesLst[5])=0 then dim:=3; fi;
fi;
###########################GOT THIS FAR
if dim>=5 then
SimplicesLst[6]:=[];
for s in SimplicesLst[5] do
i:=s[1];j:=s[2];k:=s[3];l:=s[4];m:=s[5];
for n in [m+1..VL] do
if
SSortedList([n,i,j]) in SimplicesLst[3] and
SSortedList([n,i,k]) in SimplicesLst[3] and
SSortedList([n,i,l]) in SimplicesLst[3] and
SSortedList([n,i,m]) in SimplicesLst[3] and
SSortedList([n,j,k]) in SimplicesLst[3] and
SSortedList([n,j,l]) in SimplicesLst[3] and
SSortedList([n,j,m]) in SimplicesLst[3] and
SSortedList([n,k,l]) in SimplicesLst[3] and
SSortedList([n,k,m]) in SimplicesLst[3] and
SSortedList([n,l,m]) in SimplicesLst[3]
then Add(SimplicesLst[6],SSortedList([i,j,k,l,m,n])); fi;
od;od;
SimplicesLst[6]:=SSortedList(SimplicesLst[6]);
if Length(SimplicesLst[6])=0 then dim:=4; fi;
fi;
if dim>=6 then Print("The function is only implemented up to dimension 5.\n");
return fail;
fi;
for d in [6..dim] do
SimplicesLst[d+1]:=[];
for y in Combinations(Vertices,d+1) do
bool:=true;
for x in Combinations(y,2) do
if A[x[1]][x[2]]=0 then bool:=false; break; fi;
od;
if bool then Add(SimplicesLst[d],y); fi;
od;
SimplicesLst[d+1]:=SSortedList(SimplicesLst[d+1]);
if Length(SimplicesLst[d+1])=0 then dim:=d-1; fi;
od;
##########################
##########################
Simplices:=function(d,k);
return SimplicesLst[d+1][k];
end;
#########################
##########################
NrSimplices:=function(d);
return Length(SimplicesLst[d+1]);
end;
#########################
#########################
EnumeratedSimplex:=function(v);
return PositionSet(SimplicesLst[Length(v)],v);
end;
#########################
Add(SimplicesLst,[]);
return
Objectify(HapSimplicialComplex,
rec(
vertices:=Vertices,
nrSimplices:=NrSimplices,
simplices:=Simplices,
simplicesLst:=SimplicesLst,
enumeratedSimplex:=EnumeratedSimplex,
properties:=[
["dimension",dim]]
));
end);
#####################################################################