@@ -37,6 +37,11 @@ Often the above theory is set up in the case where:
37
37
* `P` is an ideal lying over `p`
38
38
We will try to relax the above hypotheses as much as possible.
39
39
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
+
40
45
-/
41
46
42
47
namespace ideal
@@ -123,6 +128,9 @@ lemma le_pow_ramification_idx :
123
128
map f p ≤ P ^ ramification_idx f p P :=
124
129
le_pow_of_le_ramification_idx (le_refl _)
125
130
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
+
126
134
namespace is_dedekind_domain
127
135
128
136
variables [is_domain S] [is_dedekind_domain S]
206
214
207
215
end dec_eq
208
216
217
+ section finrank_quotient_map
218
+
209
219
open_locale big_operators
210
220
open_locale non_zero_divisors
211
221
@@ -428,4 +438,237 @@ begin
428
438
{ exact is_fraction_ring.injective S L } },
429
439
end
430
440
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
+
431
674
end ideal
0 commit comments