@@ -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