Császár torus, python and sagemath
2016-10-19 ( 2016-09-22)The simplicial complex
Consider the (abstract) simplicial $T$ defined as follows: vertices are $$ X=\{ 0,1,2,3,4,5,6 \} = \{ j \mod 7 \}. $$
Now, for each $x\in X$ let $\Phi_ x$ denote the following subsets of $2^X$ : $$ \begin{aligned} H_ x &= \{ \{j,j+1\} : j =0 \ldots 6 \} = \{ \{j,j-1\} : j =0 \ldots 6 \} \\\ V_ x &= \{ \{ j,j+x \} : j =0 \ldots 6 \} = \{ \{ j,j-x \} : j =0 \ldots 6 \} \\\ D_ x &= \{ \{ j, j + x+1 \} : j = 0 \ldots 6 \} = \{ \{ j, j - x-1 \} : j = 0 \ldots 6 \} \\\ \Phi_ x & = H_ x \cup V_ x \cup D_ x \end{aligned} $$ where all the integers $j$ are meant $\mod 7$.
- (1)
- The set $\Phi_ x$ has 21 elements (i.e., it is the set of all possible subsets of $X$ of cardinality $2$) if and only if $x=2$ or $x=4$.
Proof: $\Phi_ x$ has 21 elements if and only if the three sets $H_ x$, $V_ x$ and $D_ x$ are disjoint. Hence if they are disjoint then $x\neq 0$ (otherwise $D_ x =H_ x$), $x\neq 1,6$ (otherwise $H_ x = V_ x$), $x\neq 3$ (otherwise $\{0,3\} = \{ 3,7 \} \in V_ x \cap D_ x $), and $x\neq 5$ (otherwise $\{0,6\} = \{6,7 \} \in D_ x \cap H_ x$). We are left with the cases $x=2$ or $x=4$. Lazy idea: write a few lines of python (2.7) and compute the number of elements of $\Phi_ x$ for each $x$…
>>> def NumberOfPhi(x):
... H= [ frozenset([j,(j+1) % 7 ]) for j in range(7) ]
... V= [ frozenset([j,(j+x) % 7 ]) for j in range(7) ]
... D = [ frozenset([j,(j+x+1) % 7 ]) for j in range(7) ]
... return len( set(H) | set(V) | set(D) )
...
>>>
>>> [ NumberOfPhi(x) for x in range(7) ]
[14, 14, 21, 14, 21, 14, 14]
This is the end of the proof. (/Proof)
Now, for $2$-simplexes we can proceed in a similar way. For each $x$, let $$ \begin{aligned} L_ x & = \{ \{ j,j+1,j+x+1 \} : j = 0 \ldots 6 \} \\\ U_ x & = \{ \{ j, j+x, j+x+1 \} : j = 0 \ldots 6 \}. \end{aligned} $$ Hence $$ \begin{aligned} L_ 2 & = \{ \{ j,j+1,j+3 \} : j = 0 \ldots 6 \} \\\ U_ 2 & = \{ \{ j, j+2, j+3 \} : j = 0 \ldots 6 \} \\\ L_ 4 & = \{ \{ j,j+1,j+5 \} : j = 0 \ldots 6 \} \implies L_ 4 = U_ 2\\\ U_ 4 & = \{ \{ j, j+4, j+5 \} : j = 0 \ldots 6 \} \implies U_ 4 = L_ 2. \end{aligned} $$
A little bit of typing and
>>> def Inter(x):
... L = [ frozenset( [j,(j+1)%7, (j+x+1)%7 ]) for j in range(7) ]
... U = [ frozenset( [j,(j+x)%7, (j+x+1)%7 ]) for j in range(7) ]
... return len( set(L) | set(V) )
...
>>> [ (x,Inter(x)) for x in range(7) ]
[(0, 14), (1, 14), (2, 14), (3, 14), (4, 14), (5, 14), (6, 14)]
This implies that for $x=2,4$ the following is an abstract simplicial complex: $$ T = ( X, \{ L_ 2 \cup U_ 2 \cup \ldots \} ) = ( X, \{ L_ 4 \cup U_ 4 \cup \ldots \} ), $$ where the dots stand for all possible $1$-dimensional (i.e. 21) and $0$-dimensional (i.e. 7) simplexes. The complex can be represented as in the following badly drawn diagram:
With a little bit of imagination and glueing, it is possible to “prove” the following proposition.
- (2)
- The abstract simplicial complex $T$ has the geometric realization which is homeomorphic to the torus $T^2 = S^1 \times S^1$.
Proof:
It follows from the badly drawn diagram. The $2$-simplices $U_ 2$
are the upper diagonal triangles. The $2$-simplices
$L_ 2$ are the lower diagonal triangles.
The $21$ elements of $\Phi_ 2$ are all the edges (up to identification).
(/Proof)
This complex is actually embeddable in $\RR^3$: on the Wikipedia page one can find an embedding; more details a the page in the Archive of Electronic Geometry Models.
SageMath
Here is a plain sage session. According to the documentation, the function Torus
returns Csaszar’s Torus.
sage: T = simplicial_complexes.Torus();
sage: T.faces()
{-1: set([()]),
0: set([(4,), (5,), (3,), (0,), (1,), (6,), (2,)]),
1: set([(0, 6),
(0, 5),
(3, 6),
(1, 2),
(1, 5),
(1, 6),
(1, 3),
(0, 3),
(2, 6),
(2, 4),
(1, 4),
(3, 5),
(3, 4),
(2, 3),
(4, 6),
(2, 5),
(5, 6),
(0, 2),
(0, 1),
(0, 4),
(4, 5)]),
2: set([(2, 4, 5),
(0, 1, 5),
(0, 4, 6),
(1, 3, 6),
(0, 3, 5),
(1, 2, 4),
(2, 3, 5),
(1, 3, 4),
(2, 3, 6),
(0, 2, 6),
(1, 5, 6),
(0, 1, 2),
(4, 5, 6),
(0, 3, 4)])}
After a little bit of reordering, faces of sage’s $T$ are
[(0, 1, 2),
(0, 1, 5),
(0, 2, 6),
(0, 3, 4),
(0, 3, 5),
(0, 4, 6),
(1, 2, 4),
(1, 3, 4),
(1, 3, 6),
(1, 5, 6),
(2, 3, 5),
(2, 3, 6),
(2, 4, 5),
(4, 5, 6)]
while faces in $U_ 2 \cup L_ 2$ are different.
[(0, 1, 3),
(0, 1, 5),
(0, 2, 3),
(0, 2, 6),
(0, 4, 5),
(0, 4, 6),
(1, 2, 4),
(1, 2, 6),
(1, 3, 4),
(1, 5, 6),
(2, 3, 5),
(2, 4, 5),
(3, 4, 6),
(3, 5, 6)]
It it just a permutation of indices, or they are distinct as simplicial complexes? The automorphism group of $T$ has 42 elements
sage: G=T.automorphism_group()
sage: len(G)
42
and hence there are 120 = 7!/42 distinct possible classes of permutations. The easiest is $(0,6)$, which transforms one set of 2-faces into the other.
- (3)
- The two simplicial complexes are equivalent.
A little bit of sagemath help in finding such permutations:
T = simplicial_complexes.Torus();
Facce= list(T.faces()[2])
Facce.sort()
def L(x):
return set([ frozenset( [j,(j+1) % 7, (j+x+1) % 7 ]) for j in range(7) ] )
def U(x):
return set([ frozenset( [j,(j+x) % 7, (j+x+1) % 7 ]) for j in range(7) ] )
myFacce=[tuple(a) for a in ( L(2) | U(2) ) ]
myFacce.sort()
G =SymmetricGroup((0,1,2,3,4,5,6))
def PermutedFacce(g,ListOfTuples):
result=[]
for t in ListOfTuples:
goft=[g(x) for x in t ]
goft.sort()
result = result + [tuple(goft)]
result.sort()
return result
found=0
for g in G:
pFacce=PermutedFacce(g,Facce)
if pFacce == myFacce:
found += 1
print "found n. ", found, " : ", g
And interactively loading it (saved as c.sage
) gives the following session.
sage: runfile ("c.sage")
found n. 1 : (2,5,3)(4,6)
found n. 2 : (1,2,3,4,5,6)
found n. 3 : (1,3,6,5,2)
found n. 4 : (1,4,3)(2,6)
found n. 5 : (1,5)(2,4)
found n. 6 : (1,6,3,5,4)
found n. 7 : (0,1)(2,3,6,4)
found n. 8 : (0,1,2,6,5,4)
found n. 9 : (0,1,3,5)(2,4,6)
found n. 10 : (0,1,4,5,3)
found n. 11 : (0,1,5,6,3,2)
found n. 12 : (0,1,6)(2,5)(3,4)
found n. 13 : (0,2,6,1)(3,5)
found n. 14 : (0,2,4,3)(5,6)
found n. 15 : (0,2)(1,3,4)
found n. 16 : (0,2,5,1,4)(3,6)
found n. 17 : (0,2,3,1,5,4,6)
found n. 18 : (0,2,1,6,4,5)
found n. 19 : (0,3,4,6,5,1)
found n. 20 : (0,3,6,2)(4,5)
found n. 21 : (0,3,1,2,5)
found n. 22 : (0,3,5,6)(1,4,2)
found n. 23 : (0,3)(1,5,2,6,4)
found n. 24 : (0,3,2,4)(1,6)
found n. 25 : (0,4,1)(2,5,6)
found n. 26 : (0,4)(2,3,5)
found n. 27 : (0,4,6,3)(1,2)
found n. 28 : (0,4,5,1,3,2,6)
found n. 29 : (0,4,3,6,1,5)
found n. 30 : (0,4,2)(1,6,5,3)
found n. 31 : (0,5,4,3,2,1)
found n. 32 : (0,5)(2,6,3,4)
found n. 33 : (0,5,3,6)(1,2,4)
found n. 34 : (0,5,6,4)(1,3)
found n. 35 : (0,5,2)(1,4,6)
found n. 36 : (0,5,1,6,2,3)
found n. 37 : (0,6,3,1)(2,4,5)
found n. 38 : (0,6)
found n. 39 : (0,6,4,3,5,1,2)
found n. 40 : (0,6,1,3)(2,5,4)
found n. 41 : (0,6,5)(1,4)(2,3)
found n. 42 : (0,6,2,1,5,3,4)
Equivalently, and shortly:
sage: K=SimplicialComplex(myFacce)
sage: T=simplicial_complexes.Torus()
sage: T.is_isomorphic(K)
True
Embedding the complex in $\RR^3$
The problem of embedding is not trivial. But …
Poincaré Homology 3-sphere
From sagemath documentation, and adding on…
sage: Sigma3 = simplicial_complexes.PoincareHomologyThreeSphere()
sage: Sigma3.homology()
{0: 0, 1: 0, 2: 0, 3: Z}
sage: Sigma3.fundamental_group().cardinality()
sage: [len(Sigma3.faces()[x]) for x in range(4)]
[16, 106, 180, 90]