Constructing Uniform Polytopes

Questions and problems about using polymake go here.
kundor
Posts: 9
Joined: 15 Jul 2013, 14:53

Constructing Uniform Polytopes

Postby kundor » 15 Jul 2013, 15:11

I'm interested in looking at the uniform convex polytopes in various dimensions: the 18 Platonic and Archimedean solids, the 64 uniform polychora, the 105 known uniform 5-polytopes, etc. Is there some convenient way to construct or load these in polymake without manually entering coordinates?

Failing that, Wikipedia provides coordinates for all these. Usually, these are given like "All permutions of (±1,±1,0)". Is there a convenient way to input all the permutations and sign-alternations of a list as the coordinates of a polytope?

One thing I'm looking at is whether the symmetry group is transitive on the faces of each dimension. The properties TRANSVERSALS and TRANSVERSAL_SIZES of GroupOfPolytope seem interesting for this, but I don't understand what they mean. Can someone explain them?

The properties N_ORBITS_OF_VERTICES and N_ORBITS_OF_FACETS answer my question for vertices and facets. Is there a way to get this information for other dimensions?

User avatar
joswig
Main Author
Posts: 280
Joined: 24 Dec 2010, 11:10

Re: Constructing Uniform Polytopes

Postby joswig » 15 Jul 2013, 15:44

For the Archimedean solids in polymake format please see http://www.eg-models.de/

Click on "Models" and then navigate to "Classical Models/Regular Solids". Use the entry via "No Applet" if you cannot use java.

Each model comes with a polymake file. While this is in (very old) pre-XML format it is automatically converted upon load.

Notice that most of these polytopes do not admit an exact rational description (as regular polytopes). The files provided are close rational approximations but with the correct combinatorics.

If you prefer to have exact representations, also for the non-rational ones, then most of them are available from within polymake. For instance, dodecahedron(), gives what you would guess from the name. There is even a function platonic_solids() which returns an array of (five) polytope::Polytope objects.

herr
Developer
Posts: 40
Joined: 30 Dec 2010, 13:15

Re: Constructing Uniform Polytopes

Postby herr » 15 Jul 2013, 18:27

One thing I'm looking at is whether the symmetry group is transitive on the faces of each dimension. The properties TRANSVERSALS and TRANSVERSAL_SIZES of GroupOfPolytope seem interesting for this, but I don't understand what they mean. Can someone explain them?
Unfortunately, the properties TRANSVERSALS and TRANSVERSAL_SIZES are not relevant with respect to your question (they store information about the permutation group itself, not about the polymake object on which the group acts).
The properties N_ORBITS_OF_VERTICES and N_ORBITS_OF_FACETS answer my question for vertices and facets. Is there a way to get this information for other dimensions?
Sure, you can analyze the action of your group on other faces, too. You need to compute the HASSE_DIAGRAM of the polytope. Its subproperty FACES contains sets of indices which are permuted by the group. To realize the action on sets of indices you can use the C++-struct SetOfIndicesAction which is implemented in bundled/group/apps/group/src/permlib.cc. Basically, you need to generalize the function "orbits_induced_action" which computes the orbits of facets with respect to a group acting on the vertices from the vertex-facet-incidence matrix.

By the way: The HASSE_DIAGRAM is a graph, and the nodes of this graph corresponding to faces of a certain dimension are available via the perl function nodes_of_dim(), i.e.

Code: Select all

print cube(3)->HASSE_DIAGRAM->nodes_of_dim(2); {1 2 3 4 5 6}

kundor
Posts: 9
Joined: 15 Jul 2013, 14:53

Re: Constructing Uniform Polytopes

Postby kundor » 15 Jul 2013, 21:36

joswig, thanks for the tips. I take it that means I will have to construct the higher-dimensional polytopes "manually." As I mentioned, most of these are provided as a base vector, taking all the permutations of coordinates, and possibly sign. I think I've figured out a way to do this (I am new to perl, and polymake): using NextPermuteNum from Algorithm::Loops, I can get all the permutations of the vector while skipping duplicates; then I construct a Vector<Rational> with it and append it to a Matrix<Rational> with the /= operator in a loop. It just seems like there might be a simpler way.

herr, it seems that the information in TRANSVERSAL_SIZES does reflect the polytope, however. For example, the 3-cube, cuboctahedron, and octahedron, which all have the same symmetry group, have transversal sizes (8,3,2), (12,2,2), and (6,4,2), respectively. For regular polytopes, it seems to give the number of i-faces incident to each (i-1)-face, for i = 0,...,n-1. I'd be interested to know what it means.

Is the SetOfIndicesAction something I can access from the perl interface?

paffenholz
Developer
Posts: 211
Joined: 24 Dec 2010, 13:47

Re: Constructing Uniform Polytopes

Postby paffenholz » 15 Jul 2013, 22:41

joswig, thanks for the tips. I take it that means I will have to construct the higher-dimensional polytopes "manually." As I mentioned, most of these are provided as a base vector, taking all the permutations of coordinates, and possibly sign. I think I've figured out a way to do this (I am new to perl, and polymake): using NextPermuteNum from Algorithm::Loops, I can get all the permutations of the vector while skipping duplicates; then I construct a Vector<Rational> with it and append it to a Matrix<Rational> with the /= operator in a loop. It just seems like there might be a simpler way.
There is no direct command to construct the higher dimensional semi-regular polyhedra. You can simplify your life slightly by defining them as a symmetric polytope with a group acting on the coordinates. This way you only need to specify one representative for each permutation. I.e. the following gives a cube:

Code: Select all

$g=new group::GroupOfPolytope(GENERATORS=>group::symmetric_group(3)->GENERATORS,DOMAIN=>3); $p=new polytope::SymmetricPolytope(GENERATING_GROUP=>$g,GEN_POINTS=>[[1,1,1,1],[1,1,1,-1],[1,1,-1,-1],[1,-1,-1,-1]]);

herr
Developer
Posts: 40
Joined: 30 Dec 2010, 13:15

Re: Constructing Uniform Polytopes

Postby herr » 15 Jul 2013, 22:59

herr, it seems that the information in TRANSVERSAL_SIZES does reflect the polytope, however. For example, the 3-cube, cuboctahedron, and octahedron, which all have the same symmetry group, have transversal sizes (8,3,2), (12,2,2), and (6,4,2), respectively. For regular polytopes, it seems to give the number of i-faces incident to each (i-1)-face, for i = 0,...,n-1. I'd be interested to know what it means.
When creating a permutation group in polymake (via specifying a set of permutations), the group is internally stored in a special way using BSGS (strong generating sets relative to some base). The TRANSVERSALS are sets of permutations which give rise to the cosets of a group G with respect to some stabilizer in G. For a precise description, please have a look at Chapter 2 of Thomas Rehn's diploma thesis (Thomas Rehn is the author of PermLib, which is the C++-library on which the implementation of permutation groups in polymake builds.)
Is the SetOfIndicesAction something I can access from the perl interface?
On Perl side you can use the function orbit(Group, Set<Set>) which computes the orbits of a set of Set<Int> (for instance the set of all FACES). Just gather all FACES in a Set<Set<Int>> and pass the set to this function. An introduction to Perl in polymake can be found here: http://www.polymake.org/doku.php/tutori ... _continued. Please feel free to ask again if you need further help.


Return to “Helpdesk”