Macaulay2 » Documentation
Packages » Topcom :: An example use of TopCom
next | previous | forward | backward | up | index | toc

An example use of TopCom -- interface to selected functions from topcom package

Topcom is software written by Jorg Rambau which has very good support for computing the triangulations of a point set (or, regular triangulations, fine triangulations, and triangulations which are connected to regular triangulations via bistellar flips).

Given a matrix $A$ (say of size $d \times n$), the columns represent points in $d$-space, and each point is labelled by its column index ($0, 1, \ldots, n-1$). Topcom appears to assume that the points are not contained in a hyperplane. In this case, their convex hull is full dimensional ($d$-dimensional), and a set of $d$-simplices with vertices in the set of points is a triangulation if (1) their union is the convex hull of the columns of $A$, and (2) the simplices either do not intersect, or intersect only along lower dimensional sets. We represent a triangulation by the the list of lists of indices for each of these $d$-dimensional simplices.

For example, consider a simple example: the square.

i1 : sq = transpose matrix {{-1,-1},{-1,1},{1,-1},{1,1},{0,0},{1,0},{-1,0},{0,1},{0,-1}}

o1 = | -1 -1 1  1 0 1 -1 0 0  |
     | -1 1  -1 1 0 0 0  1 -1 |

              2       9
o1 : Matrix ZZ  <-- ZZ
i2 : tri = topcomRegularFineTriangulation sq

o2 = {{2, 4, 5}, {3, 4, 5}, {0, 4, 6}, {1, 4, 6}, {3, 4, 7}, {1, 4, 7}, {2,
     ------------------------------------------------------------------------
     4, 8}, {0, 4, 8}}

o2 : List
i3 : topcomIsTriangulation(sq, tri)

o3 = true
i4 : topcomIsRegularTriangulation(sq, tri)

o4 = true
i5 : topcomRegularTriangulationWeights(sq, tri)

      1  1  1  1    3
o5 = {-, -, -, -, - -, 0, 0, 0, 0}
      2  2  2  2    2

o5 : List
i6 : topcomNumTriangulations sq

o6 = 387
i7 : topcomNumTriangulations(sq, Fine => true)

o7 = 64
i8 : Ts = topcomAllTriangulations(sq, Fine => true);
i9 : netList Ts

     +---------+---------+---------+---------+---------+---------+---------+---------+
o9 = |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|{4, 6, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 4, 5}|{3, 4, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|{4, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 5, 7}|{4, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 4, 5}|{3, 4, 7}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|{4, 6, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|{4, 6, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 5, 8}|{3, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 6, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 5}|{0, 4, 7}|{0, 5, 8}|{0, 6, 7}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 8}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 5}|{1, 4, 8}|{1, 5, 7}|{1, 6, 8}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|{4, 6, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 6}|{3, 4, 8}|{3, 5, 8}|{3, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|{4, 5, 8}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|{4, 6, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 6}|{2, 4, 7}|{2, 5, 7}|{2, 6, 8}|{3, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 5, 7}|{4, 5, 7}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|{4, 6, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 4, 6}|{2, 4, 7}|{2, 5, 7}|{2, 6, 8}|{3, 5, 7}|{4, 6, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 6}|{3, 4, 8}|{3, 5, 8}|{3, 6, 7}|{4, 6, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 6, 8}|{1, 4, 5}|{1, 4, 8}|{1, 5, 7}|{1, 6, 8}|{2, 5, 8}|{3, 5, 7}|{4, 5, 8}|
     +---------+---------+---------+---------+---------+---------+---------+---------+
     |{0, 4, 5}|{0, 4, 7}|{0, 5, 8}|{0, 6, 7}|{1, 6, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|
     +---------+---------+---------+---------+---------+---------+---------+---------+

Topcom assumes that the points do not lie on a hyperplane. If they do, and the hyperplane is not through the origin (and they span that entire affine hyperplane), then give Homogenize => false as an option. This is essentially equivalent to considering the point configuration as a vector configuration.

For example, the following three points lie on the hyperplane $x_0 + x_1 + x_2 = 2$.

i10 : A1 = transpose matrix{{1,1,0},{1,0,1},{0,1,1}}

o10 = | 1 1 0 |
      | 1 0 1 |
      | 0 1 1 |

               3       3
o10 : Matrix ZZ  <-- ZZ
i11 : topcomRegularFineTriangulation(A1, Homogenize => false)

o11 = {{0, 1, 2}}

o11 : List
i12 : topcomRegularFineTriangulation(A1, Homogenize => true)

o12 = {{0, 1, 2}}

o12 : List

Topcom generates triangulations by starting with a triangulation, and generating more by bistellar flips. There is a beautiful story about the collection of all (regular, or connected to regular) triangulations of a point or vector configuration. See the book De Loera, Rambau, Santos, Triangulations for details about this.

i13 : sqh = transpose matrix {{-1,-1,1},{-1,1,1},{1,-1,1},{1,1,1},{0,0,1},{1,0,1},{-1,0,1},{0,1,1},{0,-1,1}}

o13 = | -1 -1 1  1 0 1 -1 0 0  |
      | -1 1  -1 1 0 0 0  1 -1 |
      | 1  1  1  1 1 1 1  1 1  |

               3       9
o13 : Matrix ZZ  <-- ZZ
i14 : tri = topcomRegularFineTriangulation sqh -- none found!

o14 = {{2, 4, 5}, {3, 4, 5}, {0, 4, 6}, {1, 4, 6}, {3, 4, 7}, {1, 4, 7}, {2,
      -----------------------------------------------------------------------
      4, 8}, {0, 4, 8}}

o14 : List
i15 : tri = topcomRegularFineTriangulation(sqh, Homogenize => false)

o15 = {{2, 4, 5}, {3, 4, 5}, {0, 4, 6}, {1, 4, 6}, {3, 4, 7}, {1, 4, 7}, {2,
      -----------------------------------------------------------------------
      4, 8}, {0, 4, 8}}

o15 : List
i16 : topcomNumTriangulations(sqh, Homogenize => false)

o16 = 387
i17 : # topcomAllTriangulations(sqh, Homogenize => false)

o17 = 387
i18 : topcomIsTriangulation(sq, tri)

o18 = true
i19 : topcomIsRegularTriangulation(sq, tri)

o19 = true
i20 : topcomRegularTriangulationWeights(sq, tri)

       1  1  1  1    3
o20 = {-, -, -, -, - -, 0, 0, 0, 0}
       2  2  2  2    2

o20 : List
i21 : topcomNumTriangulations sq

o21 = 387
i22 : topcomNumTriangulations(sq, Fine => true)

o22 = 64
i23 : Ts = topcomAllTriangulations(sq, Fine => true);
i24 : netList Ts

      +---------+---------+---------+---------+---------+---------+---------+---------+
o24 = |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|{4, 6, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 4, 5}|{3, 4, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|{4, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 5, 7}|{4, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 4, 5}|{3, 4, 7}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|{4, 5, 7}|{4, 6, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|{4, 6, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 4, 6}|{1, 4, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|{4, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 5, 8}|{3, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 6, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 5}|{0, 4, 6}|{0, 5, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 5}|{0, 4, 7}|{0, 5, 8}|{0, 6, 7}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 8}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 5}|{1, 4, 8}|{1, 5, 7}|{1, 6, 8}|{2, 4, 5}|{2, 4, 8}|{3, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 5}|{1, 4, 6}|{1, 5, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|{4, 6, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 6}|{0, 4, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 6}|{3, 4, 8}|{3, 5, 8}|{3, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|{4, 5, 8}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|{4, 5, 8}|{4, 6, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 4, 5}|{3, 4, 6}|{3, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 7}|{1, 4, 8}|{1, 6, 8}|{2, 4, 7}|{2, 4, 8}|{2, 5, 7}|{3, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 7}|{0, 4, 8}|{0, 6, 7}|{1, 6, 7}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 6}|{1, 4, 7}|{2, 4, 6}|{2, 4, 7}|{2, 5, 7}|{2, 6, 8}|{3, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 4, 5}|{2, 4, 6}|{2, 6, 8}|{3, 5, 7}|{4, 5, 7}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 7}|{3, 4, 8}|{3, 5, 8}|{4, 6, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 4, 6}|{2, 4, 7}|{2, 5, 7}|{2, 6, 8}|{3, 5, 7}|{4, 6, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 6, 7}|{2, 5, 8}|{3, 4, 6}|{3, 4, 8}|{3, 5, 8}|{3, 6, 7}|{4, 6, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 6, 8}|{1, 4, 5}|{1, 4, 8}|{1, 5, 7}|{1, 6, 8}|{2, 5, 8}|{3, 5, 7}|{4, 5, 8}|
      +---------+---------+---------+---------+---------+---------+---------+---------+
      |{0, 4, 5}|{0, 4, 7}|{0, 5, 8}|{0, 6, 7}|{1, 6, 7}|{2, 5, 8}|{3, 5, 7}|{4, 5, 7}|
      +---------+---------+---------+---------+---------+---------+---------+---------+

See also