Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 4d59d4a

Browse files
committed
feat(number_theory): [S/P^e : R/p] = e * [S/P : R/p], where e is ramification index (#15316)
Let `S` be a Dedekind domain extending the commutative ring `R`, `p` a maximal ideal of `R`, `P` a prime ideal of `S`, and `e` the (nonzero) ramification index of `P` over `p`. Because the ramification index is nonzero, we get an inclusion `R/p → S/P` and we can compute that the degree of the field extension `[S/(P^e) : R/p]` is exactly `e` times `[S/P : R/p]`. This is the next step in showing the fundamental identity of inertia degree and ramification index (#12287). Setting up the ingredients for the proof is quite complicated because it involves taking `(P^(i+1) / P^e)` as a `R/p`-subspace of `P^i / P^e` and basically each part of this structure would produce free metavariables if we naïvely assigned it an instance. In the end, the important parts are an instance for `S/(P^e)` as `R/p`-algebra and replacing subspaces with the image of inclusion maps. Co-authored-by: Anne Baanen <t.baanen@vu.nl> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
1 parent 5424d3f commit 4d59d4a

File tree

1 file changed

+243
-0
lines changed

1 file changed

+243
-0
lines changed

src/number_theory/ramification_inertia.lean

Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ Often the above theory is set up in the case where:
3737
* `P` is an ideal lying over `p`
3838
We will try to relax the above hypotheses as much as possible.
3939
40+
## Notation
41+
42+
In this file, `e` stands for the ramification index and `f` for the inertia degree of `P` over `p`,
43+
leaving `p` and `P` implicit.
44+
4045
-/
4146

4247
namespace ideal
@@ -123,6 +128,9 @@ lemma le_pow_ramification_idx :
123128
map f p ≤ P ^ ramification_idx f p P :=
124129
le_pow_of_le_ramification_idx (le_refl _)
125130

131+
lemma le_comap_of_ramification_idx_ne_zero (h : ramification_idx f p P ≠ 0) : p ≤ comap f P :=
132+
ideal.map_le_iff_le_comap.mp $ le_pow_ramification_idx.trans $ ideal.pow_le_self $ h
133+
126134
namespace is_dedekind_domain
127135

128136
variables [is_domain S] [is_dedekind_domain S]
@@ -206,6 +214,8 @@ end
206214

207215
end dec_eq
208216

217+
section finrank_quotient_map
218+
209219
open_locale big_operators
210220
open_locale non_zero_divisors
211221

@@ -428,4 +438,237 @@ begin
428438
{ exact is_fraction_ring.injective S L } },
429439
end
430440

441+
end finrank_quotient_map
442+
443+
section fact_le_comap
444+
445+
local notation `e` := ramification_idx f p P
446+
447+
/-- `R / p` has a canonical map to `S / (P ^ e)`, where `e` is the ramification index
448+
of `P` over `p`. -/
449+
noncomputable instance quotient.algebra_quotient_pow_ramification_idx :
450+
algebra (R ⧸ p) (S ⧸ (P ^ e)) :=
451+
quotient.algebra_quotient_of_le_comap (ideal.map_le_iff_le_comap.mp le_pow_ramification_idx)
452+
453+
@[simp] lemma quotient.algebra_map_quotient_pow_ramification_idx (x : R) :
454+
algebra_map (R ⧸ p) (S ⧸ P ^ e) (ideal.quotient.mk p x) = ideal.quotient.mk _ (f x) :=
455+
rfl
456+
457+
variables [hfp : fact (ramification_idx f p P ≠ 0)]
458+
include hfp
459+
460+
/-- If `P` lies over `p`, then `R / p` has a canonical map to `S / P`.
461+
462+
This can't be an instance since the map `f : R → S` is generally not inferrable.
463+
-/
464+
def quotient.algebra_quotient_of_ramification_idx_ne_zero :
465+
algebra (R ⧸ p) (S ⧸ P) :=
466+
quotient.algebra_quotient_of_le_comap (le_comap_of_ramification_idx_ne_zero hfp.out)
467+
468+
-- In this file, the value for `f` can be inferred.
469+
local attribute [instance] ideal.quotient.algebra_quotient_of_ramification_idx_ne_zero
470+
471+
@[simp] lemma quotient.algebra_map_quotient_of_ramification_idx_ne_zero (x : R) :
472+
algebra_map (R ⧸ p) (S ⧸ P) (ideal.quotient.mk p x) = ideal.quotient.mk _ (f x) :=
473+
rfl
474+
475+
omit hfp
476+
477+
/-- The inclusion `(P^(i + 1) / P^e) ⊂ (P^i / P^e)`. -/
478+
@[simps]
479+
def pow_quot_succ_inclusion (i : ℕ) :
480+
ideal.map (P^e)^.quotient.mk (P ^ (i + 1)) →ₗ[R ⧸ p] ideal.map (P^e)^.quotient.mk (P ^ i) :=
481+
{ to_fun := λ x, ⟨x, ideal.map_mono (ideal.pow_le_pow i.le_succ) x.2⟩,
482+
map_add' := λ x y, rfl,
483+
map_smul' := λ c x, rfl }
484+
485+
lemma pow_quot_succ_inclusion_injective (i : ℕ) :
486+
function.injective (pow_quot_succ_inclusion f p P i) :=
487+
begin
488+
rw [← linear_map.ker_eq_bot, linear_map.ker_eq_bot'],
489+
rintro ⟨x, hx⟩ hx0,
490+
rw subtype.ext_iff at hx0 ⊢,
491+
rwa pow_quot_succ_inclusion_apply_coe at hx0
492+
end
493+
494+
/-- `S ⧸ P` embeds into the quotient by `P^(i+1) ⧸ P^e` as a subspace of `P^i ⧸ P^e`.
495+
See `quotient_to_quotient_range_pow_quot_succ` for this as a linear map,
496+
and `quotient_range_pow_quot_succ_inclusion_equiv` for this as a linear equivalence.
497+
-/
498+
noncomputable def quotient_to_quotient_range_pow_quot_succ_aux {i : ℕ} {a : S} (a_mem : a ∈ P^i) :
499+
S ⧸ P → ((P ^ i).map (P ^ e)^.quotient.mk ⧸ (pow_quot_succ_inclusion f p P i).range) :=
500+
quotient.map' (λ (x : S), ⟨_, ideal.mem_map_of_mem _ (ideal.mul_mem_left _ x a_mem)⟩)
501+
(λ x y h, begin
502+
rw submodule.quotient_rel_r_def at ⊢ h,
503+
simp only [_root_.map_mul, linear_map.mem_range],
504+
refine ⟨⟨_, ideal.mem_map_of_mem _ (ideal.mul_mem_mul h a_mem)⟩, _⟩,
505+
ext,
506+
rw [pow_quot_succ_inclusion_apply_coe, subtype.coe_mk, submodule.coe_sub, subtype.coe_mk,
507+
subtype.coe_mk, _root_.map_mul, map_sub, sub_mul]
508+
end)
509+
510+
lemma quotient_to_quotient_range_pow_quot_succ_aux_mk {i : ℕ} {a : S} (a_mem : a ∈ P^i) (x : S) :
511+
quotient_to_quotient_range_pow_quot_succ_aux f p P a_mem (submodule.quotient.mk x) =
512+
submodule.quotient.mk ⟨_, ideal.mem_map_of_mem _ (ideal.mul_mem_left _ x a_mem)⟩ :=
513+
by apply quotient.map'_mk'
514+
515+
include hfp
516+
517+
/-- `S ⧸ P` embeds into the quotient by `P^(i+1) ⧸ P^e` as a subspace of `P^i ⧸ P^e`. -/
518+
noncomputable def quotient_to_quotient_range_pow_quot_succ {i : ℕ} {a : S} (a_mem : a ∈ P^i) :
519+
S ⧸ P →ₗ[R ⧸ p] ((P ^ i).map (P ^ e)^.quotient.mk ⧸ (pow_quot_succ_inclusion f p P i).range) :=
520+
{ to_fun := quotient_to_quotient_range_pow_quot_succ_aux f p P a_mem,
521+
map_add' := begin
522+
intros x y, refine quotient.induction_on' x (λ x, quotient.induction_on' y (λ y, _)),
523+
simp only [submodule.quotient.mk'_eq_mk, ← submodule.quotient.mk_add,
524+
quotient_to_quotient_range_pow_quot_succ_aux_mk, add_mul],
525+
refine congr_arg submodule.quotient.mk _,
526+
ext,
527+
refl
528+
end,
529+
map_smul' := begin
530+
intros x y, refine quotient.induction_on' x (λ x, quotient.induction_on' y (λ y, _)),
531+
simp only [submodule.quotient.mk'_eq_mk, ← submodule.quotient.mk_add,
532+
quotient_to_quotient_range_pow_quot_succ_aux_mk, ring_hom.id_apply],
533+
refine congr_arg submodule.quotient.mk _,
534+
ext,
535+
simp only [subtype.coe_mk, _root_.map_mul, algebra.smul_def, submodule.coe_mk, mul_assoc,
536+
ideal.quotient.mk_eq_mk, submodule.coe_smul_of_tower,
537+
ideal.quotient.algebra_map_quotient_pow_ramification_idx]
538+
end }
539+
540+
lemma quotient_to_quotient_range_pow_quot_succ_mk {i : ℕ} {a : S} (a_mem : a ∈ P^i) (x : S) :
541+
quotient_to_quotient_range_pow_quot_succ f p P a_mem (submodule.quotient.mk x) =
542+
submodule.quotient.mk ⟨_, ideal.mem_map_of_mem _ (ideal.mul_mem_left _ x a_mem)⟩ :=
543+
quotient_to_quotient_range_pow_quot_succ_aux_mk f p P a_mem x
544+
545+
lemma quotient_to_quotient_range_pow_quot_succ_injective [is_domain S] [is_dedekind_domain S]
546+
[P.is_prime] {i : ℕ} (hi : i < e) {a : S} (a_mem : a ∈ P^i) (a_not_mem : a ∉ P^(i + 1)) :
547+
function.injective (quotient_to_quotient_range_pow_quot_succ f p P a_mem) :=
548+
λ x, quotient.induction_on' x $ λ x y, quotient.induction_on' y $ λ y h,
549+
begin
550+
have Pe_le_Pi1 : P^e ≤ P^(i + 1) := ideal.pow_le_pow hi,
551+
simp only [submodule.quotient.mk'_eq_mk, quotient_to_quotient_range_pow_quot_succ_mk,
552+
submodule.quotient.eq, linear_map.mem_range, subtype.ext_iff, subtype.coe_mk,
553+
submodule.coe_sub] at ⊢ h,
554+
rcases h with ⟨⟨⟨z⟩, hz⟩, h⟩,
555+
rw [submodule.quotient.quot_mk_eq_mk, ideal.quotient.mk_eq_mk, ideal.mem_quotient_iff_mem_sup,
556+
sup_eq_left.mpr Pe_le_Pi1] at hz,
557+
rw [pow_quot_succ_inclusion_apply_coe, subtype.coe_mk, submodule.quotient.quot_mk_eq_mk,
558+
ideal.quotient.mk_eq_mk, ← map_sub, ideal.quotient.eq, ← sub_mul] at h,
559+
exact (ideal.is_prime.mul_mem_pow _
560+
((submodule.sub_mem_iff_right _ hz).mp (Pe_le_Pi1 h))).resolve_right a_not_mem,
561+
end
562+
563+
lemma quotient_to_quotient_range_pow_quot_succ_surjective [is_domain S] [is_dedekind_domain S]
564+
(hP0 : P ≠ ⊥) [hP : P.is_prime] {i : ℕ} (hi : i < e)
565+
{a : S} (a_mem : a ∈ P^i) (a_not_mem : a ∉ P^(i + 1)) :
566+
function.surjective (quotient_to_quotient_range_pow_quot_succ f p P a_mem) :=
567+
begin
568+
rintro ⟨⟨⟨x⟩, hx⟩⟩,
569+
have Pe_le_Pi : P^e ≤ P^i := ideal.pow_le_pow hi.le,
570+
have Pe_le_Pi1 : P^e ≤ P^(i + 1) := ideal.pow_le_pow hi,
571+
rw [submodule.quotient.quot_mk_eq_mk, ideal.quotient.mk_eq_mk, ideal.mem_quotient_iff_mem_sup,
572+
sup_eq_left.mpr Pe_le_Pi] at hx,
573+
suffices hx' : x ∈ ideal.span {a} ⊔ P^(i+1),
574+
{ obtain ⟨y', hy', z, hz, rfl⟩ := submodule.mem_sup.mp hx',
575+
obtain ⟨y, rfl⟩ := ideal.mem_span_singleton.mp hy',
576+
refine ⟨submodule.quotient.mk y, _⟩,
577+
simp only [submodule.quotient.quot_mk_eq_mk, quotient_to_quotient_range_pow_quot_succ_mk,
578+
submodule.quotient.eq, linear_map.mem_range, subtype.ext_iff, subtype.coe_mk,
579+
submodule.coe_sub],
580+
refine ⟨⟨_, ideal.mem_map_of_mem _ (submodule.neg_mem _ hz)⟩, _⟩,
581+
rw [pow_quot_succ_inclusion_apply_coe, subtype.coe_mk, ideal.quotient.mk_eq_mk, map_add,
582+
mul_comm y a, sub_add_cancel', map_neg] },
583+
letI := classical.dec_eq (ideal S),
584+
rw [sup_eq_prod_inf_factors _ (pow_ne_zero _ hP0), normalized_factors_pow,
585+
normalized_factors_irreducible ((ideal.prime_iff_is_prime hP0).mpr hP).irreducible,
586+
normalize_eq, multiset.nsmul_singleton, multiset.inter_repeat, multiset.prod_repeat],
587+
rw [← submodule.span_singleton_le_iff_mem, ideal.submodule_span_eq] at a_mem a_not_mem,
588+
rwa [ideal.count_normalized_factors_eq a_mem a_not_mem, min_eq_left i.le_succ],
589+
{ intro ha,
590+
rw ideal.span_singleton_eq_bot.mp ha at a_not_mem,
591+
have := (P^(i+1)).zero_mem,
592+
contradiction },
593+
end
594+
595+
/-- Quotienting `P^i / P^e` by its subspace `P^(i+1) ⧸ P^e` is
596+
`R ⧸ p`-linearly isomorphic to `S ⧸ P`. -/
597+
noncomputable def quotient_range_pow_quot_succ_inclusion_equiv [is_domain S] [is_dedekind_domain S]
598+
[P.is_prime] (hP : P ≠ ⊥) {i : ℕ} (hi : i < e) :
599+
((P ^ i).map (P ^ e)^.quotient.mk ⧸ (pow_quot_succ_inclusion f p P i).range) ≃ₗ[R ⧸ p] S ⧸ P :=
600+
begin
601+
choose a a_mem a_not_mem using set_like.exists_of_lt
602+
(ideal.strict_anti_pow P hP (ideal.is_prime.ne_top infer_instance) (le_refl i.succ)),
603+
refine (linear_equiv.of_bijective _ _ _).symm,
604+
{ exact quotient_to_quotient_range_pow_quot_succ f p P a_mem },
605+
{ exact quotient_to_quotient_range_pow_quot_succ_injective f p P hi a_mem a_not_mem },
606+
{ exact quotient_to_quotient_range_pow_quot_succ_surjective f p P hP hi a_mem a_not_mem }
607+
end
608+
609+
/-- Since the inclusion `(P^(i + 1) / P^e) ⊂ (P^i / P^e)` has a kernel isomorphic to `P / S`,
610+
`[P^i / P^e : R / p] = [P^(i+1) / P^e : R / p] + [P / S : R / p]` -/
611+
lemma dim_pow_quot_aux [is_domain S] [is_dedekind_domain S] [p.is_maximal] [P.is_prime]
612+
(hP0 : P ≠ ⊥) {i : ℕ} (hi : i < e) :
613+
module.rank (R ⧸ p) (ideal.map (P^e)^.quotient.mk (P ^ i)) =
614+
module.rank (R ⧸ p) (S ⧸ P) + module.rank (R ⧸ p) (ideal.map (P^e)^.quotient.mk (P ^ (i + 1))) :=
615+
begin
616+
letI : field (R ⧸ p) := ideal.quotient.field _,
617+
rw [dim_eq_of_injective _ (pow_quot_succ_inclusion_injective f p P i),
618+
(quotient_range_pow_quot_succ_inclusion_equiv f p P hP0 hi).symm.dim_eq],
619+
exact (dim_quotient_add_dim (linear_map.range (pow_quot_succ_inclusion f p P i))).symm,
620+
end
621+
622+
lemma dim_pow_quot [is_domain S] [is_dedekind_domain S] [p.is_maximal] [P.is_prime]
623+
(hP0 : P ≠ ⊥) (i : ℕ) (hi : i ≤ e) :
624+
module.rank (R ⧸ p) (ideal.map (P^e)^.quotient.mk (P ^ i)) =
625+
(e - i) • module.rank (R ⧸ p) (S ⧸ P) :=
626+
begin
627+
refine @nat.decreasing_induction' _ i e (λ j lt_e le_j ih, _) hi _,
628+
{ rw [dim_pow_quot_aux f p P _ lt_e, ih, ← succ_nsmul, nat.sub_succ, ← nat.succ_eq_add_one,
629+
nat.succ_pred_eq_of_pos (nat.sub_pos_of_lt lt_e)],
630+
assumption },
631+
{ rw [nat.sub_self, zero_nsmul, map_quotient_self],
632+
exact dim_bot (R ⧸ p) (S ⧸ (P^e)) }
633+
end
634+
635+
omit hfp
636+
637+
/-- If `p` is a maximal ideal of `R`, `S` extends `R` and `P^e` lies over `p`,
638+
then the dimension `[S/(P^e) : R/p]` is equal to `e * [S/P : R/p]`. -/
639+
lemma dim_prime_pow_ramification_idx [is_domain S] [is_dedekind_domain S] [p.is_maximal]
640+
[P.is_prime] (hP0 : P ≠ ⊥) (he : e ≠ 0) :
641+
module.rank (R ⧸ p) (S ⧸ P^e) =
642+
e • @module.rank (R ⧸ p) (S ⧸ P) _ _ (@algebra.to_module _ _ _ _ $
643+
@@quotient.algebra_quotient_of_ramification_idx_ne_zero _ _ _ _ _ ⟨he⟩) :=
644+
begin
645+
letI : fact (e ≠ 0) := ⟨he⟩,
646+
have := dim_pow_quot f p P hP0 0 (nat.zero_le e),
647+
rw [pow_zero, nat.sub_zero, ideal.one_eq_top, ideal.map_top] at this,
648+
exact (dim_top (R ⧸ p) _).symm.trans this
649+
end
650+
651+
/-- If `p` is a maximal ideal of `R`, `S` extends `R` and `P^e` lies over `p`,
652+
then the dimension `[S/(P^e) : R/p]`, as a natural number, is equal to `e * [S/P : R/p]`. -/
653+
lemma finrank_prime_pow_ramification_idx [is_domain S] [is_dedekind_domain S]
654+
(hP0 : P ≠ ⊥) [p.is_maximal] [P.is_prime] (he : e ≠ 0) :
655+
finrank (R ⧸ p) (S ⧸ P^e) =
656+
e * @finrank (R ⧸ p) (S ⧸ P) _ _ (@algebra.to_module _ _ _ _ $
657+
@@quotient.algebra_quotient_of_ramification_idx_ne_zero _ _ _ _ _ ⟨he⟩) :=
658+
begin
659+
letI : fact (e ≠ 0) := ⟨he⟩,
660+
letI : algebra (R ⧸ p) (S ⧸ P) := quotient.algebra_quotient_of_ramification_idx_ne_zero f p P,
661+
letI := ideal.quotient.field p,
662+
have hdim := dim_prime_pow_ramification_idx _ _ _ hP0 he,
663+
by_cases hP : finite_dimensional (R ⧸ p) (S ⧸ P),
664+
{ haveI := hP,
665+
haveI := (finite_dimensional_iff_of_rank_eq_nsmul he hdim).mpr hP,
666+
refine cardinal.nat_cast_injective _,
667+
rw [finrank_eq_dim, nat.cast_mul, finrank_eq_dim, hdim, nsmul_eq_mul] },
668+
have hPe := mt (finite_dimensional_iff_of_rank_eq_nsmul he hdim).mp hP,
669+
simp only [finrank_of_infinite_dimensional hP, finrank_of_infinite_dimensional hPe, mul_zero],
670+
end
671+
672+
end fact_le_comap
673+
431674
end ideal

0 commit comments

Comments
 (0)