Zulip Chat Archive
Stream: maths
Topic: Notation for group(module,ideal) quotients
Anne Baanen (Nov 25 2021 at 11:23):
I am currently dealing with quotients of the form I^i / I^e
modulo I^(i+1) / I^e
, and the result is completely unreadable types. What do we think about introducing notation along the following lines:
G /ᵍ H
is docs#quotient_group.quotientA /ᵃ B
orA /⁺ B
is docs#quotient_add_group.quotientM /ᵐ N
is docs#submodule.quotientR /ⁱ I
is docs#ideal.quotient
And I guess for submonoids we can have:
M /ᶜ c
is docs#con.quotientM /ᶜ⁺ c
orM /ᵃᶜ c
is docs#add_con.quotient
Johan Commelin (Nov 25 2021 at 11:26):
Could a notation typeclass unify these?
Johan Commelin (Nov 25 2021 at 11:27):
Also, for your application, do you think life might become easier by reasoning with surjective maps and claims about what their kernels look like?
Anne Baanen (Nov 25 2021 at 11:29):
Johan Commelin said:
Could a notation typeclass unify these?
Hmm, that could probably work. The issue I foresee is that ideal.quotient
is (reducibly) defined as submodule.quotient
, which should probably be redefined in terms of add_group.quotient
anyway. I don't know how much the elaborator will enjoy that.
Johan Commelin (Nov 25 2021 at 11:32):
class has_quotient {A : Type u} (B : Type v) [set_like A B] :=
(quotient : B → Type (max u v))
notation `G` /// `H` := @has_quotient.quotient G _ _ _ H
or something like that.
Anne Baanen (Nov 25 2021 at 11:39):
Johan Commelin said:
Also, for your application, do you think life might become easier by reasoning with surjective maps and claims about what their kernels look like?
Probably not much: I'm defining the ramification index and inertia degree of P
over p
, Following Neukirch 8.2 I want to show e * rank p.quotient P.quotient = rank p.quotient (P^e).quotient
by considering the inclusions (P^e).quotient = map (P^e).quotient.mk (P^0) ≥ map (P^e).quotient.mk (P^1) ≥ ... ≥ map (P^e).quotient.mk (P^e) = ⊥
. Since these are all p.quotient
-linear and injective, it suffices (docs#dim_range_add_dim_ker, docs#dim_quotient_add_dim) to show the successive quotients (P^i / P^e) / (P^(i+1) / P^e)
are isomorphic to P.quotient
, which follows from the 3rd isomorphism theorem.
So I don't see how to avoid those quotients - without quotienting by P^e
we can't talk about being p.quotient
-linear, and the other quotient is needed to do the 3rd isomorphism theorem.
Kevin Buzzard (Nov 25 2021 at 11:49):
The 3rd isomorphism theorem just tells you that (P^i/P^e)/(P^{i+1}/P^e) is isomorphic to P^i/P^{i+1}. It's non-formal to show that this is R/P; this would not be true for a random UFD like with .
Anne Baanen (Nov 25 2021 at 11:50):
Of course, in general this wouldn't be true. But everything should work out in a Dedekind domain :)
Kevin Buzzard (Nov 25 2021 at 11:51):
Yes indeed :-) Dedekind domains are smooth and 1-dimensional, that's the key thing.
Kevin Buzzard (Nov 25 2021 at 11:53):
One should really be doing this in a relative setting I guess? I think the FLT-regular people would like to know that if is a finite extension of number fields of degree then where is a prime of and factors as .
Anne Baanen (Nov 25 2021 at 11:59):
I think my approach should work for that case if there are no unexpectedly hard sorry
s. My statement goes: if L = Frac(S)
is a finite separable extension of K = Frac(R)
, S
is Dedekind and p : ideal R
is maximal, then Σ P ∈ (factors pS).to_finset, multiplicity P pS * [S / P : R / p] = [L : K]
.
Kevin Buzzard (Nov 25 2021 at 14:43):
Oh great! I had misunderstood what you were doing! I had assumed p was a prime number not a prime ideal. Sorry to derail
Kevin Buzzard (Nov 25 2021 at 14:45):
This is wonderful because it will also apply to extensions of -adic local fields.
Anne Baanen (Nov 25 2021 at 14:46):
Ah, I was already worried I had missed something in setting up my theory :P
Kevin Buzzard (Nov 25 2021 at 15:53):
Back to your question, being p.quotient-linear is the same as being R-linear and p happening to act as 0 everywhere. So you could just let everything be an R-module and then at the end when you're down to P^i/P^{i+1} then deduce that things are p.quotient-modules maps are p.quotient-linear. Does this help?
Anne Baanen (Nov 25 2021 at 17:13):
Johan Commelin said:
class has_quotient {A : Type u} (B : Type v) [set_like A B] := (quotient : B → Type (max u v)) notation `G` /// `H` := @has_quotient.quotient G _ _ _ H
or something like that.
I have implemented something like your suggestion, it looks like everything is working without issues: branch#quotient-notation.
Eric Wieser (Nov 25 2021 at 17:18):
I guess the nice thing about this is it forces G
to be visible in the doc-gen type, rather than just showing H.quotient
.
Eric Wieser (Nov 25 2021 at 17:19):
Do you even gain anything by assuming set_like
there?
Eric Wieser (Nov 25 2021 at 17:19):
I think that might just make more work for typeclass inference without any gain
Anne Baanen (Nov 25 2021 at 17:20):
Not really I guess. Maybe it secretly helps out by forcing A
to be an out_param
:P
Eric Wieser (Nov 25 2021 at 17:20):
You don't even need A
if you remove set_like
Anne Baanen (Nov 25 2021 at 17:21):
Yes, but then it won't appear in the notation anymore!
Eric Wieser (Nov 25 2021 at 17:22):
That's probably worth a comment explaining the motivation when you PR it
Anne Baanen (Nov 25 2021 at 17:24):
I would also like to keep the A
for Lean-technical reasons: if we create a class of "set_like
s extending add_subgroup
" so we can uniformly define all the quotients listed above, we can't deduce A
from the structure of B
anymore.
Anne Baanen (Nov 25 2021 at 17:26):
That is, I think it would be neat to have
@[to_additive]
class subgroup_class S G extends set_like S G := ...
@[to_additive]
instance [subgroup_class S G] : has_quotient S G := <current subgroup.quotient implementation>
and then we can transfer results from quotient groups to quotient modules with a lot less friction.
Johan Commelin (Nov 25 2021 at 19:13):
That sounds promising!
Last updated: Dec 20 2023 at 11:08 UTC