Zulip Chat Archive

Stream: condensed mathematics

Topic: Prop 2.1


Adam Topaz (Apr 21 2022 at 16:52):

I added a skeleton for the inductive case of the injectivity part of the proof of Proposition 2.1 here:
https://github.com/leanprover-community/lean-liquid/blob/14a3e29edc37b48c3f7c55dd4d546f2c81365a66/src/free_pfpng/main.lean#L232

This proof contains a bunch of relatively small sorries, some of which should be trivial, while some a bit more complicated.
Any help with these would be much appreciated!

Johan Commelin (Apr 21 2022 at 17:32):

So that's the first 25% of the entire proof, basically?

Adam Topaz (Apr 21 2022 at 17:36):

I think surjectivity will actually be a bit easier.

Adam Topaz (Apr 21 2022 at 17:38):

Well, once the following is sorry-free: https://github.com/leanprover-community/lean-liquid/blob/b0c7649a6aebfa8f4bda55e06e462d240cb248a2/src/condensed/ab.lean#L446

Adam Topaz (Apr 21 2022 at 17:42):

Essentially that will reduce the proof of surjectivity to show that for all nn there exists some profinite TT and some map of condensed sets TZ[S]T \to \mathbb{Z}[S] and a surjective map of profinite sets TZ[S]nT \to \mathbb{Z}[S]_{\le n} such that the obvious diagram with target nZ[S]n\bigcup_n \mathbb{Z}[S]_{\le n} commutes (this TT is taken to be Sn×{1,0,1}nS^n \times \{-1,0,1\}^n in Analytic.pdf), and I don't think that will be too difficult.

Johan Commelin (Apr 21 2022 at 18:04):

Ok, sounds good!

Johan Commelin (Apr 21 2022 at 18:37):

Does the following sorry need a mathlib refactor? Or merely a library hunt? (cc @Andrew Yang)

instance : limits.has_limits_of_size.{u} Ab.{u+1} := sorry

Andrew Yang (Apr 21 2022 at 18:39):

We have docs#category_theory.limits.has_limits_of_size_shrink

Johan Commelin (Apr 21 2022 at 19:19):

Hmm, I'm not sure if that is enough...

Johan Commelin (Apr 21 2022 at 19:22):

Ooh, it is!

Adam Topaz (Apr 23 2022 at 11:29):

In other news, Profinite.mono_free'_to_condensed_free_pfpng_induction_aux is done.

Johan Commelin (Apr 23 2022 at 15:18):

The decl profinite_to_condensed_unit contains a sorry. But I don't think that decl is used in the rest of the file. Do you expect to use it at some point? (There are also some commented variants all the way at the bottom of the file.)

Adam Topaz (Apr 23 2022 at 17:21):

Let's leave it for now, but we can probably drop it later.

Johan Commelin (Apr 23 2022 at 17:23):

Another mystery: src/free_pfpng/basic.lean has a broken definition now that I filled in two sorrys there.

Johan Commelin (Apr 23 2022 at 17:23):

I don't understand how that can happen.

Johan Commelin (Apr 23 2022 at 17:23):

I pushed after filling in the sorry, so now the build is broken :see_no_evil:

Johan Commelin (Apr 23 2022 at 17:42):

The fix was easy: add .{u u}. Still, it's surprising that filling in two sorrys of type Prop could cause this issue.

Yaël Dillies (Apr 23 2022 at 17:47):

Johan breaking Lean every day a little more :upside_down:

Adam Topaz (Apr 23 2022 at 18:01):

I just pushed a proof of

lemma epi_Profinite_to_Condensed_map_of_epi {X Y : Profinite.{u}}
  (f : X  Y) [hf : epi f] : epi (Profinite_to_Condensed.map f) :=

with a few small sorries. This will be needed for the surjectivity part of 2.1.

Johan Commelin (Apr 23 2022 at 18:31):

Fixed some more sorries.

Johan Commelin (Apr 23 2022 at 18:31):

Only 9 left in that file

Adam Topaz (Apr 23 2022 at 19:11):

make it 8

Adam Topaz (Apr 23 2022 at 19:11):

(maybe 7?)

Johan Commelin (Apr 23 2022 at 19:12):

6 src/free_pfpng/main.lean

Johan Commelin (Apr 23 2022 at 19:12):

Of which 2 seem to be in quasi-dead code.

Johan Commelin (Apr 23 2022 at 19:13):

Of course there is also still

4 src/condensed/ab.lean

Adam Topaz (Apr 23 2022 at 19:13):

https://github.com/leanprover-community/lean-liquid/blob/2bbe6f6caef14ade0dceed174b6e9dc54af6a468/src/free_pfpng/main.lean#L563
:up: that one is a pretty serious sorry.

Adam Topaz (Apr 23 2022 at 19:16):

I think the ones in ab.lean should be manageable.

Johan Commelin (Apr 23 2022 at 19:33):

I'm working on

instance Profinite.is_iso_free_to_pfpng (S : Profinite.{u}) : is_iso S.free_to_pfpng :=

Johan Commelin (Apr 23 2022 at 19:33):

Shouldn't be too hard.

Adam Topaz (Apr 25 2022 at 15:36):

Update: free_pfpng/main.lean now has 13 sorries, but no "sorried" data.

Adam Topaz (Apr 25 2022 at 15:38):

(Well, except for the sorry in free_pfpng_profinite_iso, but that's somehow unrelated to the crux of Prop 2.1)

Adam Topaz (Apr 26 2022 at 13:21):

Here's is a sorry that has zero category theory involved, and is needed for the surjectivity part of Prop 2.1

lemma Profinite.pmz_to_free_pfpng_epi_aux {T : Type*} [fintype T]
  (r : nnreal)
  (f : T  )
  (hf :  i : T,  f i ∥₊  r) :
   (e : fin r⌋₊  pmz) (t : fin r⌋₊  T),
  ( (i : fin r⌋₊), (λ (s : T), if (t i = s) then (e i : ) else 0)) = f :=
sorry

(Here pmz is {1,1,0}\{1,-1,0\}.)
The lemma is here, in case anyone wants to take a look:
https://github.com/leanprover-community/lean-liquid/blob/ea406127dcb3d2ad72e51f9b59b4bc805b1f8f52/src/free_pfpng/main.lean#L910

Johan Commelin (Apr 26 2022 at 13:40):

@Adam Topaz Mathlib contains sign_type. Could that be reused in place of pmz?

Adam Topaz (Apr 26 2022 at 13:42):

Sure, i can switch out pmz.

Johan Commelin (Apr 26 2022 at 13:42):

Other question: shall we split the file?

Adam Topaz (Apr 26 2022 at 13:42):

yes, probably.

Adam Topaz (Apr 26 2022 at 13:42):

I can do it -- give me about 30 mins

Johan Commelin (Apr 26 2022 at 13:42):

All the sorries are at the bottom, and I need to wait quite a while to get rid of orange bars in the first 750 lines

Adam Topaz (Apr 26 2022 at 13:44):

The other chunky sorry left in this file is this:
https://github.com/leanprover-community/lean-liquid/blob/ea406127dcb3d2ad72e51f9b59b4bc805b1f8f52/src/free_pfpng/main.lean#L960

Yaël Dillies (Apr 26 2022 at 13:45):

This looks like a fun sorry.

Adam Topaz (Apr 26 2022 at 13:46):

Yeah, it's one of those things that's "trivial" mathematically, but is hard nontrivial to formalize.

Adam Topaz (Apr 26 2022 at 13:49):

Actually, another question: Do we have a name for (λ (s : T), if (t i = s) then (e i : ℤ) else 0)? It's just finsupp.single but as a plain function.

Johan Commelin (Apr 26 2022 at 13:57):

Is there docs#function.single? (Ans: no)

Johan Commelin (Apr 26 2022 at 13:58):

@Yaël Dillies Do you want to take it on?

Yaël Dillies (Apr 26 2022 at 13:59):

I can try while I'm on the train.

Adam Topaz (Apr 26 2022 at 14:22):

Okay, I split up the files. The lemma in question can now be found in free_pfpng/epi.lean near the bottom (and it now uses sign_type as well)

Yaël Dillies (Apr 26 2022 at 14:38):

Johan Commelin said:

Is there docs#function.single? (Ans: no)

You can use docs#function.update

Yakov Pechersky (Apr 26 2022 at 15:03):

docs#pi.single!

Yaël Dillies (Apr 26 2022 at 15:16):

Hmm... tasty

(finset.univ.to_list.map $ λ t, repeat (sign $ f t) (f t).nat_abs).join.inth

Yaël Dillies (Apr 26 2022 at 15:16):

I would be glad if someone had a better idea.

Yakov Pechersky (Apr 26 2022 at 16:07):

What's inth?

Johan Commelin (Apr 26 2022 at 16:11):

(Btw: I'm looking at the first two sorrys in epi.lean.)

Johan Commelin (Apr 26 2022 at 16:12):

Yakov Pechersky said:

What's inth?

list.nth but for inhabited types.

Johan Commelin (Apr 26 2022 at 16:12):

So it returns default when out of bounds.

Johan Commelin (Apr 26 2022 at 16:53):

Fixed three sorries

Yaël Dillies (Apr 26 2022 at 17:32):

Okay I think I got an idea which makes it trivial

Johan Commelin (Apr 26 2022 at 18:23):

Another sorry down

Johan Commelin (Apr 26 2022 at 18:25):

4 left in this file, 1 is for @Yaël Dillies, 2 are in comments, and then the final one at the bottom.

Adam Topaz (Apr 26 2022 at 18:38):

I'll try to take care of the last one.

Johan Commelin (Apr 27 2022 at 06:16):

Cool! I saw you pushed a bunch in the past hours. Looks like Prop 2.1 is almost done!

Johan Commelin (Apr 27 2022 at 06:17):

@Yaël Dillies Is your "idea which makes it trivial" something that you think you can push soonish?

Yaël Dillies (Apr 27 2022 at 06:43):

Yes! I'm working on it right now.

Yaël Dillies (Apr 27 2022 at 07:10):

I can tell you already that I further need [nonempty T].

Johan Commelin (Apr 27 2022 at 08:04):

I'm 99% sure that this is fine

Johan Commelin (Apr 27 2022 at 09:22):

In practice, we have T : discrete_quotient S. So if S is nonempty, then T is nonempty as well.
This means that we need to make a case distinction in the proof of

instance Profinite.pmz_to_free_pfpng_epi (S : Profinite.{u}) (j : nnreal) :
  epi (S.pmz_to_free_pfpng j) :=

on whether S is empty or not.

Johan Commelin (Apr 27 2022 at 09:28):

Hmm, that might actually be an issues for empty S and j \ge 1. We have

def Profinite.pmz_to_free_pfpng (S : Profinite.{u}) (j : nnreal) :
  S.pmz j⌋₊  (ProFiltPseuNormGrp₁.level.obj j).obj S.free_pfpng :=

which is in other words the map

(S×{1,0,1})j{0}(S \times \{-1,0,1\})^{\lfloor j \rfloor} \longrightarrow \{0\}

for all j.

Johan Commelin (Apr 27 2022 at 09:29):

If S is empty, then S.free_pfpng is the trivial group, and level j of that will always be the singleton {0}\{0\}.

Johan Commelin (Apr 27 2022 at 09:29):

But for j \ge 1 the LHS is empty, so there cannot be a surjective map.

Johan Commelin (Apr 27 2022 at 09:31):

So we probably have to do the case split on whether S is empty in another place of the proof.

Yaël Dillies (Apr 27 2022 at 09:32):

Yeah, exactly. The sorry you ask for is straight up wrong when T is empty, because there's no map ℕ → T.

Yaël Dillies (Apr 27 2022 at 09:42):

Sorry killed

Yaël Dillies (Apr 27 2022 at 09:43):

I didn't have cache so I don't know what I broke nor whether the noncomputable_theory introduced decidability issues that I didn't have in local.

Johan Commelin (Apr 27 2022 at 09:45):

Great! Thanks a lot.

Yaël Dillies (Apr 27 2022 at 09:47):

The trick was to generalize fintype T to s : finset T and then induct.

Johan Commelin (Apr 27 2022 at 12:03):

I just want to remark that this means we are now very very close to the point where all that's left is "just some homological algebra". All the condensed stuff will be done. Once Filippo and Kevin finish the 6.9/7.2 stuff, all the pseudo-normed-group stuff will also be done.
Then only the BD lemma remains, and a bunch of glue.

Adam Topaz (Apr 27 2022 at 12:23):

Oops! Yeah, I should have distinguished the (non)empty case.

In the empty case, S.free_pfpng and its condensed variants are trivial, and we already know that the comparison map is a mono, so that should be enough to show it's an iso.

Adam Topaz (Apr 27 2022 at 12:29):

So I think you may as well assume that S is nonempty (hence T is nonempty) in the whole file free_pfpng/epi.lean and do the case split in free_pfpng/main.lean.

Adam Topaz (Apr 27 2022 at 12:30):

I can do that when I get to my office in a couple of hours, if it's not taken care of before then ;)

Adam Topaz (Apr 27 2022 at 13:59):

@Yaël Dillies did you change the type of the lemma in question?

Adam Topaz (Apr 27 2022 at 14:00):

(except for the nonempty assumption, of course)

Yaël Dillies (Apr 27 2022 at 14:15):

I believe not, except for adding decidable_eq T and nonempty T.

Adam Topaz (Apr 27 2022 at 14:16):

It's okay, I fixed it.

Adam Topaz (Apr 27 2022 at 14:17):

You changed the functions from having domain fin _ to N, the sum to use finset.range, and the conclusion to say t,...\forall t, ... instead of an equality of functions. It was just a few lines to fix.

Yaël Dillies (Apr 27 2022 at 14:17):

Ah yeah, sorry I forgot

Adam Topaz (Apr 27 2022 at 14:40):

Okay, I took care of the empty case as well.

Adam Topaz (Apr 27 2022 at 14:42):

So now mono.lean, epi.lean are sorry-free, and main.lean is sorry-free except for some naturality proof and some isomorphism which should be easy to construct. There are a few sorries left in condensed/coproducts and condensed/ab

Johan Commelin (Apr 27 2022 at 15:03):

Amazing!

Johan Commelin (Apr 27 2022 at 15:04):

Do you want to throw away the two commented sorrys in epi.lean?

Johan Commelin (Apr 27 2022 at 15:04):

Or should they stay around for something?

Adam Topaz (Apr 27 2022 at 15:10):

Ah, those were just some failed experiment. I removed them

Adam Topaz (Apr 27 2022 at 17:09):

No more sorries in coproducts.

Adam Topaz (Apr 27 2022 at 20:23):

Now condensed/ab.lean is sorry-free as well

Adam Topaz (Apr 27 2022 at 20:24):

So Prop 2.1 is (more-or-less) sorry-free

Johan Commelin (Apr 28 2022 at 06:36):

#print axioms free_pfpng_profinite_iso
-- prints
propext
quot.sound
classical.choice

Johan Commelin (Apr 28 2022 at 06:38):

Adam, that was a heroic effort! You pulled it off in a couple of days. Fantastic!

Johan Commelin (Apr 28 2022 at 06:38):

I just updated the blueprint. Should have another green oval in a couple of minutes.

Johan Commelin (Apr 28 2022 at 06:54):

It's green: https://leanprover-community.github.io/liquid/dep_graph_section_2.html

Peter Scholze (Apr 28 2022 at 09:24):

I was chatting with Johan a week ago, asking him about what's left to do. My guess was that Proposition 2.1 would be the hardest remaining bit! So I think you're really closing in on the finish line here.

Peter Scholze (Apr 28 2022 at 09:25):

(Congratulations Adam!!)

Adam Topaz (Apr 28 2022 at 14:43):

I should add one more point regarding Prop 2.1 -- I think it's a fairly important milestone for our formalization effort, since its the key result which ties together the condensed side with the more concrete CompHausFiltPseuNormGroup side.

Johan Commelin (Apr 28 2022 at 14:54):

Yes, it is a nontrivial computation about condensed sets. Maybe the only nontrivial one we need.


Last updated: Dec 20 2023 at 11:08 UTC