sagemath / sage

Main repository of SageMath
https://www.sagemath.org
Other
1.44k stars 480 forks source link

Implement finite covers of simplicial sets #34886

Closed miguelmarco closed 1 year ago

miguelmarco commented 1 year ago

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

miguelmarco commented 1 year ago

Branch: u/mmarco/simplicial_set_group

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 1 year ago

Branch pushed to git repo; I updated commit sha1. New commits:

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 1 year ago

Commit: 2114066

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 1 year ago

Branch pushed to git repo; I updated commit sha1. New commits:

59b4f54Implementation of simplicial set covers and simplicial stes of group presentations
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 1 year ago

Changed commit from 2114066 to 59b4f54

miguelmarco commented 1 year ago

Author: Miguel Marco

jhpalmieri commented 1 year ago
comment:5

I like this. A few questions:

dimpase commented 1 year ago
comment:6

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.

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 1 year ago

Branch pushed to git repo; I updated commit sha1. New commits:

9be1db0Deduplicate code in fundamental group and universal cover
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 1 year ago

Changed commit from 59b4f54 to 9be1db0

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 1 year ago

Changed commit from 9be1db0 to 1e5cf86

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 1 year ago

Branch pushed to git repo; I updated commit sha1. New commits:

1e5cf86Add explanation about presentation complex.
miguelmarco commented 1 year ago
comment:9

I deduplicated the code, and added some explanation about the presnetation complex. I hope it is enough to understand what the code does.

dimpase commented 1 year ago
comment:10

character as used here is not a usual group theory character, and ideally would need a reference.

dimpase commented 1 year ago
comment:11

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.

miguelmarco commented 1 year ago
comment:12

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
miguelmarco commented 1 year ago
comment:13

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).

jhpalmieri commented 1 year ago
comment:14

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.

dimpase commented 1 year ago
comment:15

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.

dimpase commented 1 year ago
comment:16

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)

miguelmarco commented 1 year ago
comment:17

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).

jhpalmieri commented 1 year ago
comment:18

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.

dimpase commented 1 year ago
comment:19

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.

jhpalmieri commented 1 year ago
comment:20

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.

miguelmarco commented 1 year ago
comment:21

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?

mkoeppe commented 1 year ago

Removed branch from issue description; replaced by PR #35097

miguelmarco commented 1 year ago

@jhpalmieri do you think it could be ready?

jhpalmieri commented 1 year ago

@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.