Skip to content

Commit 529ccf0

Browse files
feat: remove separability assumption from Algebra.dvd_algebraMap_intNorm_self (#30478)
Continuing the work of #30323 and #30448 we remove the separability assumption from `Algebra.dvd_algebraMap_intNorm_self`.
1 parent d5cab0e commit 529ccf0

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

Mathlib/RingTheory/Ideal/Norm/RelNorm.lean

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,7 @@ theorem spanNorm_mul_of_bot_or_top (eq_bot_or_top : ∀ I : Ideal R, I = ⊥ ∨
172172
rw [hJ]
173173
exact le_top
174174

175-
theorem spanNorm_le_comap [Algebra.IsSeparable (FractionRing R) (FractionRing S)] (I : Ideal S) :
176-
spanNorm R I ≤ comap (algebraMap R S) I := by
175+
theorem spanNorm_le_comap (I : Ideal S) : spanNorm R I ≤ comap (algebraMap R S) I := by
177176
rw [spanNorm, Ideal.map, Ideal.span_le, ← Submodule.span_le]
178177
intro x hx
179178
induction hx using Submodule.span_induction with
@@ -328,8 +327,8 @@ open MulSemiringAction Pointwise in
328327
theorem relNorm_smul {G : Type*} [Group G] [MulSemiringAction G S] [SMulCommClass G R S] (g : G)
329328
(I : Ideal S) : relNorm R (g • I) = relNorm R I := relNorm_map_algEquiv (toAlgEquiv R S g) I
330329

331-
theorem relNorm_le_comap [Algebra.IsSeparable (FractionRing R) (FractionRing S)] (I : Ideal S) :
332-
relNorm R I ≤ comap (algebraMap R S) I := spanNorm_le_comap R I
330+
theorem relNorm_le_comap (I : Ideal S) : relNorm R I ≤ comap (algebraMap R S) I :=
331+
spanNorm_le_comap R I
333332

334333
theorem relNorm_relNorm (T : Type*) [CommRing T] [IsDedekindDomain T] [IsIntegrallyClosed T]
335334
[Algebra R T] [Algebra T S] [IsScalarTower R T S] [Module.Finite R T] [Module.Finite T S]

Mathlib/RingTheory/IntegralClosure/IntegralRestrict.lean

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -524,8 +524,8 @@ lemma Algebra.algebraMap_intNorm_of_isGalois [IsGalois (FractionRing A) (Fractio
524524
simp only [MulEquiv.toEquiv_eq_coe, EquivLike.coe_coe]
525525
convert (prod_galRestrict_eq_norm A (FractionRing A) (FractionRing B) B x).symm
526526

527-
theorem Algebra.dvd_algebraMap_intNorm_self [Algebra.IsSeparable (FractionRing A) (FractionRing B)]
528-
(x : B) : x ∣ algebraMap A B (intNorm A B x) := by
527+
open Polynomial IsScalarTower in
528+
theorem Algebra.dvd_algebraMap_intNorm_self (x : B) : x ∣ algebraMap A B (intNorm A B x) := by
529529
classical
530530
by_cases hx : x = 0
531531
· exact ⟨1, by simp [hx]⟩
@@ -537,18 +537,27 @@ theorem Algebra.dvd_algebraMap_intNorm_self [Algebra.IsSeparable (FractionRing A
537537
_root_.IsIntegral.tower_top (A := B) this
538538
refine ⟨y, ?_⟩
539539
apply FaithfulSMul.algebraMap_injective B L
540-
rw [← IsScalarTower.algebraMap_apply, map_mul, hy, mul_inv_cancel_left₀]
540+
rw [← algebraMap_apply, map_mul, hy, mul_inv_cancel_left₀]
541541
exact (map_ne_zero_iff _ (FaithfulSMul.algebraMap_injective B L)).mpr hx
542-
rw [← isIntegral_algHom_iff (IsScalarTower.toAlgHom A L E)
543-
(FaithfulSMul.algebraMap_injective L E), IsScalarTower.coe_toAlgHom', map_mul, map_inv₀,
544-
IsScalarTower.algebraMap_apply A K L, algebraMap_intNorm (L := L),
545-
← IsScalarTower.algebraMap_apply, ← IsScalarTower.algebraMap_apply, norm_eq_prod_embeddings,
546-
← Finset.univ.mul_prod_erase _ (Finset.mem_univ (IsScalarTower.toAlgHom K L E)),
547-
IsScalarTower.coe_toAlgHom', ← IsScalarTower.algebraMap_apply, inv_mul_cancel_left₀]
548-
· refine _root_.IsIntegral.prod _ fun σ _ ↦ ?_
549-
change IsIntegral A ((σ.restrictScalars A) (IsScalarTower.toAlgHom A B L x))
550-
rw [isIntegral_algHom_iff _ (RingHom.injective _),
551-
isIntegral_algHom_iff _ (FaithfulSMul.algebraMap_injective B L)]
552-
exact IsIntegral.isIntegral x
542+
rw [← isIntegral_algHom_iff (toAlgHom A L E)
543+
(FaithfulSMul.algebraMap_injective L E), coe_toAlgHom', map_mul, map_inv₀,
544+
algebraMap_apply A K L, algebraMap_intNorm (L := L), ← algebraMap_apply, ← algebraMap_apply,
545+
norm_eq_prod_roots _ (IsAlgClosed.splits_codomain _), ← Multiset.prod_erase
546+
(a := algebraMap B E x)]
553547
· have := NoZeroSMulDivisors.trans_faithfulSMul B L E
554-
exact (map_ne_zero_iff _ (FaithfulSMul.algebraMap_injective B E)).mpr hx
548+
rw [mul_pow, ← mul_pow_sub_one (Nat.pos_iff_ne_zero.1 Module.finrank_pos) (algebraMap B E x),
549+
mul_assoc, inv_mul_cancel_left₀]
550+
· refine IsIntegral.mul (IsIntegral.pow ?_ _)
551+
(IsIntegral.pow (IsIntegral.multiset_prod (fun a ha ↦ ⟨minpoly A x, minpoly.monic
552+
(IsIntegral.isIntegral x), ?_⟩)) _)
553+
· exact (isIntegral_algebraMap_iff (NoZeroSMulDivisors.iff_algebraMap_injective.1 this)).mpr
554+
(IsIntegral.isIntegral x)
555+
· replace ha := Multiset.erase_subset _ _ ha
556+
suffices (aeval a) ((minpoly A x).map (algebraMap A K)) = 0 by simpa
557+
rw [← minpoly.isIntegrallyClosed_eq_field_fractions K L (IsIntegral.isIntegral x)]
558+
simp only [mem_roots', ne_eq, Polynomial.map_eq_zero, IsRoot.def, eval_map_algebraMap] at ha
559+
exact ha.2
560+
· exact (map_ne_zero_iff _ (FaithfulSMul.algebraMap_injective B E)).mpr hx
561+
· simp only [mem_roots', ne_eq, Polynomial.map_eq_zero, IsRoot.def, eval_map_algebraMap]
562+
refine ⟨minpoly.ne_zero (IsIntegral.isIntegral _), ?_⟩
563+
simp [algebraMap_apply B L E, aeval_algebraMap_apply]

0 commit comments

Comments
 (0)