1

If this question would be more appropriate on a related site, let me know, and I'd be happy to move it.


I have 165 vertices in ℤ11, all of which are at a distance of √8 from the origin and are extreme points on their corresponding convex hull. CGAL is able to calculate their d-dimensional triangulation in only 133 minutes on my laptop using just under a gigabyte of RAM.


Magma manages a similar 66 vertex case quite quickly, and, crucially for my application, it returns an actual polytope instead of a triangulation. Thus, I can view each d-dimensional face as a single object which can be bounded by an arbitrary number of vertices.

Additionally, although less essential to my application, I can also use Graph : TorPol -> GrphUnd to calculate all the topological information regarding how those faces are connected, and then AutomorphismGroup : Grph -> GrpPerm, ... to find the corresponding automorphism group of that cell structure.

Unfortunately, when applied to the original polytope, Magma's AutomorphismGroup : TorPol -> GrpMat only returns subgroups of GLd(ℤ), instead of the full automorphism group G, which is what I'm truly hoping to calculate. As a matrix group, G ∉ GL11(ℤ), but is instead ∈ GL11(), where represents the algebraic numbers. In general, I won't need the full algebraic closure of the rationals, ℚ̅, but just some field extension. However, I could make use of any non-trivially powerful representation of G.

With two days of calculation, Magma can manage the 165 vertex case, but is only able to provide information about the polytope's original 165 vertices, 10-facets, and volume. However, attempting to enumerate the d-faces, for any 2 ≤ d < 10, quickly consumes the 256 GB of RAM I have at my disposal.


CGAL's triangulation, on the other hand, only calculates collections of d-simplices, all of which have d + 1 vertices. It seems possible to derive the same facial information from such a triangulation, but I haven't thought of an easy way to code that up.


Am I missing something obvious in CGAL? Do you have any suggestions for alternative ways to calculate the polytope's face information, or to find the full automorphism group of my set of points?

talonmies
  • 70,661
  • 34
  • 192
  • 269
OzoneNerd
  • 21
  • 2

1 Answers1

2

You can use the package Combinatorial maps in CGAL, that is able to represent polytopes in nD. A combinatorial map describes all cells and all incidence and adjacency relations between the cells.

In this package, there is an undocumented method are_cc_isomorphic allowing to test if an isomorphism exist from two starting points. I think you can use this method from all possible pair of starting points to find all automorphisms.

Unfortunatly, there is no method to build a combinatorial map from a dD triangulation. Such method exists in 3D (cf. this file). It can be extended in dD.

gdamiand
  • 661
  • 3
  • 5
  • Thanks a lot! I will try those techniques out. I will accept your answer as soon as I'm able to test them. – OzoneNerd Jan 01 '21 at 00:54
  • Having looked over the code you linked, I am under the impression that the resulting combinatorial map will still be triangulated, not converted into a polytope (in the sense of potentially having faces with more than _d_ + 1 vertices). For example, `import_from_triangulation_3` wouldn't give the pentagonal faces of dodecahedron. Or am I missing something? – OzoneNerd Jan 01 '21 at 23:31
  • Indeed import_from_triangulation_3 creates a combinatorial map having exactly the same topology than the input 3D triangulation. Thus there is only tetrahedra with triangle faces. But you have now a flexible data structure that you can modify to represent what you want. For example you can use the dual method to create the dual combinatorial map, or use removal method to merge some adjacent cells... – gdamiand Jan 03 '21 at 17:18