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 there exists some profinite and some map of condensed sets and a surjective map of profinite sets such that the obvious diagram with target commutes (this is taken to be 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 sorry
s 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 sorry
s 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 .)
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):
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 sorry
s 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
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 .
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 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 sorry
s 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