# Create a poset in GAP whose order complex is a torus
# To run, "Read" the file into an XGAP or Gap.app session.

# The poset is the face lattice of a regular CW subdivision of the torus

# Create a poset object
P:=GraphicPoset("Pic", 600, 400);

# Gap internally numbers levels backwards from what is natural for us
CreateLevel(P, 0, "2");
CreateLevel(P, 1, "1");
CreateLevel(P, 2, "0");

C2:=[];
C1:=[];
C0:=[];

# Create elements corresponding to 0-cells and 2-cells
for i in [1..4] do
  xpos:=100+70*i;
  C2[i]:=Vertex(P, 0, rec(levelparam:=0,label:=[CHAR_INT(64+i)],x:=xpos));
  C0[i]:=Vertex(P, 0, rec(levelparam:=2,label:=[CHAR_INT(96+i)],x:=xpos));
od;

# Create elements corresponding to 1-cells
for i in [1..8] do
  xpos:=50+50*i;
  C1[i]:=Vertex(P, 0, rec(levelparam:=1,label:=String(i),x:=xpos));
od;

# Add cover relations between 1-cells and 2-cells
Edge(P, C2[1], C1[1]);
Edge(P, C2[1], C1[2]);
Edge(P, C2[1], C1[3]);
Edge(P, C2[1], C1[4]);

Edge(P, C2[2], C1[1]);
Edge(P, C2[2], C1[5]);
Edge(P, C2[2], C1[3]);
Edge(P, C2[2], C1[7]);

Edge(P, C2[3], C1[2]);
Edge(P, C2[3], C1[6]);
Edge(P, C2[3], C1[4]);
Edge(P, C2[3], C1[8]);

Edge(P, C2[4], C1[5]);
Edge(P, C2[4], C1[6]);
Edge(P, C2[4], C1[7]);
Edge(P, C2[4], C1[8]);

# Add cover relations between 0-cells and 1-cells
Edge(P, C1[1], C0[1]);
Edge(P, C1[1], C0[2]);

Edge(P, C1[2], C0[1]);
Edge(P, C1[2], C0[3]);

Edge(P, C1[5], C0[1]);
Edge(P, C1[5], C0[3]);

Edge(P, C1[6], C0[1]);
Edge(P, C1[6], C0[2]);

Edge(P, C1[3], C0[3]);
Edge(P, C1[3], C0[4]);

Edge(P, C1[4], C0[2]);
Edge(P, C1[4], C0[4]);

Edge(P, C1[7], C0[2]);
Edge(P, C1[7], C0[4]);

Edge(P, C1[8], C0[3]);
Edge(P, C1[8], C0[4]);
