Closed miguelmarco closed 1 year ago
Branch: u/mmarco/simplicial_set_group
Branch pushed to git repo; I updated commit sha1. New commits:
Commit: 2114066
Branch pushed to git repo; I updated commit sha1. New commits:
59b4f54 | Implementation of simplicial set covers and simplicial stes of group presentations |
Author: Miguel Marco
I like this. A few questions:
is it possible to reduce the code duplication between fundamental_group
and universal_cover_map
?
can you provide more documentation for PresentationComplex
, in particular a definition of what the complex is?
I wonder whether this would work for "graphs with constant link" - the complex with be given by vertices, edges, and triangles of a graph; one famous in graph theory examples are "locally Petersen graphs"; e.g. the 21-vertex graph with vertices being pairs of elements of a 7-element set, two vertices adjacent if the corr. pairs don't intersect. In Sage one can get it as
graphs.JohnsonGraph(7,2).complement()
In this case there is a universal 3-fold cover - corresponding to a subgroup of the Schur multiplier of the alternative group Alt(7), which is an automorphism group of this graph.
Branch pushed to git repo; I updated commit sha1. New commits:
9be1db0 | Deduplicate code in fundamental group and universal cover |
Branch pushed to git repo; I updated commit sha1. New commits:
1e5cf86 | Add explanation about presentation complex. |
I deduplicated the code, and added some explanation about the presnetation complex. I hope it is enough to understand what the code does.
character
as used here is not a usual group theory character, and ideally would need a reference.
I'm still confused as to how one applies this functionality, e.g. getting the universal cover, to a simplicial complex, e.g.
sage: c=graphs.JohnsonGraph(7,2).complement().clique_complex(); c
Simplicial complex with 21 vertices and 105 facets
sage: c.fundamental_group()
Finitely presented group < e2 | e2^3 >
and then??? OK, one can do
sage: from sage.topology.simplicial_set import SimplicialSet
sage: sc=SimplicialSet(c); sc
Simplicial set with 231 non-degenerate simplices
but sc
still does not know anything about its universal cover.
I guess that happens because sc
is not constructed with a specified base point. If you construct the corresponding based simplicial set, it works:
sage: based_sc = sc.set_base_point(sc.n_cells(0)[0])
sage: based_sc.universal_cover()
Simplicial set with 693 non-degenerate simplices
Replying to Dima Pasechnik:
character
as used here is not a usual group theory character, and ideally would need a reference.
Ah, i see, sorry for that. We use it often with this meaning: a way to respresent a group in another one (usually easier to handle).
Replying to Miguel Marco:
I guess that happens because
sc
is not constructed with a specified base point. If you construct the corresponding based simplicial set, it works:sage: based_sc = sc.set_base_point(sc.n_cells(0)[0]) sage: based_sc.universal_cover() Simplicial set with 693 non-degenerate simplices
Right. You can't even compute the fundamental group without specifying the base point.
Replying to John Palmieri:
Replying to Miguel Marco: [...] Right. You can't even compute the fundamental group without specifying the base point.
but you get an isomorphic group, no? Thus, it would make sense to default to some choice of the base point, without requiring the user to supply one.
Replying to Miguel Marco:
Replying to Dima Pasechnik:
character
as used here is not a usual group theory character, and ideally would need a reference.Ah, i see, sorry for that. We use it often with this meaning: a way to respresent a group in another one (usually easier to handle).
+ The character is represented by a dictionary, that assigns an
+ element of a finite group to each nondegenerate 1-dimensional
+ cell. It should correspond to an epimorphism from the fundamental
+ group.
To me, a cover is defined by a subgroup H of the fundamental group F - each orbit of H on k-simplices of the universal cover gives one k-simplex in the cover you are constructing. Unless you want to restrict to normal subgroups H of F, I don't see what epimorphism you mean. And I don't see what dictionary is doing.
(sorry, my algebraic topology is rusty, maybe I am talking nonsense here)
To me, a cover is defined by a subgroup H of the fundamental group F - each orbit of H on k-simplices of the universal cover gives one k-simplex in the cover you are constructing. Unless you want to restrict to normal subgroups H of F, I don't see what epimorphism you mean. And I don't see what dictionary is doing.
(sorry, my algebraic topology is rusty, maybe I am talking nonsense here)
In this case, we are assuming that we have a fixed path from the base point to each vertex. Then, each edge corresponds to an element of the fundamental group (the loop that apperas concatenating the edge and the paths to the endpoints), so the dictionary maps that edge to the image of the corresponding element of the fundamental group, determining a group morphism. The group you reffer to would be the kernel of that map (so yes, we are talking about regular covers).
Replying to Dima Pasechnik:
Replying to John Palmieri:
Replying to Miguel Marco: [...] Right. You can't even compute the fundamental group without specifying the base point.
but you get an isomorphic group, no? Thus, it would make sense to default to some choice of the base point, without requiring the user to supply one.
You get isomorphic fundamental groups as long as you pick base points within the same path-connected component, but different components can certainly have different fundamental groups. So it seems safest (and mathematically most correct) to force the user to explicitly specify a basepoint: force the user to work in the category of pointed simplicial sets.
it seems natural to define the fundamental group of a disconnected space as the free product of these for the path-connected components. Then the 1st homology group becomes its abelianisation. But perhaps this does not fly somehow, I don't know.
No one does that in real life. The closest thing is maybe the fundamental groupoid. I wonder if it's possible to implement that, but that would be for another ticket.
Part of the issue is that you want the fundamental group construction to be functorial, and to do that, you need to choose base points ahead of time. If you change the base point from x
to y
, you get isomorphic fundamental groups, but the isomorphism depends on the choice of path from x
to y
, so if you try to make things independent of the base point, a continuous function of spaces will not induce a well-defined homomorphism of fundamental groups. I think the fundamental groupoid avoids these issues, but it's also not as standard.
I agree that in this setting, it makes more sense to stick to the category of simplicial sets with base points.
Any suggestion about how to improve the documentation?
Removed branch from issue description; replaced by PR #35097
@jhpalmieri do you think it could be ready?
@jhpalmieri do you think it could be ready?
I'm sorry, I am having a crazy few weeks at work, but I hope I can look at this soon.
This branch implements the computation of finite covers of simplicial sets, and also the simplicial set associated to a grpup presentation.
CC: @jhpalmieri
Component: algebraic topology
Author: Miguel Marco
Issue created by migration from https://trac.sagemath.org/ticket/34886