Theorem: Ideal.finprod_heightOneSpectrum_factorization
File: Mathlib/RingTheory/DedekindDomain/Factorization.lean

tactic: rw [← associated_iff_eq, ← Associates.mk_eq_mk_iff_associated]
state_before: R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : IsDedekindDomain R
K : Type ?u.253124
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
I : Ideal R
hI : I ≠ 0
⊢ (∏ᶠ (v : HeightOneSpectrum R), maxPowDividing v I) = I

tactic: apply Associates.eq_of_eq_counts
state_before: R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : IsDedekindDomain R
K : Type ?u.253124
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
I : Ideal R
hI : I ≠ 0
⊢ Associates.mk (∏ᶠ (v : HeightOneSpectrum R), maxPowDividing v I) = Associates.mk I

tactic: intro v hv
state_before: case h
R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : IsDedekindDomain R
K : Type ?u.253124
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
I : Ideal R
hI : I ≠ 0
⊢ ∀ (p : Associates (Ideal R)),
    Irreducible p →
      Associates.count p (Associates.factors (Associates.mk (∏ᶠ (v : HeightOneSpectrum R), maxPowDividing v I))) =
        Associates.count p (Associates.factors (Associates.mk I))

tactic: obtain ⟨J, hJv⟩ := Associates.exists_rep v
state_before: case h
R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : IsDedekindDomain R
K : Type ?u.253124
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v✝ : HeightOneSpectrum R
I : Ideal R
hI : I ≠ 0
v : Associates (Ideal R)
hv : Irreducible v
⊢ Associates.count v (Associates.factors (Associates.mk (∏ᶠ (v : HeightOneSpectrum R), maxPowDividing v I))) =
    Associates.count v (Associates.factors (Associates.mk I))

tactic: rw [← hJv, Associates.irreducible_mk] at hv
state_before: case h.intro
R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : IsDedekindDomain R
K : Type ?u.253124
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v✝ : HeightOneSpectrum R
I : Ideal R
hI : I ≠ 0
v : Associates (Ideal R)
hv : Irreducible v
J : Ideal R
hJv : Associates.mk J = v
⊢ Associates.count v (Associates.factors (Associates.mk (∏ᶠ (v : HeightOneSpectrum R), maxPowDividing v I))) =
    Associates.count v (Associates.factors (Associates.mk I))

tactic: rw [← hJv]
state_before: case h.intro
R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : IsDedekindDomain R
K : Type ?u.253124
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v✝ : HeightOneSpectrum R
I : Ideal R
hI : I ≠ 0
v : Associates (Ideal R)
J : Ideal R
hv : Irreducible J
hJv : Associates.mk J = v
⊢ Associates.count v (Associates.factors (Associates.mk (∏ᶠ (v : HeightOneSpectrum R), maxPowDividing v I))) =
    Associates.count v (Associates.factors (Associates.mk I))

tactic: apply Ideal.finprod_count
  ⟨J, Ideal.isPrime_of_prime (irreducible_iff_prime.mp hv), Irreducible.ne_zero hv⟩ I hI
state_before: case h.intro
R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : IsDedekindDomain R
K : Type ?u.253124
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v✝ : HeightOneSpectrum R
I : Ideal R
hI : I ≠ 0
v : Associates (Ideal R)
J : Ideal R
hv : Irreducible J
hJv : Associates.mk J = v
⊢ Associates.count (Associates.mk J)
      (Associates.factors (Associates.mk (∏ᶠ (v : HeightOneSpectrum R), maxPowDividing v I))) =
    Associates.count (Associates.mk J) (Associates.factors (Associates.mk I))

tactic: apply Associates.finprod_ne_zero I
state_before: case ha
R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : IsDedekindDomain R
K : Type ?u.253124
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
I : Ideal R
hI : I ≠ 0
⊢ Associates.mk (∏ᶠ (v : HeightOneSpectrum R), maxPowDividing v I) ≠ 0

tactic: apply Associates.mk_ne_zero.mpr hI
state_before: case hb
R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : IsDedekindDomain R
K : Type ?u.253124
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
I : Ideal R
hI : I ≠ 0
⊢ Associates.mk I ≠ 0