Zulip Chat Archive
Stream: Is there code for X?
Topic: profinite sets
Kevin Buzzard (Nov 29 2020 at 14:01):
We don't have them, right? What's the definition? I was taught "a projective limit of finite sets", that sounds like a disaster. "compact and totally disconnected" sounds like a better bet.
Adam Topaz (Nov 29 2020 at 14:29):
Totally disconnected compact Hausdorff is easy to write down
Adam Topaz (Nov 29 2020 at 14:31):
And I've been (very slowly) adding stuff to make this usable.
Adam Topaz (Nov 29 2020 at 14:36):
E.g. only as of a few days ago does mathlib have the fact that the disjoint union of two t2 spaces is t2.
Kevin Buzzard (Nov 29 2020 at 14:36):
Should I just make some new file profinite.lean
in topology
?
Adam Topaz (Nov 29 2020 at 14:44):
My inclination is to make the category of profinite sets directly in topology/category/Profinite.lean
since we already have the three classes compact_space
t2_space
and totally_disconnected
Reid Barton (Nov 29 2020 at 14:47):
I agree that "projective limit of finite sets" sounds like a potential disaster as a definition but somehow it's the definition we want, so maybe we can create an API around the "totally disconnected compact Hausdorff" definition. For example, we should know that a map to a discrete space is continuous iff it factors through a finite quotient.
Adam Topaz (Nov 29 2020 at 14:48):
And we need to prove that Profinite
has limits (all limits? or is it just filtered? I don't remember), this way we can construct profinite sets as inverse limits of finite sets
Reid Barton (Nov 29 2020 at 14:48):
And we should be able to construct examples as cofiltered limits of finite sets (e.g. build the p-adics from just algebraic data) and know that the original diagram presents the profinite set in this sense
Adam Topaz (Nov 29 2020 at 14:51):
By the way, there is a more or less canonical way to write a profinite set as an inverse limit of finites, see e.g. the proof in the stacks project
Reid Barton (Nov 29 2020 at 14:53):
that makes sense because as a category, profinite sets is (Ind(FinSet^op))^op
Reid Barton (Nov 29 2020 at 14:53):
so it's the opposite of a locally finitely presentable category
Adam Topaz (Nov 29 2020 at 14:56):
Does mathlib have Ind?
Adam Topaz (Nov 29 2020 at 14:56):
Or Pro?
Reid Barton (Nov 29 2020 at 15:00):
Not sure but it's definitely capable of expressing one definition of Ind
Reid Barton (Nov 29 2020 at 15:00):
whether that's useful is another matter
Reid Barton (Nov 29 2020 at 15:06):
If we unfold the definitions it says that a profinite set is something that we know how to map into finite sets, in a way that respects finite limits. But this only gives us access to the "locale" side, e.g., we know what all the ways to split our profinite set into two clopen subsets are, because they're the maps into {0,1}
Reid Barton (Nov 29 2020 at 15:08):
To get the points of the profinite set you'd need some Stone duality-like "assignment of an element of to every map "
Reid Barton (Nov 29 2020 at 15:09):
which I guess is just saying: natural transformations from the one-point space to , so maybe it's not too bad
Reid Barton (Nov 29 2020 at 15:11):
So in this picture a profinite set is just a finite limit-preserving (covariant) functor from finite sets to sets
Reid Barton (Nov 29 2020 at 15:13):
I think Scott did add recently-ish that filtered colimits commute with finite limits, which is the main thing you need to make this workable at all
Adam Topaz (Nov 29 2020 at 15:18):
So a profinite set X is identified with the functor sending a finite set F to the set of continuous maps X to F?
Kevin Buzzard (Nov 29 2020 at 15:29):
This raises the question as to how important the underlying topological space is. I guess that depends on what you're trying to do.
Reid Barton (Nov 29 2020 at 15:36):
The topology is easy to describe too, it should be the coarsest one that makes the maps to finite sets continuous. So we can write down both categories and both functors and if we prove they form an equivalence then we probably have a pretty good API for either side.
Reid Barton (Nov 29 2020 at 15:41):
Of course finite sets are sufficiently more annoying than expected that it might actually be technically easier to use topological spaces
Reid Barton (Nov 29 2020 at 15:46):
I still like my half-joking suggestion to make Type 0
only allow finite types
Adam Topaz (Nov 29 2020 at 15:46):
I think it's a mistake to divorce from topological spaces (even if there is a way to describe the topology). E.g. we will want to ensure that talking about closed subgroups of a profinite group is as easy as possible
Reid Barton (Nov 29 2020 at 15:52):
In general I think the answer to choice of representation questions like this has to be to choose both representations
Adam Topaz (Nov 29 2020 at 15:55):
Right. For example, we can start like this:
structure Profinite :=
(to_Top : Top)
[is_compact : compact_space to_Top]
[is_t2 : t2_space to_Top]
[is_td : totally_disconnected_space to_Top]
Then construct the functor to FinType \functor Type*
that we discussed above and prove it's fully faithful, and describe its essential image as well.
Adam Topaz (Nov 29 2020 at 15:56):
Proving that Profinite
has finite coproducts should be easy, and proving that it has limits shouldn't be too bad (e.g. the category CompHaus
has limits, as can be proved using the equivalence with Compactum
)
Adam Topaz (Nov 29 2020 at 15:57):
I guess the forgetful functor Profinite \functor CompHaus
creates limits?
Adam Topaz (Nov 29 2020 at 16:04):
This is another recent addition which will help in proving that finite sets are profinite :rofl:
https://github.com/leanprover-community/mathlib/blob/1f1ba587f272d203a40801c6b21af453f7de6ee3/src/topology/subset_properties.lean#L1305
Adam Topaz (Nov 29 2020 at 16:06):
Reid Barton said:
I still like my half-joking suggestion to make
Type 0
only allow finite types
What we really need is a whole new proof assistant where everything takes place internally in the topos of condensed sets.
Jesse Michael Han (Nov 29 2020 at 18:16):
i'm waiting for the magical day when there's a usable soundness theorem for replaying proofs in {algebraic, coherent, etc} theories in the internal logic of toposes that interpret them
Reid Barton (Dec 02 2020 at 15:21):
Adam Topaz said:
Reid Barton said:
I still like my half-joking suggestion to make
Type 0
only allow finite typesWhat we really need is a whole new proof assistant where everything takes place internally in the topos of condensed sets.
I agree this somehow feels very natural. Inductive types are discrete while coinductive types are profinite. Lean doesn't have coinductive types built in, but you can build them using functions and I think this construction produces the right topology when internalized in condensed sets. If you combine inductive and coinductive types then you get things like infinite unions of profinite sets that appear everywhere in the condensed theory, and if you also add in (exact) quotients then you get things that look like arbitrary condensed sets.
Christian Merten (Sep 22 2023 at 15:25):
I am new to lean, but would like to add the characterization of profinite sets as compact, T2 spaces that have clopen sets as topological basis. The reason for this is, that I would then like to add the category of profinite groups and show the corresponding characterizations there, i.e. a profinite group is an inverse limit of finite discrete groups and equivalently a compact, T2 topological group, that admits a neighborhood basis of the neutral element given by open, normal subgroups. Is there already some process in this direction?
Johan Commelin (Sep 22 2023 at 15:31):
Welcome! I think most of these things already exist in mathlib, or maybe in slight variants. Probably the category of profinite groups hasn't been defined yet.
Christian Merten (Sep 22 2023 at 15:34):
Could you give me a hint, where to look for these statements in mathlib?
Johan Commelin (Sep 22 2023 at 15:36):
These are files on profinite sets:
Mathlib/Topology/Category/Profinite/AsLimit.lean
Mathlib/Topology/Category/Profinite/Basic.lean
Mathlib/Topology/Category/Profinite/CofilteredLimit.lean
Mathlib/Topology/Category/Profinite/EffectiveEpi.lean
Mathlib/Topology/Category/Profinite/Limits.lean
Mathlib/Topology/Category/Profinite/Projective.lean
Johan Commelin (Sep 22 2023 at 15:37):
There's also stuff on neighborhood basis of 0 in topological groups.
Christian Merten (Sep 22 2023 at 15:39):
Thank you, I was thinking about something like:
example : (X : TopCat) [T2Space X] [CompactSpace X] :
TotallyDisconnectedSpace X ↔ IsTopologicalBasis {s | IsClopen s}
and corresponding refined statements for profinite groups.
Alex J. Best (Sep 22 2023 at 15:41):
@loogle TotallyDisconnectedSpace, TopologicalSpace.IsTopologicalBasis
Alex J. Best (Sep 22 2023 at 15:42):
Ok idk why the bot doesn't like me but I wanted to link you to https://loogle.lean-fro.org/?q=TotallyDisconnectedSpace%2C+TopologicalSpace.IsTopologicalBasis
Christian Merten (Sep 22 2023 at 15:43):
Thank you, that is very convenient.
Alex J. Best (Sep 22 2023 at 15:45):
Which shows two answers for the forward direction of your example (I guess one is strictly more general than the other so one should be deleted?)
Christian Merten (Sep 22 2023 at 15:49):
Is there some interest in adding the converse, ideally a lemma showing the converse without the compactness assumptions?
Also are there corresponding statements on the level of profinite groups, i.e. that there is a neighborhood basis of the neutral element of open, normal subgroups? I tried to loogle this as well, but I did not find anything (which certainly does not mean anything).
Alex J. Best (Sep 22 2023 at 15:53):
Oh it looks like we have the converse in the form of docs#totallySeparatedSpace_of_t1_of_basis_clopen combined with docs#compact_t2_tot_disc_iff_tot_sep
Christian Merten (Sep 22 2023 at 15:55):
Wow, I really need to learn how to navigate mathlib more effectively, thank you!
Christian Merten (Sep 27 2023 at 19:45):
Is there somewhere a statement along the lines of:
import Mathlib.GroupTheory.Subgroup.Basic
import Mathlib.Topology.Category.TopCat.Basic
import Mathlib.Topology.Algebra.Group.Basic
variable (G : Type u) [Group G] [TopologicalSpace G] [TopologicalGroup G]
[TotallyDisconnectedSpace G] [CompactSpace G] [T2Space G]
example : Filter.HasBasis (nhds 1)
(fun s : Subgroup G => IsOpen s.carrier ∧ Subgroup.Normal s)
(fun s => s.carrier) :=
sorry
To clarify: I want to state that for a profinite group, the neutral element has a neighborhood basis of open and normal subgroups.
Adam Topaz (Sep 27 2023 at 19:55):
could you please keep your lines of code a bit shorter? Also, please read #mwe -- your code snippet doesn't include any imports.
Christian Merten (Sep 27 2023 at 20:00):
Adam Topaz said:
could you please keep your lines of code a bit shorter? Also, please read #mwe -- your code snippet doesn't include any imports.
Sorry, I hope the snippet now meets all requirements.
Adam Topaz (Sep 27 2023 at 20:01):
No problem at all. It just helps to be able to copy and paste your code, and making a true #mwe helps a lot!
Adam Topaz (Sep 27 2023 at 20:20):
Presumably you want to use docs#TopologicalGroup ? In any case, my guess is that we don't have such an assertion.
Christian Merten (Sep 27 2023 at 20:21):
Adam Topaz said:
Presumably you want to use docs#TopologicalGroup ? In any case, my guess is that we don't have such an assertion.
yes, there is a typo in the snippet, instead of two TopologicalSpace G
instances, one of them should be TopologicalGroup G
.
Christian Merten (Sep 27 2023 at 20:31):
If I typed up a proof of this, would there be any interest in opening up a PR to mathlib for this? I suppose the proof needs some lemmas on the finiteness of some orbits of the conjugate action of a compact group on its subgroups.
Adam Topaz (Sep 27 2023 at 20:36):
yes, I think this is definitely worthwhile to have in mathlib.
Patrick Massot (Sep 27 2023 at 20:52):
Before you start, you can write this statement more compactly as
import Mathlib.Topology.Algebra.Group.Basic
open Topology Filter
variable (G : Type*) [Group G] [TopologicalSpace G] [TopologicalGroup G]
[TotallyDisconnectedSpace G] [CompactSpace G]
example : (𝓝 (1: G)).HasBasis (fun s : Subgroup G ↦ IsOpen (s : Set G) ∧ s.Normal) (fun s ↦ s)
In particular we never explicitly use Subgroup.carrier
.
Patrick Massot (Sep 27 2023 at 20:53):
This isn't purely cosmetic, you will have to fight Mathlib if you insist on those s.carrier
.
Patrick Massot (Sep 27 2023 at 20:54):
Read Section 7.3 of MIL if needed.
Christian Merten (Sep 27 2023 at 20:55):
Thanks!
Christian Merten (Oct 27 2023 at 22:56):
I finally took the time to write a working version of this: https://github.com/leanprover-community/mathlib4/pull/7991. I used some of @Patrick Massot s suggestions about showing finiteness of a quotient (in some other thread here on Zulip). Probably most of this should go to some other file or can be replaced entirely by some library function, any suggestions are very much appreciated.
Last updated: Dec 20 2023 at 11:08 UTC