Create Platonic solids from the coxeter group (vertexes & edges & faces) How can one define vertexes, edges and faces from the Coxeter group? For example, for all platonic solids? I would like to create a general function that takes the Coxeter diagram as input, and gives vertexes, edges and faces as output :-)
I have seen a related question here. However, this discussion is only about how to define the vertexes. I think I now have understood this part fairly well by reading this discussion. But I still don't understand how to define the edges and faces using the same group. I assume it should have something to do with the subgroups. I would like to solve this the elegant way, not the brute force way :-)
 A: You are right, it does have something to do with the subgroups. The linked question describes how we can find the set of all vertices by picking a starting point in space and reflecting it through all the generating mirrors (and mirrors of mirrors) until we stop finding new points.
The trick is to recognize that certain subgroups of the Coxeter group correspond to an instance of a vertex, edge, or face of the solid, and will in fact 'trace out' the corresponding vertex, edge, or face when we reflect the starting point through the mirrors in the subgroup. These subgroups are the subgroups generated by leaving out one of the generators. Notice how there are 3 types of elements in a Platonic solid (vertex, edge, face), and there are 3 generators in the Coxeter group for a Platonic solid. 
 It turns out that these subgroups will have an index equal to the number of copies of each corresponding element type there are in the solid (for example the subgroup that describes an edge in the cube will have an index of 12 in the Coxeter group - there are 12 edges in a cube) and so we can pair each coset of the subgroup with each instance of a vertex, edge, or face. Each coset will 'trace out' the paired face of the solid, just as before. Do this for each of our special subgroups, and we will have identified every vertex, edge, and face in the solid.

Now let's look closer at how each coset of a subgroup 'traces out' a vertex, edge, of face of the solid - whichever element type this subgroup corresponds to. Let's begin by looking at the subgroups directly, since they include the identity element of the Coxeter group and that simplifies things. 
Each subgroup we are interested in is created by dropping one of the generating mirrors. If we drop the active mirror, we are left with the two generating mirrors that intersect with our starting point. The subgroup will not move the point, and so it identifies our starting vertex.  If we drop one of the inacive mirrors, the resulting subgroup will generate edges or faces. The active mirror will generate an edge by reflecting our starting point to a second vertex. If the inactive mirror intersects this edge, then we can't reflect a vertex to any other - our edge has been identified. If the inactive mirror does not intersect this edge, then it will reflect the starting point to a new vertex, and so on and so on until the underlying vertex set of one of the faces has been traced out. 
Finally, since cosets are conjugate to each other, I hope you can see how the group action of a representative from each coset will map the starting vertex, edge, or face to each of the others in the solid.

A way to do this programatically is to use the Todd-Coxeter algorithm to identify the cosets of each of our special subgroups. Once we have our starting vertex, we can then transform it with each coset to find the vertex sets of every edge and face in the solid.
