Theorem: Ideal.IsPrime.exists_mem_prime_of_ne_bot
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

tactic: classical
obtain ⟨a : R, ha₁ : a ∈ I, ha₂ : a ≠ 0⟩ := Submodule.exists_mem_ne_zero_of_ne_bot hI
replace ha₁ : (factors a).prod ∈ I := by
  obtain ⟨u : Rˣ, hu : (factors a).prod * u = a⟩ := factors_prod ha₂
  rwa [← hu, mul_unit_mem_iff_mem _ u.isUnit] at ha₁
obtain ⟨p : R, hp₁ : p ∈ factors a, hp₂ : p ∈ I⟩ :=
  (hI₂.multiset_prod_mem_iff_exists_mem <| factors a).1 ha₁
exact ⟨p, hp₂, prime_of_factor p hp₁⟩
state_before: α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
⊢ ∃ x ∈ I, Prime x
state_after: no goals

tactic: obtain ⟨a : R, ha₁ : a ∈ I, ha₂ : a ≠ 0⟩ := Submodule.exists_mem_ne_zero_of_ne_bot hI
state_before: α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
⊢ ∃ x ∈ I, Prime x
state_after: case intro.intro
α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
a : R
ha₁ : a ∈ I
ha₂ : a ≠ 0
⊢ ∃ x ∈ I, Prime x

tactic: replace ha₁ : (factors a).prod ∈ I := by
  obtain ⟨u : Rˣ, hu : (factors a).prod * u = a⟩ := factors_prod ha₂
  rwa [← hu, mul_unit_mem_iff_mem _ u.isUnit] at ha₁
state_before: case intro.intro
α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
a : R
ha₁ : a ∈ I
ha₂ : a ≠ 0
⊢ ∃ x ∈ I, Prime x
state_after: case intro.intro
α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
a : R
ha₂ : a ≠ 0
ha₁ : (factors a).prod ∈ I
⊢ ∃ x ∈ I, Prime x

tactic: obtain ⟨p : R, hp₁ : p ∈ factors a, hp₂ : p ∈ I⟩ :=
  (hI₂.multiset_prod_mem_iff_exists_mem <| factors a).1 ha₁
state_before: case intro.intro
α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
a : R
ha₂ : a ≠ 0
ha₁ : (factors a).prod ∈ I
⊢ ∃ x ∈ I, Prime x
state_after: case intro.intro.intro.intro
α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
a : R
ha₂ : a ≠ 0
ha₁ : (factors a).prod ∈ I
p : R
hp₁ : p ∈ factors a
hp₂ : p ∈ I
⊢ ∃ x ∈ I, Prime x

tactic: exact ⟨p, hp₂, prime_of_factor p hp₁⟩
state_before: case intro.intro.intro.intro
α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
a : R
ha₂ : a ≠ 0
ha₁ : (factors a).prod ∈ I
p : R
hp₁ : p ∈ factors a
hp₂ : p ∈ I
⊢ ∃ x ∈ I, Prime x
state_after: no goals

tactic: obtain ⟨u : Rˣ, hu : (factors a).prod * u = a⟩ := factors_prod ha₂
state_before: α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
a : R
ha₁ : a ∈ I
ha₂ : a ≠ 0
⊢ (factors a).prod ∈ I
state_after: case intro
α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
a : R
ha₁ : a ∈ I
ha₂ : a ≠ 0
u : Rˣ
hu : (factors a).prod * ↑u = a
⊢ (factors a).prod ∈ I

tactic: rwa [← hu, mul_unit_mem_iff_mem _ u.isUnit] at ha₁
state_before: case intro
α : Type u_1
R : Type u_2
inst✝² : CommSemiring R
inst✝¹ : IsDomain R
inst✝ : UniqueFactorizationMonoid R
I : Ideal R
hI₂ : I.IsPrime
hI : I ≠ ⊥
a : R
ha₁ : a ∈ I
ha₂ : a ≠ 0
u : Rˣ
hu : (factors a).prod * ↑u = a
⊢ (factors a).prod ∈ I
state_after: no goals