Zulip Chat Archive
Stream: condensed mathematics
Topic: extremally disconnected sets
Johan Commelin (Jul 05 2021 at 10:05):
If anyone is looking for something to get started with the second half: we'll need the definition of extremally disconnected sets and the fact that they are projective objects in Profinite.
Here's a tiny bit that starts on this (from way before LTE was a thing): https://github.com/ImperialCollegeLondon/condensed-sets/blob/master/src/extremally_disconnected.lean
Johan Commelin (Jul 05 2021 at 10:06):
Feel free to copy-pasta this into the LTE repo, but it could also go directly to mathlib.
Damiano Testa (Jul 05 2021 at 10:35):
Johan, I am happy to create a PR to mathlib, but why don't you want to do it yourself? Is there some trap?
Johan Commelin (Jul 05 2021 at 11:03):
No, it's just that it isn't finished yet.
Johan Commelin (Jul 05 2021 at 11:04):
I think I only did one direction of "extr.disc = projective"
Damiano Testa (Jul 05 2021 at 11:06):
Ok, I updated the code, since some lemmas had changed names, others were already in mathlib!
PR #8196
Patrick Massot (Jul 05 2021 at 12:58):
Now we'll need a linter checking that nobody writes "extremely disconnected" instead of "extremally disconnected".
Patrick Massot (Jul 05 2021 at 12:59):
(and then a brain linter to prevent me from reading extremely anyway).
Adam Topaz (Jul 05 2021 at 13:11):
def compact_t2.projective : Prop :=
Π {Y Z : Type u} [topological_space Y] [topological_space Z],
by exactI Π [compact_space Y] [t2_space Y] [compact_space Z] [t2_space Z],
by exactI Π {f : X → Z} {g : Y → Z} (hf : continuous f) (hg : continuous g)
(g_sur : surjective g),
∃ h : X → Y, continuous h ∧ g ∘ h = f
Don't you think it would be better to just use docs#CompHaus?
Adam Topaz (Jul 05 2021 at 13:14):
and maybe docs#category_theory.projective
Adam Topaz (Jul 05 2021 at 13:15):
(I guess we would have to prove that epi = surjective
in CompHaus
, but this should be easy)
Johan Commelin (Jul 05 2021 at 13:20):
Certainly! This code is very old.
Johan Commelin (Jul 05 2021 at 13:40):
@Damiano Testa Do you feel like implementing these changes? (I can understand if you are too busy with the order refactor, and such.)
Damiano Testa (Jul 05 2021 at 13:40):
I will give it a go and will let you know if I need help!
Damiano Testa (Jul 05 2021 at 13:41):
Especially the CompHaus
part seems doable. I am not sure about the categorical notion of projectivity, since I never used categories in Lean.
Damiano Testa (Jul 05 2021 at 13:50):
In fact, here is the first issue that I come across.
I changed the definition of compact_t2.projective
to
def compact_t2.projective : Prop :=
Π {Y Z : CompHaus},
by exactI Π {f : X → Z} {g : Y → Z} (hf : continuous f) (hg : continuous g)
(g_sur : surjective g),
∃ h : X → Y, continuous h ∧ g ∘ h = f
Lean now does not like let h : stone_cech X → Y := stone_cech_extend ht
since
type mismatch at application
stone_cech_extend ht
term
ht
has type
continuous t
but is expected to have type
continuous ?m_5
Additional information:
/home/damiano/Matematica/Lean/mathlib_poly-reverse/src/topology/extremally_disconnected.lean:85:30: context: switched to simple application elaboration procedure because failed to use expected type to elaborate it, error message
type mismatch, term
stone_cech_extend ?m_8
has type
stone_cech ?m_1 → ?m_3 : Type ?
but is expected to have type
stone_cech X → ↥Y : Type (max u u_1)
I believe that this has to do with some weird "coercion to sort" business that is going on. Is there an easy fix for this, or should I consider proving a version of stone_cech_extend
that would apply with the current context?
Johan Commelin (Jul 05 2021 at 13:50):
Use CompHaus.{u}
. I think the issue is that you've got stuff in different universes.
Damiano Testa (Jul 05 2021 at 13:51):
Thanks Johan! This fixed the first issue!
I had noticed that Y Z
were assumed in the same universe the first time around, but disregarded it with the change...
(Btw, this solves completely the first broken proof.)
Damiano Testa (Jul 05 2021 at 13:52):
The second issue, in the second and last broken proof, appears similar, then:
rcases h continuous_id f_cont f_sur with ⟨g, hg, g_sec⟩,
gives error
type mismatch at application
h continuous_id
term
continuous_id
has type
continuous id
but is expected to have type
continuous ?m_2
Johan Commelin (Jul 05 2021 at 13:56):
Hmm, what is the context here?
Damiano Testa (Jul 05 2021 at 13:57):
state:
X : CompHaus,
h : compact_t2.projective ↥X,
U : set ↥X,
hU : is_open U,
Z₁ : set (↥X × bool) := Uᶜ.prod {tt},
Z₂ : set (↥X × bool) := (closure U).prod {ff},
Z : set (↥X × bool) := Z₁ ∪ Z₂,
hZ₁ : is_closed Z₁,
hZ₂ : is_closed Z₂,
hZ : is_closed Z,
h_compl : (subtype.val ⁻¹' Z₂)ᶜ = subtype.val ⁻¹' Z₁,
f : ↥Z → ↥X := prod.fst ∘ subtype.val,
f_cont : continuous f,
f_sur : surjective f,
_inst : compact_space ↥Z
⊢ is_open (closure U)
Damiano Testa (Jul 05 2021 at 13:57):
Maybe Z
should be made into a CompHaus
?
Johan Commelin (Jul 05 2021 at 14:00):
Hmm, maybe life becomes easier if you switch to CompHaus
(the category) and the categorical version of projective
at the same time.
Johan Commelin (Jul 05 2021 at 14:00):
Because now you have objects in the category, but you are not using the morphisms.
Damiano Testa (Jul 05 2021 at 14:01):
Ok, makes sense. I will try to make the change, but any pointer would be appreciated!
Johan Commelin (Jul 05 2021 at 14:01):
Otoh, it's not clear to me that we want this statement in CompHaus
instead of Profinite
. And if we bundle... then we need to choose (or do both)
Johan Commelin (Jul 05 2021 at 14:01):
The unbundled version didn't care.
Damiano Testa (Jul 05 2021 at 14:02):
For this approach, would that not also require X
to be in CompHaus
, somewhat defeating the purpose? I may be not understanding the Lean-categorical side of the story, though...
Damiano Testa (Jul 05 2021 at 14:03):
Ok, maybe I am being silly: you would require the map between Y
and Z
to be in the CompHaus
category and the others outside?
Johan Commelin (Jul 05 2021 at 14:05):
The problem is: if X : CompHaus
, then you cannot have X : Profinite
.
Johan Commelin (Jul 05 2021 at 14:06):
Whereas with (X : Type) [compact_space X] [t2_space X]
you could always add [totally_disconnected_space X]
whenever you need it.
Damiano Testa (Jul 05 2021 at 14:06):
I am starting to think that, at this level, it might make sense to keep the assumptions split around. Maybe bundling can come later, once all the preparatory stuff is done?
Johan Commelin (Jul 05 2021 at 14:07):
I agree. But I only have intuition to back that up.
Johan Commelin (Jul 05 2021 at 14:08):
In general mathlib seems to follow the pattern "treat unbundled first", and then "bundle it up"
Johan Commelin (Jul 05 2021 at 14:09):
(And when we don't, it looks like we regret it later. See e.g., the bundled hom refactor. We're kinda thinking that maybe we want to resurrect the unbundled stuff [although not as typeclasses, but ordinary predicates] and have both approaches here as well.)
Adam Topaz (Jul 05 2021 at 14:29):
This can all be handled with the fact that the forgetful functor from Profinite to CompHaus reflects epimorphisms.
Johan Commelin (Jul 05 2021 at 14:30):
Sure, but you don't want to do that every time you use it, right?
Adam Topaz (Jul 05 2021 at 14:30):
What do you mean? Just add an instance
Johan Commelin (Jul 05 2021 at 14:31):
hmm, maybe I'm confused about what you want to do...
Johan Commelin (Jul 05 2021 at 14:33):
Are you talking about restating everything for Profinite
with 1-line proofs that reduce it to CompHaus
?
Adam Topaz (Jul 05 2021 at 14:45):
Okay, now I'm confused. What's the endgame for this?
Johan Commelin (Jul 05 2021 at 14:49):
At some point we want to show that Cond(Ab)
has enough projectives. And this will be an ingredient.
Johan Commelin (Jul 05 2021 at 14:49):
I haven't thought hard about how to get to :this: in Lean.
Adam Topaz (Jul 05 2021 at 14:50):
If I recall correctly, the consensus is to define Cond(Type)
as sheaves on Profinite
?
Adam Topaz (Jul 05 2021 at 14:50):
(as opposed to, say, sheaves on CompHaus
)
Johan Commelin (Jul 05 2021 at 14:51):
Yes, I think sheaves on Profinite seems to be the best approach.
Johan Commelin (Jul 05 2021 at 14:51):
Balancing in the middle between ExtrDisc
and CompHaus
.
Damiano Testa (Jul 05 2021 at 14:54):
So, if I am following the discussion, we will want to bundle Profinite
more than ExtrDisc
and CompHaus
, right? If so, does this mean that the PR above does not need change?
Johan Commelin (Jul 05 2021 at 14:56):
We already have Profinite
and CompHaus
as categories in mathlib. ExtrDisc
would be a follow-up PR.
Johan Commelin (Jul 05 2021 at 14:57):
It's not clear to me what the best Lean definition of "projective space" is. The categorical predicate only works for bundled objects. My intuition says we might want to go unbundled before going bundled.
Adam Topaz (Jul 05 2021 at 14:59):
If all we care about is existence, then we don't really need all this stuff. By some adjunctions you would know that is projective when is a projective object of Profinite
, and now you just have to prove that there are enough such projective objects, which you can get as a consequence of the StoneCech
adjunction
Adam Topaz (Jul 05 2021 at 15:02):
The only thing that has me slightly concerned is the argument using Zorn's lemma at the bottom of page 12 of Condensed.pdf
. I feel like this will create a universe bump.
Peter Scholze (Jul 05 2021 at 15:28):
I think Zorn's lemma is overkill there, don't worry about this.
Adam Topaz (Jul 05 2021 at 15:30):
Well, I think my worry about the universe bump is unrelated to Zorn.
Peter Scholze (Jul 05 2021 at 15:33):
Hmm, I guess one question is what your definition of "a class of objects generates" is. What is your definition?
Adam Topaz (Jul 05 2021 at 15:33):
I don't think we have such a definition yet in mathlib
Adam Topaz (Jul 05 2021 at 15:40):
But even if we define the notion of a generating class as saying something like ", are jointly faithful", won't we have to take a large colimit to obtain a projective presentation of a given condensed abelian group?
Peter Scholze (Jul 05 2021 at 15:41):
I don't think it's large. I think the index category is the category of pairs of a compact projective and a map . This is still small.
Peter Scholze (Jul 05 2021 at 15:43):
Well, it's small in this -small setting
Peter Scholze (Jul 05 2021 at 15:43):
But aren't you kind of following that? Where is some universe cutoff?
Adam Topaz (Jul 05 2021 at 15:45):
Hmm... in lean, unless we're very careful, this would involve quantifying as something like: Forall X : Cond(Ab.{u})
, [compact_projective X]
, blah, which will force us into universe level u + 1
.
Peter Scholze (Jul 05 2021 at 15:47):
Hmm. OK, I think I'd have to learn much more about how Lean handles universes to comment on this
Adam Topaz (Jul 05 2021 at 15:49):
A minimized bit of code is probably something like this:
set_option pp.universes true
universes u
#check Σ (X : Type u), X
-- Σ (X : Type u), X : Type (u+1)
Peter Scholze (Jul 05 2021 at 15:50):
Hmm I think you should somewhere ensure that your extremally disconnected sets are in a smaller universe than your abelian groups
Peter Scholze (Jul 05 2021 at 15:50):
Did you already account for that?
Adam Topaz (Jul 05 2021 at 15:50):
Peter Scholze said:
Did you already account for that?
I don't think so.
Adam Topaz (Jul 05 2021 at 15:51):
And the only way to do that is to start everything off with Cond(Ab.{u+1})
.
Adam Topaz (Jul 05 2021 at 15:52):
@Bhavik Mehta what do you think?
Bhavik Mehta (Jul 05 2021 at 15:55):
My instinct would be to use the small
predicate rather than adjust the universe levels, but I'll need to think about this a little
Bhavik Mehta (Jul 05 2021 at 15:59):
My primary concern is whether the universe solution is good enough - I'd like to verify that Prop 1.7 works and we don't hit the issue mentioned in Warning 2.14; if that is an issue then my existing definition of Cond
won't be good enough
Johan Commelin (Jul 05 2021 at 16:05):
But with our pyknotic setup, I don't think Warning 2.14 will be a problem, right? Or are you saying that the problem is still there, but now on a universe level? I guess so...
Bhavik Mehta (Jul 05 2021 at 16:09):
Johan Commelin said:
But with our pyknotic setup, I don't think Warning 2.14 will be a problem, right? Or are you saying that the problem is still there, but now on a universe level? I guess so...
I'm saying that I'm not (yet) convinced the problem is gone in our setup
Johan Commelin (Aug 09 2021 at 06:25):
@Adam Topaz @Damiano Testa What is the plan with #8196 ? Would it be better to keep the code in the LTE repo for now? Then it can evolve a bit, and once it is mature and the api is complete, then we PR it to mathlib?
Damiano Testa (Aug 09 2021 at 06:29):
That is ok for me.
Besides, I have not found much time to devote to Lean this summer and probably the situation will not change for the month of August, so slowing down is a bit of a necessity for me!
Adam Topaz (Aug 09 2021 at 13:58):
I'm still not sure whether we actually need this definition in LTE. I'm under the impression that all we care about is that these things are projective objects in, say, Profinite
. Do we ever actually need the following characterization?
class extremally_disconnected : Prop :=
(open_closure : ∀ U : set X, is_open U → is_open (closure U))
Johan Commelin (Aug 09 2021 at 14:00):
I don't think so.
Adam Topaz (Aug 09 2021 at 14:00):
So my suggestion is to just use [is_projective X]
for X : Profinite
when we need it.
Johan Commelin (Aug 09 2021 at 14:01):
I think that what we need is: extr.disc = projective in Profinite
and also that stone-cech is extr.disc.
Together, that gives us enough projectives.
Adam Topaz (Aug 09 2021 at 14:01):
I guess we should prove that the stone cech compactification of a discrete set is projective in Profinite, but that should be easy
Johan Commelin (Aug 09 2021 at 14:02):
We'll also need ExtrDisc
as a category. Do you just want to define it as the subtype
{X : Profinite // is_projective X}
Adam Topaz (Aug 09 2021 at 14:02):
Why do we need it as a category?
Johan Commelin (Aug 09 2021 at 14:02):
To show that Cond(Foo)
is the same as certain presheaves on ExtrDisc
Johan Commelin (Aug 09 2021 at 14:03):
That way we can get [enough_projectives Cond(Ab)]
Johan Commelin (Aug 09 2021 at 14:03):
If I understand things correctly...
Adam Topaz (Aug 09 2021 at 14:03):
Right, but for this we just take a presheaf on Profinite
and ask for some condition in terms of [is_projective X]
, etc., which we prove is equivalent to the sheaf condition.
Johan Commelin (Aug 09 2021 at 14:03):
Also, proving that Cond(Ab)
is an abelian category might be easier if we work with sheaves on ExtrDisc
.
Johan Commelin (Aug 09 2021 at 14:04):
Ok... do you think you can stub that out?
Adam Topaz (Aug 09 2021 at 14:04):
Sure.
Johan Commelin (Aug 09 2021 at 14:04):
Feel free to use as many sorry
s as you want.
Adam Topaz (Aug 09 2021 at 14:04):
I guess if sheafifying is easier over ExtrDisc
then that's one good reason to have this.
Adam Topaz (Aug 09 2021 at 14:39):
import category_theory.preadditive.projective
import condensed.condensed
namespace Profinite
open category_theory
open category_theory.limits
-- TODO: generalize
instance : projective (⊥_ Profinite) :=
{ factors := λ E X f e _, ⟨limits.initial.to _, by simp⟩ }
instance : has_initial (as_small Profinite) := sorry
universe v
variables {C : Type*} [category.{v+1} C] (F : (as_small.{v+1} Profinite.{v})ᵒᵖ ⥤ C)
-- I assume we want this to be a prop, but `is_terminal` and `preserves_limits_of_shape`
-- both contain data.
structure extr_sheaf_cond : Prop :=
(is_terminal : nonempty (is_terminal (F.obj (opposite.op (⊥_ _)))))
(preserves : ∀ (X Y : as_small.{v+1} Profinite.{v}) [projective X] [projective Y],
nonempty (preserves_limit (pair (opposite.op X) (opposite.op Y)) F))
def proetale_topology' : grothendieck_topology (as_small.{v+1} Profinite.{v}) :=
sorry
theorem extr_sheaf_iff : extr_sheaf_cond F ↔ presheaf.is_sheaf proetale_topology' F := sorry
end Profinite
This is more-or-less what I had in mind.
Adam Topaz (Aug 09 2021 at 14:40):
Unfortunately, we will have to deal with this as_small
nonsense :expressionless:
Adam Topaz (Aug 09 2021 at 14:46):
(pushed to condensed/proj_cond.lean
on master)
Johan Commelin (Aug 09 2021 at 15:08):
merci!
Johan Commelin (Aug 09 2021 at 16:55):
@Adam Topaz If we ever define analytic rings in lean, then we'll probably want to be a mathlib functor from ExtrDisc
to condensed -modules.
(This definition is somewhere on my mental todo-list/roadmap.)
Johan Commelin (Aug 09 2021 at 16:56):
The alternative would be to make a hands-on functorial pi-type defined for (X : Profinite) [is_projective X]
Adam Topaz (Aug 09 2021 at 18:21):
@Johan Commelin that's one option. Another is to have some general construction which builds a Cond foo
from such a pi-type satisfying something like extr_sheaf_cond
.
Johan Commelin (Aug 09 2021 at 18:57):
On paper, has type .
Adam Topaz (Aug 09 2021 at 19:09):
I thought this can be extended to Profinite
in a formal way, for example by expressing X : Profinite
as a quotient of where is the underlying set with the discrete topology.
Adam Topaz (Aug 09 2021 at 19:10):
I.e. is a colimit of .
Johan Commelin (Aug 09 2021 at 19:14):
The correct values of on general profinite sets will be "derived", in the sense that they land in the derived category but not necessarily in the heart. Only for extr.disc do you get honest modules.
Adam Topaz (Aug 09 2021 at 19:15):
Ah ok.
Adam Topaz (Aug 09 2021 at 19:24):
Wait, so how does the left adjoint from Proposition 7.5 of condensed.pdf reconcile with your comment @Johan Commelin ?
Johan Commelin (Aug 09 2021 at 19:29):
Ha, I might have misunderstood things... @Peter Scholze would you mind correcting/explaining?
Johan Commelin (Aug 09 2021 at 19:34):
Ooh wait. That left adjoint is colimit preserving. So it preserves colimits of modules. But that doesn't mean that is the colimit of ,
where is profinite, and a colimit of some extr.disc as Adam sketched above.
Adam Topaz (Aug 09 2021 at 19:37):
The functor has a left adjoint , right?
Johan Commelin (Aug 09 2021 at 19:37):
yeah, I just realized that... so what I'm saying is nonsense
Johan Commelin (Aug 09 2021 at 19:37):
which means that I'm still confused
Adam Topaz (Aug 09 2021 at 19:38):
(latex + zulip = hard)
Peter Scholze (Aug 09 2021 at 20:38):
The question is whether you want the left adjoint on the abelian level, or on the derived level. On the abelian level, what Adam said is correct. But in general, to compute the correct functor on the derived level, you have to use hypercovers by extremally disconnecteds and then write down the whole complex . Very often, it turns out that this lives in degree when it does on extremally disconnecteds -- I think in all cases I've ever considered -- but there's no reason this is always the case.
Peter Scholze (Aug 09 2021 at 20:43):
(See also the related Warning 7.6)
Johan Commelin (Aug 10 2021 at 06:34):
For the record: I'm working on showing that stone_cech
is projective.
Adam Topaz (Aug 10 2021 at 12:38):
Sounds good. Some of the proofs from src#Compactum should be similar
Johan Commelin (Aug 10 2021 at 12:55):
@Adam Topaz does lean already know that an epi
in Profinite
is surjective?
Adam Topaz (Aug 10 2021 at 12:57):
More or less, but not in those terms. I have somewhere in LTE that surjective implies a topological quotient map in Profinite
Johan Commelin (Aug 10 2021 at 12:57):
I have an epi, and I need to show that it is surjective. I hope this follows out of the discrete_quotient stuff somehow?
Adam Topaz (Aug 10 2021 at 13:09):
Maybe... But I think there is more to it... I can help more in about an hour (on mobile right now)
Patrick Massot (Aug 11 2021 at 08:46):
Will we need that extremally disconnected implies projective in CompHaus? It looks like knowing we enough projectives will be... enough.
Patrick Massot (Aug 11 2021 at 08:46):
Otherwise this is clearly something I could do.
Johan Commelin (Aug 11 2021 at 08:51):
I think #8613 is all we need for now
Patrick Massot (Aug 11 2021 at 09:46):
You mean you don't even need #8196?
Johan Commelin (Aug 11 2021 at 09:47):
Adam convinced me that we probably won't need it.
Patrick Massot (Aug 11 2021 at 09:48):
It's currently in a somewhat weird state of being half done.
Patrick Massot (Aug 11 2021 at 09:49):
And half-way between a natural concrete statement and something nicely packaged in category theory.
Johan Commelin (Aug 11 2021 at 09:51):
I agree. So I don't think that PR should go into mathlib as is.
Johan Commelin (Aug 11 2021 at 09:51):
Let me tag it as WIP
Johan Commelin (Aug 11 2021 at 09:52):
Ooh, I see now that you reviewed it yesterday.
Patrick Massot (Aug 11 2021 at 09:56):
I didn't really review it, I flagged small local optimizations.
Patrick Massot (Aug 11 2021 at 09:56):
But I didn't comment on the overall structure and statements.
Last updated: Dec 20 2023 at 11:08 UTC