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 Z[T]\mathbb{Z}[T] is projective when TT 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 "Hom(Xi,)Hom(X_i,-), iIi \in I 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 XiX_i and a map XiMX_i\to M. This is still small.

Peter Scholze (Jul 05 2021 at 15:43):

Well, it's small in this κ\kappa-small setting

Peter Scholze (Jul 05 2021 at 15:43):

But aren't you kind of following that? Where κ\kappa 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 sorrys 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 (A,M)(\mathcal A, \mathcal M) in lean, then we'll probably want M\mathcal M to be a mathlib functor from ExtrDisc to condensed A\mathcal A-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 M\mathcal M 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, M\mathcal M has type extr.disc.ModAcond\text{extr.disc.} \to \text{Mod}^{\text{cond}}_{\mathcal A}.

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 βXδ\beta X^\delta where XδX^\delta is the underlying set with the discrete topology.

Adam Topaz (Aug 09 2021 at 19:10):

I.e. XX is a colimit of β(βXδ×XβXδ)βXδ\beta (\beta X^\delta \times_X \beta X^\delta) \rightrightarrows \beta X^\delta.

Johan Commelin (Aug 09 2021 at 19:14):

The correct values of M\mathcal M 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 A[S]\underline{\mathcal A}[S] is the colimit of A[Tj]\underline{\mathcal A}[T_j],
where SS is profinite, and a colimit of some extr.disc TjT_j as Adam sketched above.

Adam Topaz (Aug 09 2021 at 19:37):

The functor ModACond(Set)Mod_{\underline{\mathcal{A}}} \to Cond(Set) has a left adjoint SA[S]S \mapsto \underline{\mathcal{A}}[S], 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 SSS_\bullet\to S by extremally disconnecteds and then write down the whole complex M[S]\mathcal M[S_\bullet]. Very often, it turns out that this lives in degree 00 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