Theorem: IsDedekindDomain.inf_prime_pow_eq_prod
File: Mathlib/RingTheory/DedekindDomain/Ideal.lean

Proof steps:
state_before: R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s : Finset ι
f : ι → Ideal R
e : ι → ℕ
prime : ∀ i ∈ s, Prime (f i)
coprime : ∀ i ∈ s, ∀ j ∈ s, i ≠ j → f i ≠ f j
⊢ (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
state_after: R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s : Finset ι
f : ι → Ideal R
e : ι → ℕ
prime : ∀ i ∈ s, Prime (f i)
coprime : ∀ i ∈ s, ∀ j ∈ s, i ≠ j → f i ≠ f j
this : DecidableEq ι := Classical.decEq ι
⊢ (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
tactic: letI := Classical.decEq ι
state_before: R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s : Finset ι
f : ι → Ideal R
e : ι → ℕ
prime : ∀ i ∈ s, Prime (f i)
coprime : ∀ i ∈ s, ∀ j ∈ s, i ≠ j → f i ≠ f j
this : DecidableEq ι := Classical.decEq ι
⊢ (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
state_after: R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
⊢ (∀ i ∈ s, Prime (f i)) → (∀ i ∈ s, ∀ j ∈ s, i ≠ j → f i ≠ f j) → (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
tactic: revert prime coprime
state_before: R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
⊢ (∀ i ∈ s, Prime (f i)) → (∀ i ∈ s, ∀ j ∈ s, i ≠ j → f i ≠ f j) → (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
state_after: case refine_1
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
⊢ (∀ i ∈ ∅, Prime (f i)) → (∀ i ∈ ∅, ∀ j ∈ ∅, i ≠ j → f i ≠ f j) → (∅.inf fun i => f i ^ e i) = ∏ i ∈ ∅, f i ^ e i

case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
⊢ ∀ ⦃a : ι⦄ {s : Finset ι},
    a ∉ s →
      ((∀ i ∈ s, Prime (f i)) →
          (∀ i ∈ s, ∀ j ∈ s, i ≠ j → f i ≠ f j) → (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i) →
        (∀ i ∈ insert a s, Prime (f i)) →
          (∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j) →
            ((insert a s).inf fun i => f i ^ e i) = ∏ i ∈ insert a s, f i ^ e i
tactic: refine s.induction ?_ ?_
state_before: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
⊢ ∀ ⦃a : ι⦄ {s : Finset ι},
    a ∉ s →
      ((∀ i ∈ s, Prime (f i)) →
          (∀ i ∈ s, ∀ j ∈ s, i ≠ j → f i ≠ f j) → (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i) →
        (∀ i ∈ insert a s, Prime (f i)) →
          (∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j) →
            ((insert a s).inf fun i => f i ^ e i) = ∏ i ∈ insert a s, f i ^ e i
state_after: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
ih : (∀ i ∈ s, Prime (f i)) → (∀ i ∈ s, ∀ j ∈ s, i ≠ j → f i ≠ f j) → (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
⊢ ((insert a s).inf fun i => f i ^ e i) = ∏ i ∈ insert a s, f i ^ e i
tactic: intro a s ha ih prime coprime
state_before: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
ih : (∀ i ∈ s, Prime (f i)) → (∀ i ∈ s, ∀ j ∈ s, i ≠ j → f i ≠ f j) → (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
⊢ ((insert a s).inf fun i => f i ^ e i) = ∏ i ∈ insert a s, f i ^ e i
state_after: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
⊢ ((insert a s).inf fun i => f i ^ e i) = ∏ i ∈ insert a s, f i ^ e i
tactic: specialize
    ih (fun i hi => prime i (Finset.mem_insert_of_mem hi)) fun i hi j hj =>
      coprime i (Finset.mem_insert_of_mem hi) j (Finset.mem_insert_of_mem hj)
state_before: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
⊢ ((insert a s).inf fun i => f i ^ e i) = ∏ i ∈ insert a s, f i ^ e i
state_after: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
⊢ f a ^ e a ⊓ ∏ i ∈ s, f i ^ e i = f a ^ e a * ∏ x ∈ s, f x ^ e x
tactic: rw [Finset.inf_insert, Finset.prod_insert ha, ih]
state_before: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
⊢ f a ^ e a ⊓ ∏ i ∈ s, f i ^ e i = f a ^ e a * ∏ x ∈ s, f x ^ e x
state_after: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
⊢ ∀ (P : Ideal R), f a ^ e a ≤ P → ∏ x ∈ s, f x ^ e x ≤ P → ¬P.IsPrime
tactic: refine le_antisymm (Ideal.le_mul_of_no_prime_factors ?_ inf_le_left inf_le_right) Ideal.mul_le_inf
state_before: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
⊢ ∀ (P : Ideal R), f a ^ e a ≤ P → ∏ x ∈ s, f x ^ e x ≤ P → ¬P.IsPrime
state_after: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
P : Ideal R
hPa : f a ^ e a ≤ P
hPs : ∏ x ∈ s, f x ^ e x ≤ P
hPp : P.IsPrime
⊢ False
tactic: intro P hPa hPs hPp
state_before: case refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
P : Ideal R
hPa : f a ^ e a ≤ P
hPs : ∏ x ∈ s, f x ^ e x ≤ P
hPp : P.IsPrime
⊢ False
state_after: case refine_2.intro.intro
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
P : Ideal R
hPa : f a ^ e a ≤ P
hPs : ∏ x ∈ s, f x ^ e x ≤ P
hPp : P.IsPrime
b : ι
hb : b ∈ s
hPb : f b ^ e b ≤ P
⊢ False
tactic: obtain ⟨b, hb, hPb⟩ := Ideal.prod_le_prime.mp hPs
state_before: case refine_2.intro.intro
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
P : Ideal R
hPa : f a ^ e a ≤ P
hPs : ∏ x ∈ s, f x ^ e x ≤ P
hPp : P.IsPrime
b : ι
hb : b ∈ s
hPb : f b ^ e b ≤ P
⊢ False
state_after: case refine_2.intro.intro
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this✝ : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
P : Ideal R
hPa : f a ^ e a ≤ P
hPs : ∏ x ∈ s, f x ^ e x ≤ P
hPp : P.IsPrime
b : ι
hb : b ∈ s
hPb : f b ^ e b ≤ P
this : (f a).IsPrime
⊢ False
tactic: haveI := Ideal.isPrime_of_prime (prime a (Finset.mem_insert_self a s))
state_before: case refine_2.intro.intro
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this✝ : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
P : Ideal R
hPa : f a ^ e a ≤ P
hPs : ∏ x ∈ s, f x ^ e x ≤ P
hPp : P.IsPrime
b : ι
hb : b ∈ s
hPb : f b ^ e b ≤ P
this : (f a).IsPrime
⊢ False
state_after: case refine_2.intro.intro
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this✝¹ : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
P : Ideal R
hPa : f a ^ e a ≤ P
hPs : ∏ x ∈ s, f x ^ e x ≤ P
hPp : P.IsPrime
b : ι
hb : b ∈ s
hPb : f b ^ e b ≤ P
this✝ : (f a).IsPrime
this : (f b).IsPrime
⊢ False
tactic: haveI := Ideal.isPrime_of_prime (prime b (Finset.mem_insert_of_mem hb))
state_before: case refine_2.intro.intro
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this✝¹ : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
P : Ideal R
hPa : f a ^ e a ≤ P
hPs : ∏ x ∈ s, f x ^ e x ≤ P
hPp : P.IsPrime
b : ι
hb : b ∈ s
hPb : f b ^ e b ≤ P
this✝ : (f a).IsPrime
this : (f b).IsPrime
⊢ False
state_after: case refine_2.intro.intro.refine_1
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this✝¹ : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
P : Ideal R
hPa : f a ^ e a ≤ P
hPs : ∏ x ∈ s, f x ^ e x ≤ P
hPp : P.IsPrime
b : ι
hb : b ∈ s
hPb : f b ^ e b ≤ P
this✝ : (f a).IsPrime
this : (f b).IsPrime
⊢ a ≠ b

case refine_2.intro.intro.refine_2
R : Type u_1
A : Type u_2
K : Type u_3
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Field K
inst✝ : IsDedekindDomain R
ι : Type u_4
s✝ : Finset ι
f : ι → Ideal R
e : ι → ℕ
this✝¹ : DecidableEq ι := Classical.decEq ι
a : ι
s : Finset ι
ha : a ∉ s
prime : ∀ i ∈ insert a s, Prime (f i)
coprime : ∀ i ∈ insert a s, ∀ j ∈ insert a s, i ≠ j → f i ≠ f j
ih : (s.inf fun i => f i ^ e i) = ∏ i ∈ s, f i ^ e i
P : Ideal R
hPa : f a ^ e a ≤ P
hPs : ∏ x ∈ s, f x ^ e x ≤ P
hPp : P.IsPrime
b : ι
hb : b ∈ s
hPb : f b ^ e b ≤ P
this✝ : (f a).IsPrime
this : (f b).IsPrime
⊢ f a = f b
tactic: refine coprime a (Finset.mem_insert_self a s) b (Finset.mem_insert_of_mem hb) ?_ ?_