Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement finite covers of simplicial sets #34886

Closed
miguelmarco opened this issue Jan 1, 2023 · 28 comments · Fixed by #35097
Closed

Implement finite covers of simplicial sets #34886

miguelmarco opened this issue Jan 1, 2023 · 28 comments · Fixed by #35097

Comments

@miguelmarco
Copy link
Contributor

miguelmarco commented Jan 1, 2023

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 miguelmarco added this to the sage-9.8 milestone Jan 1, 2023
@miguelmarco
Copy link
Contributor Author

Branch: u/mmarco/simplicial_set_group

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Jan 1, 2023

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

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Jan 1, 2023

Commit: 2114066

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Jan 1, 2023

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

59b4f54Implementation of simplicial set covers and simplicial stes of group presentations

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Jan 1, 2023

Changed commit from 2114066 to 59b4f54

@miguelmarco
Copy link
Contributor Author

Author: Miguel Marco

@jhpalmieri
Copy link
Member

comment:5

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?

@dimpase
Copy link
Member

dimpase commented Jan 3, 2023

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.

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Jan 4, 2023

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

9be1db0Deduplicate code in fundamental group and universal cover

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Jan 4, 2023

Changed commit from 59b4f54 to 9be1db0

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Jan 4, 2023

Changed commit from 9be1db0 to 1e5cf86

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Jan 4, 2023

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

1e5cf86Add explanation about presentation complex.

@miguelmarco
Copy link
Contributor Author

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
Copy link
Member

dimpase commented Jan 5, 2023

comment:10

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

@dimpase
Copy link
Member

dimpase commented Jan 5, 2023

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
Copy link
Contributor Author

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
Copy link
Contributor Author

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
Copy link
Member

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
Copy link
Member

dimpase commented Jan 5, 2023

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
Copy link
Member

dimpase commented Jan 5, 2023

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
Copy link
Contributor Author

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
Copy link
Member

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
Copy link
Member

dimpase commented Jan 6, 2023

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
Copy link
Member

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
Copy link
Contributor Author

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 mkoeppe removed this from the sage-9.8 milestone Jan 29, 2023
@miguelmarco miguelmarco mentioned this issue Feb 12, 2023
4 tasks
@mkoeppe
Copy link
Contributor

mkoeppe commented Feb 13, 2023

Removed branch from issue description; replaced by PR #35097

@miguelmarco
Copy link
Contributor Author

@jhpalmieri do you think it could be ready?

@jhpalmieri
Copy link
Member

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

vbraun pushed a commit that referenced this issue Mar 19, 2023
    
<!-- ^^^^^
Please provide a concise, informative and self-explanatory title.
Don't put issue numbers in there, do this in the PR body below.
For example, instead of "Fixes #1234" use "Introduce new method to
calculate 1+1"
-->
### 📚 Implementation of finite covers of simplicial sets

<!-- Describe your changes here in detail -->
<!-- Why is this change required? What problem does it solve? -->
<!-- If it resolves an open issue, please link to the issue here. For
example "Closes #1337" -->
Compute the cover of a (based) simplicial set associated to a
representation of its fundamental group to a finite group.

Fixes #34886.

### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. -->
<!-- If your change requires a documentation PR, please link it
appropriately -->
<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->

- [x] I have made sure that the title is self-explanatory and the
description concisely explains the PR.
- [ ] I have linked an issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation accordingly.

### ⌛ Dependencies
<!-- List all open pull requests that this PR logically depends on -->
<!--
- #xyz: short description why this is a dependency
- #abc: ...
-->
    
URL: #35097
Reported by: miguelmarco
Reviewer(s): John H. Palmieri
@mkoeppe mkoeppe added this to the sage-10.0 milestone Mar 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants