Zulip Chat Archive
Stream: kbb
Topic: SL2Z action
Johan Commelin (Sep 14 2018 at 09:54):
I'm trying to continue Patrick's work on finiteness of the quotient SL2Z \ (Mat m)
.
This is one (approximate) step that would be useful:
def reps := {A : Mat m | A.c = 0 ∧ 0 ≤ A.a ∧ 0 ≤ A.b ∧ int.nat_abs A.b ≤ int.nat_abs A.d } def ι : reps m → fin m := λ A, _
Johan Commelin (Sep 14 2018 at 09:54):
I get a deterministic timeout just for parsing the type of ι
Kenny Lau (Sep 14 2018 at 09:54):
is that MWE?
Johan Commelin (Sep 14 2018 at 09:55):
Proof strategy: we need to prove that reps
is finite. Do this by injecting into fin m × fin m × fin m
.
Johan Commelin (Sep 14 2018 at 09:55):
It is not exactly a MWE. You can find it by pulling the latest commits from kbb
Kenny Lau (Sep 14 2018 at 09:55):
I don't think that's a good strategy
Johan Commelin (Sep 14 2018 at 09:55):
Ok, so how do you prove that reps
is a finset?
Kenny Lau (Sep 14 2018 at 09:58):
equiv it with finset.filter (finset.univ : (finset (fin m × fin m × fin m))) sorry
Kenny Lau (Sep 14 2018 at 09:59):
also why int.nat_abs
?
Johan Commelin (Sep 14 2018 at 10:00):
Because I don't know better?
Kenny Lau (Sep 14 2018 at 10:00):
that's not what I mean
Johan Commelin (Sep 14 2018 at 10:00):
That's what you were using in your inductive proof
Kenny Lau (Sep 14 2018 at 10:00):
alright
Kenny Lau (Sep 14 2018 at 10:01):
I think I'll prove that it's a fintype
Kenny Lau (Sep 14 2018 at 10:05):
ah
Kenny Lau (Sep 14 2018 at 10:05):
of course it times out
Kenny Lau (Sep 14 2018 at 10:05):
m
is an integer
Kenny Lau (Sep 14 2018 at 10:05):
fin m
makes no sense
Johan Commelin (Sep 14 2018 at 10:07):
Why did it time out? Why didn't it slap me in the face?
Johan Commelin (Sep 14 2018 at 10:08):
It should just have errored immediately saying that m
is not a nat.
Kenny Lau (Sep 14 2018 at 10:09):
I think it's searching for a coercion from int to nat
Kenny Lau (Sep 14 2018 at 10:13):
also it still isn't a fintype
Johan Commelin (Sep 14 2018 at 10:16):
What isn't?
Kenny Lau (Sep 14 2018 at 10:17):
if m=0 I don't think it's a fintype
Kenny Lau (Sep 14 2018 at 10:17):
the repr
Johan Commelin (Sep 14 2018 at 10:17):
True. But you need m ≠ 0
Johan Commelin (Sep 14 2018 at 10:18):
Otherwise the orbits are parameterised by pairs (a,b)
with 0 ≤ a
and a,b
coprime.
Johan Commelin (Sep 14 2018 at 10:18):
Inparticularinfinitelymanyorbits
Johan Commelin (Sep 14 2018 at 10:21):
Maybe we should have assumed m : ℕ
from the beginning.
Kenny Lau (Sep 14 2018 at 11:11):
why on earth is there classical.prop_decidable in the beginning of the file?
Patrick Massot (Sep 14 2018 at 11:13):
Because it's a math file
Kenny Lau (Sep 14 2018 at 11:13):
about integers
Patrick Massot (Sep 14 2018 at 11:14):
The last lemma requires it
Patrick Massot (Sep 14 2018 at 11:15):
it needs decidable_eq (quotient (action_rel (SL2Z_M_ m)))
Kenny Lau (Sep 14 2018 at 11:15):
I'll prove it
Kenny Lau (Sep 14 2018 at 11:15):
after dinner
Patrick Massot (Sep 14 2018 at 11:16):
I guess we can't really avoid that
Kenny Lau (Sep 14 2018 at 11:17):
you're welcome to prove it if you want
Johan Commelin (Sep 14 2018 at 11:17):
@Patrick Massot Oo.ooo you released Kenny's inner wrath.
Johan Commelin (Sep 14 2018 at 11:17):
I guess in this case you can prove that decidable_eq
if you want to.
Patrick Massot (Sep 14 2018 at 11:18):
I already proved it: https://github.com/semorrison/kbb/blob/757806ec7f9848a5eb405ca26f5a12d94932a197/src/SL2Z_generators.lean#L4
Kenny Lau (Sep 14 2018 at 11:18):
no you haven't
Johan Commelin (Sep 14 2018 at 16:25):
Cool! So now we have established finiteness of the orbit set!
Patrick Massot (Sep 14 2018 at 18:42):
Cool! So now we have established finiteness of the orbit set!
Not quite, there has been some regression, let me fix that.
Kenny Lau (Sep 14 2018 at 18:42):
eh... I'm editing SL2Z_generators.lean
Patrick Massot (Sep 14 2018 at 18:42):
Done: no more sorry in SL2Z_generators.lean
Kenny Lau (Sep 14 2018 at 18:43):
ah I see what you did
Kenny Lau (Sep 14 2018 at 21:15):
done
Kenny Lau (Sep 14 2018 at 21:15):
/-- correct if m ≠ 0 -/ def reduce (m : ℤ) (A : Mat m) : Mat m := (λ n, nat.strong_rec_on n $ λ n ih A H, if H1 : n = 0 then if H2 : A.a > 0 then SL2Z_M_ m (T^(-(A.b/A.d))) A else SL2Z_M_ m (T^(-(-A.b/ -A.d))) (SL2Z_M_ m S (SL2Z_M_ m S A)) else ih _ (by subst H; from reduce_aux _ _ H1) (SL2Z_M_ m S (SL2Z_M_ m (T^(-(A.a/A.c))) A)) rfl : Π n (A:Mat m), n = int.nat_abs A.c → Mat m) _ A rfl --#reduce reduce (-1) ⟨1, 3, 1, 2, by norm_num⟩
Kenny Lau (Sep 14 2018 at 21:16):
def reps_equiv (hm : m ≠ 0) : quotient (action_rel (SL2Z_M_ m)) ≃ reps m :=
Kenny Lau (Sep 14 2018 at 21:16):
@Patrick Massot @Johan Commelin
Johan Commelin (Sep 15 2018 at 04:28):
Ah, that looks like a smart way to approach this!
Johan Commelin (Sep 15 2018 at 04:35):
@Kenny Lau The linecount in that file really exploded! You write Lean several orders of magnitude faster than I can read it.
Kenny Lau (Sep 15 2018 at 04:37):
lol
Johan Commelin (Sep 15 2018 at 04:38):
Also you seem to like refactoring code, whereas for me there is some nasty psychological barrier...
Johan Commelin (Sep 15 2018 at 04:39):
Anyway, thanks a lot!
Johan Commelin (Sep 15 2018 at 04:39):
@Mario Carneiro Have you seen what happened?
Mario Carneiro (Sep 15 2018 at 04:39):
what is this?
Johan Commelin (Sep 15 2018 at 04:39):
We now have several hundreds of lines of code about a silly type called SL2Z
, and it doesn't tie in to the matrix
code at all.
Johan Commelin (Sep 15 2018 at 04:40):
Well, that is not strictly true, Kenny proved that SL2Z
is equiv
to SL 2 int
.
Johan Commelin (Sep 15 2018 at 04:41):
But now this SL2Z
is acting on different sets, etc... and all this extra structure has not been tied to regular matrices.
Mario Carneiro (Sep 15 2018 at 04:41):
This makes me vaguely uncomfortable
Johan Commelin (Sep 15 2018 at 04:41):
I think this was a great experiment, but I'm somewhat worried.
Johan Commelin (Sep 15 2018 at 04:41):
Would you mind scrolling through the repo a bit?
Mario Carneiro (Sep 15 2018 at 04:42):
unless the properties are not shared by other dimensions or rings?
Kenny Lau (Sep 15 2018 at 04:42):
SL2Z is generated by two matrices
Johan Commelin (Sep 15 2018 at 04:42):
Right.
Mario Carneiro (Sep 15 2018 at 04:42):
induction_on
is frightening
Johan Commelin (Sep 15 2018 at 04:43):
But the action of SL2Z on other 2x2-matrices is generic
Johan Commelin (Sep 15 2018 at 04:43):
And the action of SL2Z on the upper-half plane is a restriction of the action of (GL 2 real)_+
on the upper half plane
Johan Commelin (Sep 15 2018 at 04:44):
So certain things are really specific, others are not.
Kenny Lau (Sep 15 2018 at 04:44):
which is the restriction of GL2R acting on CP1
Mario Carneiro (Sep 15 2018 at 04:45):
where should I be looking?
Mario Carneiro (Sep 15 2018 at 04:45):
the frightening proof linked above appears to have been removed
Kenny Lau (Sep 15 2018 at 04:45):
I made a function called reduce
Johan Commelin (Sep 15 2018 at 04:45):
You could start with modular_forms.lean
and then drill down.
Mario Carneiro (Sep 15 2018 at 04:46):
on master?
Johan Commelin (Sep 15 2018 at 04:46):
Most of the hard stuff is happening in SL2Z_generators
and some in modular_group.lean
Johan Commelin (Sep 15 2018 at 04:46):
Yes
Johan Commelin (Sep 15 2018 at 04:46):
We don't really use branches
Johan Commelin (Sep 15 2018 at 04:50):
In the end, I would like Hecke_operator
in hecke_operators.lean
to have a somewhat readable definition.
Johan Commelin (Sep 15 2018 at 04:50):
It feels to me like all the ingredients are now there... but as you can see, my attempt at writing the definition is :poop:
Last updated: Dec 20 2023 at 11:08 UTC