number_theory.kummer_dedekindMathlib.NumberTheory.KummerDedekind

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(last sync)

feat(data/{list,multiset,finset}/*): attach and filter lemmas (#18087)

Left commutativity and cardinality of list.filter/multiset.filter/finset.filter. Interaction of count/countp and attach.

Diff
@@ -294,7 +294,7 @@ begin
   rw [multiset.count_map_eq_count' (λ f,
       ((normalized_factors_map_equiv_normalized_factors_min_poly_mk hI hI' hx hx').symm f
         : ideal S)),
-      multiset.attach_count_eq_count_coe],
+      multiset.count_attach],
   { exact subtype.coe_injective.comp (equiv.injective _) },
   { exact (normalized_factors_map_equiv_normalized_factors_min_poly_mk hI hI' hx hx' _).prop},
   { exact irreducible_of_normalized_factor _

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(first ported)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -115,9 +115,9 @@ theorem prod_mem_ideal_map_of_mem_conductor {p : R} {z : S}
     (hp : p ∈ Ideal.comap (algebraMap R S) (conductor R x)) (hz' : z ∈ I.map (algebraMap R S)) :
     algebraMap R S p * z ∈ algebraMap R<x> S '' ↑(I.map (algebraMap R R<x>)) :=
   by
-  rw [Ideal.map, Ideal.span, Finsupp.mem_span_image_iff_total] at hz' 
+  rw [Ideal.map, Ideal.span, Finsupp.mem_span_image_iff_total] at hz'
   obtain ⟨l, H, H'⟩ := hz'
-  rw [Finsupp.total_apply] at H' 
+  rw [Finsupp.total_apply] at H'
   rw [← H', mul_comm, Finsupp.sum_mul]
   have lem :
     ∀ {a : R},
@@ -172,7 +172,7 @@ theorem comap_map_eq_map_adjoin_of_coprime_conductor
       obtain ⟨a, ha⟩ :=
         (Set.mem_image _ _ _).mp
           (prod_mem_ideal_map_of_mem_conductor hp
-            (show z ∈ I.map (algebraMap R S) by rwa [Ideal.mem_comap] at hy ))
+            (show z ∈ I.map (algebraMap R S) by rwa [Ideal.mem_comap] at hy))
       use a + algebraMap R R<x> q * ⟨z, hz⟩
       refine'
         ⟨Ideal.add_mem (I.map (algebraMap R R<x>)) ha.left _, by
@@ -212,7 +212,7 @@ noncomputable def quotAdjoinEquivQuotMap (hx : (conductor R x).comap (algebraMap
         --this is contained in `I * R<x>`, which is the content of the previous lemma.
         refine' RingHom.lift_injective_of_ker_le_ideal _ _ fun u hu => _
         rwa [RingHom.mem_ker, RingHom.comp_apply, Ideal.Quotient.eq_zero_iff_mem, ← Ideal.mem_comap,
-          comap_map_eq_map_adjoin_of_coprime_conductor hx h_alg] at hu 
+          comap_map_eq_map_adjoin_of_coprime_conductor hx h_alg] at hu
       · -- Surjectivity follows from the surjectivity of the canonical map `R<x> → S ⧸ (I * S)`,
         -- which in turn follows from the fact that `I * S + (conductor R x) = S`.
         refine' Ideal.Quotient.lift_surjective_of_surjective _ _ fun y => _
@@ -222,14 +222,14 @@ noncomputable def quotAdjoinEquivQuotMap (hx : (conductor R x).comap (algebraMap
           suffices conductor R x ⊔ I.map (algebraMap R S) = ⊤ by simp only [this]
           rw [Ideal.eq_top_iff_one] at hx ⊢
           replace hx := Ideal.mem_map_of_mem (algebraMap R S) hx
-          rw [Ideal.map_sup, RingHom.map_one] at hx 
+          rw [Ideal.map_sup, RingHom.map_one] at hx
           exact
             (sup_le_sup
                 (show ((conductor R x).comap (algebraMap R S)).map (algebraMap R S) ≤ conductor R x
                   from Ideal.map_comap_le)
                 (le_refl (I.map (algebraMap R S))))
               hx
-        rw [← Ideal.mem_quotient_iff_mem_sup, hz, Ideal.mem_map_iff_of_surjective] at this 
+        rw [← Ideal.mem_quotient_iff_mem_sup, hz, Ideal.mem_map_iff_of_surjective] at this
         obtain ⟨u, hu, hu'⟩ := this
         use⟨u, conductor_subset_adjoin hu⟩
         simpa only [← hu']
@@ -334,7 +334,7 @@ theorem normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map (hI : I
   have := multiplicity_factors_map_eq_multiplicity hI hI' hx hx' hJ
   rw [multiplicity_eq_count_normalized_factors, multiplicity_eq_count_normalized_factors,
     UniqueFactorizationMonoid.normalize_normalized_factor _ hJ,
-    UniqueFactorizationMonoid.normalize_normalized_factor, PartENat.natCast_inj] at this 
+    UniqueFactorizationMonoid.normalize_normalized_factor, PartENat.natCast_inj] at this
   refine' this.trans _
   -- Get rid of the `map` by applying the equiv to both sides.
   generalize hJ' :
@@ -381,7 +381,7 @@ theorem Ideal.irreducible_map_of_irreducible_minpoly (hI : IsMaximal I) (hI' : I
         (show I.map (algebraMap R S) ≠ 0 by
           rwa [← bot_eq_zero, Ne.def,
             map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S)])
-    rw [associated_iff_eq, hy, Multiset.prod_singleton] at h 
+    rw [associated_iff_eq, hy, Multiset.prod_singleton] at h
     rw [← h]
     exact
       irreducible_of_normalized_factor y
Diff
@@ -6,7 +6,7 @@ Authors: Anne Baanen, Paul Lezeau
 import RingTheory.DedekindDomain.Ideal
 import RingTheory.IsAdjoinRoot
 
-#align_import number_theory.kummer_dedekind from "leanprover-community/mathlib"@"f2ad3645af9effcdb587637dc28a6074edc813f9"
+#align_import number_theory.kummer_dedekind from "leanprover-community/mathlib"@"65a1391a0106c9204fe45bc73a039f056558cb83"
 
 /-!
 # Kummer-Dedekind theorem
@@ -349,7 +349,7 @@ theorem normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map (hI : I
   rw [Multiset.count_map_eq_count' fun f =>
       ((normalized_factors_map_equiv_normalized_factors_min_poly_mk hI hI' hx hx').symm f :
         Ideal S),
-    Multiset.attach_count_eq_count_coe]
+    Multiset.count_attach]
   · exact subtype.coe_injective.comp (Equiv.injective _)
   · exact (normalized_factors_map_equiv_normalized_factors_min_poly_mk hI hI' hx hx' _).Prop
   ·
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2021 Anne Baanen. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anne Baanen, Paul Lezeau
 -/
-import Mathbin.RingTheory.DedekindDomain.Ideal
-import Mathbin.RingTheory.IsAdjoinRoot
+import RingTheory.DedekindDomain.Ideal
+import RingTheory.IsAdjoinRoot
 
 #align_import number_theory.kummer_dedekind from "leanprover-community/mathlib"@"f2ad3645af9effcdb587637dc28a6074edc813f9"
 
Diff
@@ -231,7 +231,7 @@ noncomputable def quotAdjoinEquivQuotMap (hx : (conductor R x).comap (algebraMap
               hx
         rw [← Ideal.mem_quotient_iff_mem_sup, hz, Ideal.mem_map_iff_of_surjective] at this 
         obtain ⟨u, hu, hu'⟩ := this
-        use ⟨u, conductor_subset_adjoin hu⟩
+        use⟨u, conductor_subset_adjoin hu⟩
         simpa only [← hu']
         · exact Ideal.Quotient.mk_surjective)
 #align quot_adjoin_equiv_quot_map quotAdjoinEquivQuotMap
@@ -387,12 +387,11 @@ theorem Ideal.irreducible_map_of_irreducible_minpoly (hI : IsMaximal I) (hI' : I
       irreducible_of_normalized_factor y
         (show y ∈ normalized_factors (I.map (algebraMap R S)) by simp [hy])
   rw [normalized_factors_ideal_map_eq_normalized_factors_min_poly_mk_map hI hI' hx hx']
-  use
-    ((normalized_factors_map_equiv_normalized_factors_min_poly_mk hI hI' hx hx').symm
+  use((normalized_factors_map_equiv_normalized_factors_min_poly_mk hI hI' hx hx').symm
         ⟨normalize (map I.Quotient.mk (minpoly R x)), mem_norm_factors⟩ :
       Ideal S)
   rw [Multiset.map_eq_singleton]
-  use ⟨normalize (map I.Quotient.mk (minpoly R x)), mem_norm_factors⟩
+  use⟨normalize (map I.Quotient.mk (minpoly R x)), mem_norm_factors⟩
   refine' ⟨_, rfl⟩
   apply Multiset.map_injective Subtype.coe_injective
   rw [Multiset.attach_map_val, Multiset.map_singleton, Subtype.coe_mk]
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2021 Anne Baanen. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anne Baanen, Paul Lezeau
-
-! This file was ported from Lean 3 source module number_theory.kummer_dedekind
-! leanprover-community/mathlib commit f2ad3645af9effcdb587637dc28a6074edc813f9
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.RingTheory.DedekindDomain.Ideal
 import Mathbin.RingTheory.IsAdjoinRoot
 
+#align_import number_theory.kummer_dedekind from "leanprover-community/mathlib"@"f2ad3645af9effcdb587637dc28a6074edc813f9"
+
 /-!
 # Kummer-Dedekind theorem
 
Diff
@@ -275,12 +275,10 @@ noncomputable def normalizedFactorsMapEquivNormalizedFactorsMinPolyMk (hI : IsMa
                 (by
                   apply NoZeroSMulDivisors.algebraMap_injective (Algebra.adjoin R {x}) S
                   exact Subalgebra.noZeroSMulDivisors_top (Algebra.adjoin R {x}))).symm.trans
-          (((minpoly.Algebra.adjoin.powerBasis' hx').quotientEquivQuotientMinpolyMap
-                  I).toRingEquiv.trans
+          (((Algebra.adjoin.powerBasis' hx').quotientEquivQuotientMinpolyMap I).toRingEquiv.trans
             (quotEquivOfEq
               (show
-                Ideal.span
-                    {(minpoly R (minpoly.Algebra.adjoin.powerBasis' hx').gen).map I.Quotient.mk} =
+                Ideal.span {(minpoly R (Algebra.adjoin.powerBasis' hx').gen).map I.Quotient.mk} =
                   Ideal.span {(minpoly R x).map I.Quotient.mk}
                 by rw [Algebra.adjoin.powerBasis'_minpoly_gen hx']))))
         (--show that `I * S` ≠ ⊥
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anne Baanen, Paul Lezeau
 
 ! This file was ported from Lean 3 source module number_theory.kummer_dedekind
-! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
+! leanprover-community/mathlib commit f2ad3645af9effcdb587637dc28a6074edc813f9
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.RingTheory.IsAdjoinRoot
 /-!
 # Kummer-Dedekind theorem
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file proves the monogenic version of the Kummer-Dedekind theorem on the splitting of prime
 ideals in an extension of the ring of integers. This states that if `I` is a prime ideal of
 Dedekind domain `R` and `S = R[α]` for some `α` that is integral over `R` with minimal polynomial
Diff
@@ -62,6 +62,7 @@ open Ideal Polynomial DoubleQuot UniqueFactorizationMonoid Algebra RingHom
 
 local notation:max R "<" x ">" => adjoin R ({x} : Set S)
 
+#print conductor /-
 /-- Let `S / R` be a ring extension and `x : S`, then the conductor of `R<x>` is the
     biggest ideal of `S` contained in `R<x>`. -/
 def conductor (x : S) : Ideal S
@@ -71,31 +72,43 @@ def conductor (x : S) : Ideal S
   add_mem' a b ha hb c := by simpa only [add_mul] using Subalgebra.add_mem _ (ha c) (hb c)
   smul_mem' c a ha b := by simpa only [smul_eq_mul, mul_left_comm, mul_assoc] using ha (c * b)
 #align conductor conductor
+-/
 
 variable {R} {x : S}
 
+#print conductor_eq_of_eq /-
 theorem conductor_eq_of_eq {y : S} (h : (R<x> : Set S) = R<y>) : conductor R x = conductor R y :=
   Ideal.ext fun a => forall_congr' fun b => Set.ext_iff.mp h _
 #align conductor_eq_of_eq conductor_eq_of_eq
+-/
 
+#print conductor_subset_adjoin /-
 theorem conductor_subset_adjoin : (conductor R x : Set S) ⊆ R<x> := fun y hy => by
   simpa only [mul_one] using hy 1
 #align conductor_subset_adjoin conductor_subset_adjoin
+-/
 
+#print mem_conductor_iff /-
 theorem mem_conductor_iff {y : S} : y ∈ conductor R x ↔ ∀ b : S, y * b ∈ R<x> :=
   ⟨fun h => h, fun h => h⟩
 #align mem_conductor_iff mem_conductor_iff
+-/
 
+#print conductor_eq_top_of_adjoin_eq_top /-
 theorem conductor_eq_top_of_adjoin_eq_top (h : R<x> = ⊤) : conductor R x = ⊤ := by
   simp only [Ideal.eq_top_iff_one, mem_conductor_iff, h, mem_top, forall_const]
 #align conductor_eq_top_of_adjoin_eq_top conductor_eq_top_of_adjoin_eq_top
+-/
 
+#print conductor_eq_top_of_powerBasis /-
 theorem conductor_eq_top_of_powerBasis (pb : PowerBasis R S) : conductor R pb.gen = ⊤ :=
   conductor_eq_top_of_adjoin_eq_top pb.adjoin_gen_eq_top
 #align conductor_eq_top_of_power_basis conductor_eq_top_of_powerBasis
+-/
 
 variable {I : Ideal R}
 
+#print prod_mem_ideal_map_of_mem_conductor /-
 /-- This technical lemma tell us that if `C` is the conductor of `R<x>` and `I` is an ideal of `R`
   then `p * (I * S) ⊆ I * R<x>` for any `p` in `C ∩ R` -/
 theorem prod_mem_ideal_map_of_mem_conductor {p : R} {z : S}
@@ -133,7 +146,9 @@ theorem prod_mem_ideal_map_of_mem_conductor {p : R} {z : S}
   · intro y hy
     exact lem ((Finsupp.mem_supported _ l).mp H hy)
 #align prod_mem_ideal_map_of_mem_conductor prod_mem_ideal_map_of_mem_conductor
+-/
 
+#print comap_map_eq_map_adjoin_of_coprime_conductor /-
 /-- A technical result telling us that `(I * S) ∩ R<x> = I * R<x>` for any ideal `I` of `R`. -/
 theorem comap_map_eq_map_adjoin_of_coprime_conductor
     (hx : (conductor R x).comap (algebraMap R S) ⊔ I = ⊤)
@@ -176,7 +191,9 @@ theorem comap_map_eq_map_adjoin_of_coprime_conductor
     rw [this, ← Ideal.map_map]
     apply Ideal.le_comap_map
 #align comap_map_eq_map_adjoin_of_coprime_conductor comap_map_eq_map_adjoin_of_coprime_conductor
+-/
 
+#print quotAdjoinEquivQuotMap /-
 /-- The canonical morphism of rings from `R<x> ⧸ (I*R<x>)` to `S ⧸ (I*S)` is an isomorphism
     when `I` and `(conductor R x) ∩ R` are coprime. -/
 noncomputable def quotAdjoinEquivQuotMap (hx : (conductor R x).comap (algebraMap R S) ⊔ I = ⊤)
@@ -218,7 +235,9 @@ noncomputable def quotAdjoinEquivQuotMap (hx : (conductor R x).comap (algebraMap
         simpa only [← hu']
         · exact Ideal.Quotient.mk_surjective)
 #align quot_adjoin_equiv_quot_map quotAdjoinEquivQuotMap
+-/
 
+#print quotAdjoinEquivQuotMap_apply_mk /-
 @[simp]
 theorem quotAdjoinEquivQuotMap_apply_mk (hx : (conductor R x).comap (algebraMap R S) ⊔ I = ⊤)
     (h_alg : Function.Injective (algebraMap R<x> S)) (a : R<x>) :
@@ -226,6 +245,7 @@ theorem quotAdjoinEquivQuotMap_apply_mk (hx : (conductor R x).comap (algebraMap
       (I.map (algebraMap R S)).Quotient.mk ↑a :=
   rfl
 #align quot_adjoin_equiv_quot_map_apply_mk quotAdjoinEquivQuotMap_apply_mk
+-/
 
 namespace KummerDedekind
 
@@ -239,6 +259,7 @@ variable [NoZeroSMulDivisors R S]
 
 attribute [local instance] Ideal.Quotient.field
 
+#print KummerDedekind.normalizedFactorsMapEquivNormalizedFactorsMinPolyMk /-
 /-- The first half of the **Kummer-Dedekind Theorem** in the monogenic case, stating that the prime
     factors of `I*S` are in bijection with those of the minimal polynomial of the generator of `S`
     over `R`, taken `mod I`.-/
@@ -273,7 +294,9 @@ noncomputable def normalizedFactorsMapEquivNormalizedFactorsMinPolyMk (hI : IsMa
         (show map I.Quotient.mk (minpoly R x) ≠ 0 from
           Polynomial.map_monic_ne_zero (minpoly.monic hx'))).symm
 #align kummer_dedekind.normalized_factors_map_equiv_normalized_factors_min_poly_mk KummerDedekind.normalizedFactorsMapEquivNormalizedFactorsMinPolyMk
+-/
 
+#print KummerDedekind.multiplicity_factors_map_eq_multiplicity /-
 /-- The second half of the **Kummer-Dedekind Theorem** in the monogenic case, stating that the
     bijection `factors_equiv'` defined in the first half preserves multiplicities. -/
 theorem multiplicity_factors_map_eq_multiplicity (hI : IsMaximal I) (hI' : I ≠ ⊥)
@@ -288,7 +311,9 @@ theorem multiplicity_factors_map_eq_multiplicity (hI : IsMaximal I) (hI' : I ≠
     multiplicity_normalizedFactorsEquivSpanNormalizedFactors_symm_eq_multiplicity,
     normalizedFactorsEquivOfQuotEquiv_multiplicity_eq_multiplicity]
 #align kummer_dedekind.multiplicity_factors_map_eq_multiplicity KummerDedekind.multiplicity_factors_map_eq_multiplicity
+-/
 
+#print KummerDedekind.normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map /-
 /-- The **Kummer-Dedekind Theorem**. -/
 theorem normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map (hI : IsMaximal I)
     (hI' : I ≠ ⊥) (hx : (conductor R x).comap (algebraMap R S) ⊔ I = ⊤) (hx' : IsIntegral R x) :
@@ -339,7 +364,9 @@ theorem normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map (hI : I
     rwa [← bot_eq_zero, Ne.def,
       map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S)]
 #align kummer_dedekind.normalized_factors_ideal_map_eq_normalized_factors_min_poly_mk_map KummerDedekind.normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map
+-/
 
+#print KummerDedekind.Ideal.irreducible_map_of_irreducible_minpoly /-
 theorem Ideal.irreducible_map_of_irreducible_minpoly (hI : IsMaximal I) (hI' : I ≠ ⊥)
     (hx : (conductor R x).comap (algebraMap R S) ⊔ I = ⊤) (hx' : IsIntegral R x)
     (hf : Irreducible (map I.Quotient.mk (minpoly R x))) : Irreducible (I.map (algebraMap R S)) :=
@@ -373,6 +400,7 @@ theorem Ideal.irreducible_map_of_irreducible_minpoly (hI : IsMaximal I) (hI' : I
   rw [Multiset.attach_map_val, Multiset.map_singleton, Subtype.coe_mk]
   exact normalized_factors_irreducible hf
 #align kummer_dedekind.ideal.irreducible_map_of_irreducible_minpoly KummerDedekind.Ideal.irreducible_map_of_irreducible_minpoly
+-/
 
 end KummerDedekind
 
Diff
@@ -251,10 +251,12 @@ noncomputable def normalizedFactorsMapEquivNormalizedFactorsMinPolyMk (hI : IsMa
                 (by
                   apply NoZeroSMulDivisors.algebraMap_injective (Algebra.adjoin R {x}) S
                   exact Subalgebra.noZeroSMulDivisors_top (Algebra.adjoin R {x}))).symm.trans
-          (((Algebra.adjoin.powerBasis' hx').quotientEquivQuotientMinpolyMap I).toRingEquiv.trans
+          (((minpoly.Algebra.adjoin.powerBasis' hx').quotientEquivQuotientMinpolyMap
+                  I).toRingEquiv.trans
             (quotEquivOfEq
               (show
-                Ideal.span {(minpoly R (Algebra.adjoin.powerBasis' hx').gen).map I.Quotient.mk} =
+                Ideal.span
+                    {(minpoly R (minpoly.Algebra.adjoin.powerBasis' hx').gen).map I.Quotient.mk} =
                   Ideal.span {(minpoly R x).map I.Quotient.mk}
                 by rw [Algebra.adjoin.powerBasis'_minpoly_gen hx']))))
         (--show that `I * S` ≠ ⊥
Diff
@@ -60,7 +60,6 @@ variable (R : Type _) {S : Type _} [CommRing R] [CommRing S] [Algebra R S]
 
 open Ideal Polynomial DoubleQuot UniqueFactorizationMonoid Algebra RingHom
 
--- mathport name: «expr < >»
 local notation:max R "<" x ">" => adjoin R ({x} : Set S)
 
 /-- Let `S / R` be a ring extension and `x : S`, then the conductor of `R<x>` is the
Diff
@@ -67,7 +67,7 @@ local notation:max R "<" x ">" => adjoin R ({x} : Set S)
     biggest ideal of `S` contained in `R<x>`. -/
 def conductor (x : S) : Ideal S
     where
-  carrier := { a | ∀ b : S, a * b ∈ R<x> }
+  carrier := {a | ∀ b : S, a * b ∈ R<x>}
   zero_mem' b := by simpa only [MulZeroClass.zero_mul] using Subalgebra.zero_mem _
   add_mem' a b ha hb c := by simpa only [add_mul] using Subalgebra.add_mem _ (ha c) (hb c)
   smul_mem' c a ha b := by simpa only [smul_eq_mul, mul_left_comm, mul_assoc] using ha (c * b)
@@ -245,8 +245,8 @@ attribute [local instance] Ideal.Quotient.field
     over `R`, taken `mod I`.-/
 noncomputable def normalizedFactorsMapEquivNormalizedFactorsMinPolyMk (hI : IsMaximal I)
     (hI' : I ≠ ⊥) (hx : (conductor R x).comap (algebraMap R S) ⊔ I = ⊤) (hx' : IsIntegral R x) :
-    { J : Ideal S | J ∈ normalizedFactors (I.map (algebraMap R S)) } ≃
-      { d : (R ⧸ I)[X] | d ∈ normalizedFactors (map I.Quotient.mk (minpoly R x)) } :=
+    {J : Ideal S | J ∈ normalizedFactors (I.map (algebraMap R S))} ≃
+      {d : (R ⧸ I)[X] | d ∈ normalizedFactors (map I.Quotient.mk (minpoly R x))} :=
   (normalizedFactorsEquivOfQuotEquiv
         ((quotAdjoinEquivQuotMap hx
                 (by
Diff
@@ -103,9 +103,9 @@ theorem prod_mem_ideal_map_of_mem_conductor {p : R} {z : S}
     (hp : p ∈ Ideal.comap (algebraMap R S) (conductor R x)) (hz' : z ∈ I.map (algebraMap R S)) :
     algebraMap R S p * z ∈ algebraMap R<x> S '' ↑(I.map (algebraMap R R<x>)) :=
   by
-  rw [Ideal.map, Ideal.span, Finsupp.mem_span_image_iff_total] at hz'
+  rw [Ideal.map, Ideal.span, Finsupp.mem_span_image_iff_total] at hz' 
   obtain ⟨l, H, H'⟩ := hz'
-  rw [Finsupp.total_apply] at H'
+  rw [Finsupp.total_apply] at H' 
   rw [← H', mul_comm, Finsupp.sum_mul]
   have lem :
     ∀ {a : R},
@@ -121,7 +121,7 @@ theorem prod_mem_ideal_map_of_mem_conductor {p : R} {z : S}
         _
     · rw [mul_comm]
       exact mem_conductor_iff.mp (ideal.mem_comap.mp hp) _
-    refine' ⟨_, by simpa only [RingHom.map_mul, mul_comm (algebraMap R S p) (l a)] ⟩
+    refine' ⟨_, by simpa only [RingHom.map_mul, mul_comm (algebraMap R S p) (l a)]⟩
     rw [mul_comm]
     apply Ideal.mul_mem_left (I.map (algebraMap R R<x>)) _ (Ideal.mem_map_of_mem _ ha)
   refine'
@@ -158,11 +158,11 @@ theorem comap_map_eq_map_adjoin_of_coprime_conductor
       obtain ⟨a, ha⟩ :=
         (Set.mem_image _ _ _).mp
           (prod_mem_ideal_map_of_mem_conductor hp
-            (show z ∈ I.map (algebraMap R S) by rwa [Ideal.mem_comap] at hy))
+            (show z ∈ I.map (algebraMap R S) by rwa [Ideal.mem_comap] at hy ))
       use a + algebraMap R R<x> q * ⟨z, hz⟩
       refine'
         ⟨Ideal.add_mem (I.map (algebraMap R R<x>)) ha.left _, by
-          simpa only [ha.right, map_add, AlgHom.map_mul, add_right_inj] ⟩
+          simpa only [ha.right, map_add, AlgHom.map_mul, add_right_inj]⟩
       rw [mul_comm]
       exact Ideal.mul_mem_left (I.map (algebraMap R R<x>)) _ (Ideal.mem_map_of_mem _ hq)
     refine'
@@ -196,7 +196,7 @@ noncomputable def quotAdjoinEquivQuotMap (hx : (conductor R x).comap (algebraMap
         --this is contained in `I * R<x>`, which is the content of the previous lemma.
         refine' RingHom.lift_injective_of_ker_le_ideal _ _ fun u hu => _
         rwa [RingHom.mem_ker, RingHom.comp_apply, Ideal.Quotient.eq_zero_iff_mem, ← Ideal.mem_comap,
-          comap_map_eq_map_adjoin_of_coprime_conductor hx h_alg] at hu
+          comap_map_eq_map_adjoin_of_coprime_conductor hx h_alg] at hu 
       · -- Surjectivity follows from the surjectivity of the canonical map `R<x> → S ⧸ (I * S)`,
         -- which in turn follows from the fact that `I * S + (conductor R x) = S`.
         refine' Ideal.Quotient.lift_surjective_of_surjective _ _ fun y => _
@@ -204,16 +204,16 @@ noncomputable def quotAdjoinEquivQuotMap (hx : (conductor R x).comap (algebraMap
         have : z ∈ conductor R x ⊔ I.map (algebraMap R S) :=
           by
           suffices conductor R x ⊔ I.map (algebraMap R S) = ⊤ by simp only [this]
-          rw [Ideal.eq_top_iff_one] at hx⊢
+          rw [Ideal.eq_top_iff_one] at hx ⊢
           replace hx := Ideal.mem_map_of_mem (algebraMap R S) hx
-          rw [Ideal.map_sup, RingHom.map_one] at hx
+          rw [Ideal.map_sup, RingHom.map_one] at hx 
           exact
             (sup_le_sup
                 (show ((conductor R x).comap (algebraMap R S)).map (algebraMap R S) ≤ conductor R x
                   from Ideal.map_comap_le)
                 (le_refl (I.map (algebraMap R S))))
               hx
-        rw [← Ideal.mem_quotient_iff_mem_sup, hz, Ideal.mem_map_iff_of_surjective] at this
+        rw [← Ideal.mem_quotient_iff_mem_sup, hz, Ideal.mem_map_iff_of_surjective] at this 
         obtain ⟨u, hu, hu'⟩ := this
         use ⟨u, conductor_subset_adjoin hu⟩
         simpa only [← hu']
@@ -310,7 +310,7 @@ theorem normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map (hI : I
   have := multiplicity_factors_map_eq_multiplicity hI hI' hx hx' hJ
   rw [multiplicity_eq_count_normalized_factors, multiplicity_eq_count_normalized_factors,
     UniqueFactorizationMonoid.normalize_normalized_factor _ hJ,
-    UniqueFactorizationMonoid.normalize_normalized_factor, PartENat.natCast_inj] at this
+    UniqueFactorizationMonoid.normalize_normalized_factor, PartENat.natCast_inj] at this 
   refine' this.trans _
   -- Get rid of the `map` by applying the equiv to both sides.
   generalize hJ' :
@@ -355,7 +355,7 @@ theorem Ideal.irreducible_map_of_irreducible_minpoly (hI : IsMaximal I) (hI' : I
         (show I.map (algebraMap R S) ≠ 0 by
           rwa [← bot_eq_zero, Ne.def,
             map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S)])
-    rw [associated_iff_eq, hy, Multiset.prod_singleton] at h
+    rw [associated_iff_eq, hy, Multiset.prod_singleton] at h 
     rw [← h]
     exact
       irreducible_of_normalized_factor y
Diff
@@ -230,7 +230,7 @@ theorem quotAdjoinEquivQuotMap_apply_mk (hx : (conductor R x).comap (algebraMap
 
 namespace KummerDedekind
 
-open BigOperators Polynomial Classical
+open scoped BigOperators Polynomial Classical
 
 variable [IsDomain R] [IsIntegrallyClosed R]
 
Diff
@@ -173,10 +173,7 @@ theorem comap_map_eq_map_adjoin_of_coprime_conductor
         simpa [hx₂]
       rwa [← this]
   · -- The converse inclusion is trivial
-    have : algebraMap R S = (algebraMap _ S).comp (algebraMap R R<x>) :=
-      by
-      ext
-      rfl
+    have : algebraMap R S = (algebraMap _ S).comp (algebraMap R R<x>) := by ext; rfl
     rw [this, ← Ideal.map_map]
     apply Ideal.le_comap_map
 #align comap_map_eq_map_adjoin_of_coprime_conductor comap_map_eq_map_adjoin_of_coprime_conductor
@@ -190,10 +187,7 @@ noncomputable def quotAdjoinEquivQuotMap (hx : (conductor R x).comap (algebraMap
     (Ideal.Quotient.lift (I.map (algebraMap R R<x>))
       ((I.map (algebraMap R S)).Quotient.mk.comp (algebraMap R<x> S)) fun r hr =>
       by
-      have : algebraMap R S = (algebraMap R<x> S).comp (algebraMap R R<x>) :=
-        by
-        ext
-        rfl
+      have : algebraMap R S = (algebraMap R<x> S).comp (algebraMap R R<x>) := by ext; rfl
       rw [RingHom.comp_apply, Ideal.Quotient.eq_zero_iff_mem, this, ← Ideal.map_map]
       exact Ideal.mem_map_of_mem _ hr)
     (by
@@ -269,8 +263,7 @@ noncomputable def normalizedFactorsMapEquivNormalizedFactorsMinPolyMk (hI : IsMa
           rwa [Ne.def, map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S), ←
             Ne.def])
         (--show that the ideal spanned by `(minpoly R pb.gen) mod I` is non-zero
-        by
-          by_contra
+        by by_contra;
           exact
             (show map I.Quotient.mk (minpoly R x) ≠ 0 from
                 Polynomial.map_monic_ne_zero (minpoly.monic hx'))
@@ -306,7 +299,7 @@ theorem normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map (hI : I
   by
   ext J
   -- WLOG, assume J is a normalized factor
-  by_cases hJ : J ∈ normalized_factors (I.map (algebraMap R S))
+  by_cases hJ : J ∈ normalized_factors (I.map (algebraMap R S));
   swap
   · rw [multiset.count_eq_zero.mpr hJ, eq_comm, Multiset.count_eq_zero, Multiset.mem_map]
     simp only [Multiset.mem_attach, true_and_iff, not_exists]
Diff
@@ -4,11 +4,10 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anne Baanen, Paul Lezeau
 
 ! This file was ported from Lean 3 source module number_theory.kummer_dedekind
-! leanprover-community/mathlib commit f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c
+! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
-import Mathbin.RingTheory.AlgebraTower
 import Mathbin.RingTheory.DedekindDomain.Ideal
 import Mathbin.RingTheory.IsAdjoinRoot
 
Diff
@@ -69,7 +69,7 @@ local notation:max R "<" x ">" => adjoin R ({x} : Set S)
 def conductor (x : S) : Ideal S
     where
   carrier := { a | ∀ b : S, a * b ∈ R<x> }
-  zero_mem' b := by simpa only [zero_mul] using Subalgebra.zero_mem _
+  zero_mem' b := by simpa only [MulZeroClass.zero_mul] using Subalgebra.zero_mem _
   add_mem' a b ha hb c := by simpa only [add_mul] using Subalgebra.add_mem _ (ha c) (hb c)
   smul_mem' c a ha b := by simpa only [smul_eq_mul, mul_left_comm, mul_assoc] using ha (c * b)
 #align conductor conductor

Changes in mathlib4

mathlib3
mathlib4
chore: adapt to multiple goal linter 2 (#12361)

A PR analogous to #12338: reformatting proofs following the multiple goals linter of #12339.

Diff
@@ -140,9 +140,9 @@ theorem prod_mem_ideal_map_of_mem_conductor {p : R} {z : S}
         rfl
   refine Finset.sum_induction _ (fun u => u ∈ algebraMap R<x> S '' I.map (algebraMap R R<x>))
       (fun a b => ?_) ?_ ?_
-  rintro ⟨z, hz, rfl⟩ ⟨y, hy, rfl⟩
-  rw [← RingHom.map_add]
-  exact ⟨z + y, Ideal.add_mem _ (SetLike.mem_coe.mp hz) hy, rfl⟩
+  · rintro ⟨z, hz, rfl⟩ ⟨y, hy, rfl⟩
+    rw [← RingHom.map_add]
+    exact ⟨z + y, Ideal.add_mem _ (SetLike.mem_coe.mp hz) hy, rfl⟩
   · exact ⟨0, SetLike.mem_coe.mpr <| Ideal.zero_mem _, RingHom.map_zero _⟩
   · intro y hy
     exact lem ((Finsupp.mem_supported _ l).mp H hy)
@@ -217,10 +217,10 @@ noncomputable def quotAdjoinEquivQuotMap (hx : (conductor R x).comap (algebraMap
           from Ideal.map_comap_le)
           (le_refl (I.map (algebraMap R S)))) hx
     rw [← Ideal.mem_quotient_iff_mem_sup, hz, Ideal.mem_map_iff_of_surjective] at this
-    obtain ⟨u, hu, hu'⟩ := this
-    use ⟨u, conductor_subset_adjoin hu⟩
-    simp only [← hu']
-    rfl
+    · obtain ⟨u, hu, hu'⟩ := this
+      use ⟨u, conductor_subset_adjoin hu⟩
+      simp only [← hu']
+      rfl
     · exact Ideal.Quotient.mk_surjective
 #align quot_adjoin_equiv_quot_map quotAdjoinEquivQuotMap
 
@@ -304,20 +304,20 @@ theorem normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map (hI : I
   rw [multiplicity_eq_count_normalizedFactors, multiplicity_eq_count_normalizedFactors,
     UniqueFactorizationMonoid.normalize_normalized_factor _ hJ,
     UniqueFactorizationMonoid.normalize_normalized_factor, PartENat.natCast_inj] at this
-  refine' this.trans _
-  -- Get rid of the `map` by applying the equiv to both sides.
-  generalize hJ' :
-    (normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') ⟨J, hJ⟩ = J'
-  have : ((normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J' : Ideal S) =
-      J :=
-    by rw [← hJ', Equiv.symm_apply_apply _ _, Subtype.coe_mk]
-  subst this
-  -- Get rid of the `attach` by applying the subtype `coe` to both sides.
-  rw [Multiset.count_map_eq_count' fun f =>
-      ((normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f :
-        Ideal S),
-    Multiset.count_attach]
-  · exact Subtype.coe_injective.comp (Equiv.injective _)
+  · refine' this.trans _
+    -- Get rid of the `map` by applying the equiv to both sides.
+    generalize hJ' :
+      (normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx') ⟨J, hJ⟩ = J'
+    have : ((normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm J' : Ideal S) =
+        J :=
+      by rw [← hJ', Equiv.symm_apply_apply _ _, Subtype.coe_mk]
+    subst this
+    -- Get rid of the `attach` by applying the subtype `coe` to both sides.
+    rw [Multiset.count_map_eq_count' fun f =>
+        ((normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f :
+          Ideal S),
+      Multiset.count_attach]
+    · exact Subtype.coe_injective.comp (Equiv.injective _)
   · exact (normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx' _).prop
   · exact irreducible_of_normalized_factor _
         (normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx' _).prop
chore: backports from #11997, adaptations for nightly-2024-04-07 (#12176)

These are changes from #11997, the latest adaptation PR for nightly-2024-04-07, which can be made directly on master.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>

Diff
@@ -261,8 +261,7 @@ noncomputable def normalizedFactorsMapEquivNormalizedFactorsMinPolyMk (hI : IsMa
     · exact NoZeroSMulDivisors.algebraMap_injective (Algebra.adjoin R {x}) S
     · rw [Algebra.adjoin.powerBasis'_minpoly_gen hx']
   refine (normalizedFactorsEquivOfQuotEquiv f ?_ ?_).trans ?_
-  · rwa [Ne.def, map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S),
-      ← Ne.def]
+  · rwa [Ne, map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S), ← Ne]
   · by_contra h
     exact (show Polynomial.map (Ideal.Quotient.mk I) (minpoly R x) ≠ 0 from
       Polynomial.map_monic_ne_zero (minpoly.monic hx')) (span_singleton_eq_bot.mp h)
style: replace '.-/' by '. -/' (#11938)

Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.

Diff
@@ -245,7 +245,7 @@ attribute [local instance] Ideal.Quotient.field
 
 /-- The first half of the **Kummer-Dedekind Theorem** in the monogenic case, stating that the prime
     factors of `I*S` are in bijection with those of the minimal polynomial of the generator of `S`
-    over `R`, taken `mod I`.-/
+    over `R`, taken `mod I`. -/
 noncomputable def normalizedFactorsMapEquivNormalizedFactorsMinPolyMk (hI : IsMaximal I)
     (hI' : I ≠ ⊥) (hx : (conductor R x).comap (algebraMap R S) ⊔ I = ⊤) (hx' : IsIntegral R x) :
     {J : Ideal S | J ∈ normalizedFactors (I.map (algebraMap R S))} ≃
chore: avoid Ne.def (adaptation for nightly-2024-03-27) (#11813)
Diff
@@ -324,7 +324,7 @@ theorem normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map (hI : I
         (normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx' _).prop
   · exact Polynomial.map_monic_ne_zero (minpoly.monic hx')
   · exact irreducible_of_normalized_factor _ hJ
-  · rwa [← bot_eq_zero, Ne.def,
+  · rwa [← bot_eq_zero, Ne,
       map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S)]
 #align kummer_dedekind.normalized_factors_ideal_map_eq_normalized_factors_min_poly_mk_map KummerDedekind.normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map
 
@@ -338,7 +338,7 @@ theorem Ideal.irreducible_map_of_irreducible_minpoly (hI : IsMaximal I) (hI' : I
   suffices ∃ y, normalizedFactors (I.map (algebraMap R S)) = {y} by
     obtain ⟨y, hy⟩ := this
     have h := normalizedFactors_prod (show I.map (algebraMap R S) ≠ 0 by
-          rwa [← bot_eq_zero, Ne.def,
+          rwa [← bot_eq_zero, Ne,
             map_eq_bot_iff_of_injective (NoZeroSMulDivisors.algebraMap_injective R S)])
     rw [associated_iff_eq, hy, Multiset.prod_singleton] at h
     rw [← h]
feat(DedekindDomain.Ideal): remove Domain assumption from DedekindDomain (#11527)

Probably because in mathlib4 the definition IsDedekindDomain extends Domain, and this was not the case in mathlib3, there are unused hypothesis of the form

variable [IsDomain R] [IsDedekindDomain R]

and this PR removes the first one, that can be inferred by the second, both in variable declarations and in theorem/definition assumptions. A regex search has been performed on the library to search for all occurrences and none is left.

Diff
@@ -238,7 +238,7 @@ namespace KummerDedekind
 open scoped BigOperators Polynomial Classical
 
 variable [IsDomain R] [IsIntegrallyClosed R]
-variable [IsDomain S] [IsDedekindDomain S]
+variable [IsDedekindDomain S]
 variable [NoZeroSMulDivisors R S]
 
 attribute [local instance] Ideal.Quotient.field
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -238,9 +238,7 @@ namespace KummerDedekind
 open scoped BigOperators Polynomial Classical
 
 variable [IsDomain R] [IsIntegrallyClosed R]
-
 variable [IsDomain S] [IsDedekindDomain S]
-
 variable [NoZeroSMulDivisors R S]
 
 attribute [local instance] Ideal.Quotient.field
feat: derivative of minpoly is in the different ideal. (#9283)
Diff
@@ -90,6 +90,28 @@ theorem conductor_eq_top_of_powerBasis (pb : PowerBasis R S) : conductor R pb.ge
   conductor_eq_top_of_adjoin_eq_top pb.adjoin_gen_eq_top
 #align conductor_eq_top_of_power_basis conductor_eq_top_of_powerBasis
 
+open IsLocalization in
+lemma mem_coeSubmodule_conductor {L} [CommRing L] [Algebra S L] [Algebra R L]
+    [IsScalarTower R S L] [NoZeroSMulDivisors S L] {x : S} {y : L} :
+    y ∈ coeSubmodule L (conductor R x) ↔ ∀ z : S,
+      y * (algebraMap S L) z ∈ Algebra.adjoin R {algebraMap S L x} := by
+  cases subsingleton_or_nontrivial L
+  · rw [Subsingleton.elim (coeSubmodule L _) ⊤, Subsingleton.elim (Algebra.adjoin R _) ⊤]; simp
+  trans ∀ z, y * (algebraMap S L) z ∈ (Algebra.adjoin R {x}).map (IsScalarTower.toAlgHom R S L)
+  · simp only [coeSubmodule, Submodule.mem_map, Algebra.linearMap_apply, Subalgebra.mem_map,
+      IsScalarTower.coe_toAlgHom']
+    constructor
+    · rintro ⟨y, hy, rfl⟩ z
+      exact ⟨_, hy z, map_mul _ _ _⟩
+    · intro H
+      obtain ⟨y, _, e⟩ := H 1
+      rw [_root_.map_one, mul_one] at e
+      subst e
+      simp only [← _root_.map_mul, (NoZeroSMulDivisors.algebraMap_injective S L).eq_iff,
+        exists_eq_right] at H
+      exact ⟨_, H, rfl⟩
+  · rw [AlgHom.map_adjoin, Set.image_singleton]; rfl
+
 variable {I : Ideal R}
 
 /-- This technical lemma tell us that if `C` is the conductor of `R<x>` and `I` is an ideal of `R`
Diff
@@ -6,7 +6,7 @@ Authors: Anne Baanen, Paul Lezeau
 import Mathlib.RingTheory.DedekindDomain.Ideal
 import Mathlib.RingTheory.IsAdjoinRoot
 
-#align_import number_theory.kummer_dedekind from "leanprover-community/mathlib"@"f0c8bf9245297a541f468be517f1bde6195105e9"
+#align_import number_theory.kummer_dedekind from "leanprover-community/mathlib"@"65a1391a0106c9204fe45bc73a039f056558cb83"
 
 /-!
 # Kummer-Dedekind theorem
@@ -297,7 +297,7 @@ theorem normalizedFactors_ideal_map_eq_normalizedFactors_min_poly_mk_map (hI : I
   rw [Multiset.count_map_eq_count' fun f =>
       ((normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx').symm f :
         Ideal S),
-    Multiset.attach_count_eq_count_coe]
+    Multiset.count_attach]
   · exact Subtype.coe_injective.comp (Equiv.injective _)
   · exact (normalizedFactorsMapEquivNormalizedFactorsMinPolyMk hI hI' hx hx' _).prop
   · exact irreducible_of_normalized_factor _
chore: cleanup some spaces (#7484)

Purely cosmetic PR.

Diff
@@ -144,7 +144,7 @@ theorem comap_map_eq_map_adjoin_of_coprime_conductor
         (⟨z, hz⟩ : R<x>) ∈ I.map (algebraMap R R<x>) by
       rw [← this, ← temp]
       obtain ⟨a, ha⟩ := (Set.mem_image _ _ _).mp (prod_mem_ideal_map_of_mem_conductor hp
-          (show z ∈ I.map (algebraMap R S) by rwa [Ideal.mem_comap] at hy ))
+          (show z ∈ I.map (algebraMap R S) by rwa [Ideal.mem_comap] at hy))
       use a + algebraMap R R<x> q * ⟨z, hz⟩
       refine ⟨Ideal.add_mem (I.map (algebraMap R R<x>)) ha.left ?_, by
           simp only [ha.right, map_add, AlgHom.map_mul, add_right_inj]; rfl⟩
chore: bump toolchain to v4.2.0-rc1 (#7370)

This rolls in the changed from #6928.

Co-authored-by: Thomas Murrills <thomasmurrills@gmail.com>

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -107,10 +107,11 @@ theorem prod_mem_ideal_map_of_mem_conductor {p : R} {z : S}
     rw [Algebra.id.smul_eq_mul, mul_assoc, mul_comm, mul_assoc, Set.mem_image]
     refine Exists.intro
         (algebraMap R R<x> a * ⟨l a * algebraMap R S p,
-          show l a * algebraMap R S p ∈ R<x> from ?_⟩) ?_
+          show l a * algebraMap R S p ∈ R<x> from ?h⟩) ?_
+    case h =>
+      rw [mul_comm]
+      exact mem_conductor_iff.mp (Ideal.mem_comap.mp hp) _
     · refine ⟨?_, ?_⟩
-      · rw [mul_comm]
-        exact mem_conductor_iff.mp (Ideal.mem_comap.mp hp) _
       · rw [mul_comm]
         apply Ideal.mul_mem_left (I.map (algebraMap R R<x>)) _ (Ideal.mem_map_of_mem _ ha)
       · simp only [RingHom.map_mul, mul_comm (algebraMap R S p) (l a)]
chore: drop MulZeroClass. in mul_zero/zero_mul (#6682)

Search&replace MulZeroClass.mul_zero -> mul_zero, MulZeroClass.zero_mul -> zero_mul.

These were introduced by Mathport, as the full name of mul_zero is actually MulZeroClass.mul_zero (it's exported with the short name).

Diff
@@ -63,7 +63,7 @@ local notation:max R "<" x:max ">" => adjoin R ({x} : Set S)
     biggest ideal of `S` contained in `R<x>`. -/
 def conductor (x : S) : Ideal S where
   carrier := {a | ∀ b : S, a * b ∈ R<x>}
-  zero_mem' b := by simpa only [MulZeroClass.zero_mul] using Subalgebra.zero_mem _
+  zero_mem' b := by simpa only [zero_mul] using Subalgebra.zero_mem _
   add_mem' ha hb c := by simpa only [add_mul] using Subalgebra.add_mem _ (ha c) (hb c)
   smul_mem' c a ha b := by simpa only [smul_eq_mul, mul_left_comm, mul_assoc] using ha (c * b)
 #align conductor conductor
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -53,7 +53,7 @@ kummer, dedekind, kummer dedekind, dedekind-kummer, dedekind kummer
 -/
 
 
-variable (R : Type _) {S : Type _} [CommRing R] [CommRing S] [Algebra R S]
+variable (R : Type*) {S : Type*} [CommRing R] [CommRing S] [Algebra R S]
 
 open Ideal Polynomial DoubleQuot UniqueFactorizationMonoid Algebra RingHom
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2021 Anne Baanen. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Anne Baanen, Paul Lezeau
-
-! This file was ported from Lean 3 source module number_theory.kummer_dedekind
-! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.RingTheory.DedekindDomain.Ideal
 import Mathlib.RingTheory.IsAdjoinRoot
 
+#align_import number_theory.kummer_dedekind from "leanprover-community/mathlib"@"f0c8bf9245297a541f468be517f1bde6195105e9"
+
 /-!
 # Kummer-Dedekind theorem
 
chore: cleanup whitespace (#5988)

Grepping for [^ .:{-] [^ :] and reviewing the results. Once I started I couldn't stop. :-)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -248,7 +248,7 @@ noncomputable def normalizedFactorsMapEquivNormalizedFactorsMinPolyMk (hI : IsMa
   · by_contra h
     exact (show Polynomial.map (Ideal.Quotient.mk I) (minpoly R x) ≠ 0 from
       Polynomial.map_monic_ne_zero (minpoly.monic hx')) (span_singleton_eq_bot.mp h)
-  · refine (normalizedFactorsEquivSpanNormalizedFactors  ?_).symm
+  · refine (normalizedFactorsEquivSpanNormalizedFactors ?_).symm
     exact Polynomial.map_monic_ne_zero (minpoly.monic hx')
 #align kummer_dedekind.normalized_factors_map_equiv_normalized_factors_min_poly_mk KummerDedekind.normalizedFactorsMapEquivNormalizedFactorsMinPolyMk
 
chore: use _root_. as in mathlib3 (#5420)

These are the mathlib3 names.

Diff
@@ -204,7 +204,7 @@ noncomputable def quotAdjoinEquivQuotMap (hx : (conductor R x).comap (algebraMap
     · exact Ideal.Quotient.mk_surjective
 #align quot_adjoin_equiv_quot_map quotAdjoinEquivQuotMap
 
--- Porting note: on-line linter fails with `failed to synthesize` instance 
+-- Porting note: on-line linter fails with `failed to synthesize` instance
 -- but #lint does not report any problem
 @[simp, nolint simpNF]
 theorem quotAdjoinEquivQuotMap_apply_mk (hx : (conductor R x).comap (algebraMap R S) ⊔ I = ⊤)
@@ -238,7 +238,7 @@ noncomputable def normalizedFactorsMapEquivNormalizedFactorsMinPolyMk (hI : IsMa
   let f : S ⧸ map (algebraMap R S) I ≃+*
     (R ⧸ I)[X] ⧸ span {Polynomial.map (Ideal.Quotient.mk I) (minpoly R x)} := by
     refine (quotAdjoinEquivQuotMap hx ?_).symm.trans
-      (((minpoly.Algebra.adjoin.powerBasis'
+      (((Algebra.adjoin.powerBasis'
         hx').quotientEquivQuotientMinpolyMap I).toRingEquiv.trans (quotEquivOfEq ?_))
     · exact NoZeroSMulDivisors.algebraMap_injective (Algebra.adjoin R {x}) S
     · rw [Algebra.adjoin.powerBasis'_minpoly_gen hx']
feat: port NumberTheory.KummerDedekind (#5249)

Dependencies 11 + 724

725 files ported (98.5%)
306394 lines ported (98.3%)
Show graph

The unported dependencies are