Theorem: DiscreteValuationRing.irreducible_of_span_eq_maximalIdeal
File: Mathlib/RingTheory/DiscreteValuationRing/Basic.lean

Proof steps:
state_before: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
⊢ Irreducible ϖ
state_after: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
⊢ Irreducible ϖ
tactic: have h2 : ¬IsUnit ϖ := show ϖ ∈ maximalIdeal R from h.symm ▸ Submodule.mem_span_singleton_self ϖ
state_before: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
⊢ Irreducible ϖ
state_after: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
⊢ ∀ (a b : R), ϖ = a * b → IsUnit a ∨ IsUnit b
tactic: refine ⟨h2, ?_⟩
state_before: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
⊢ ∀ (a b : R), ϖ = a * b → IsUnit a ∨ IsUnit b
state_after: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = a * b
⊢ IsUnit a ∨ IsUnit b
tactic: intro a b hab
state_before: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = a * b
⊢ IsUnit a ∨ IsUnit b
state_after: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h✝ : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = a * b
h : ¬IsUnit a ∧ ¬IsUnit b
⊢ False
tactic: by_contra! h
state_before: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h✝ : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = a * b
h : ¬IsUnit a ∧ ¬IsUnit b
⊢ False
state_after: case intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = a * b
ha : a ∈ maximalIdeal R
hb : b ∈ maximalIdeal R
⊢ False
tactic: obtain ⟨ha : a ∈ maximalIdeal R, hb : b ∈ maximalIdeal R⟩ := h
state_before: case intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = a * b
ha : a ∈ maximalIdeal R
hb : b ∈ maximalIdeal R
⊢ False
state_after: case intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = a * b
ha : ∃ a_1, a_1 * ϖ = a
hb : ∃ a, a * ϖ = b
⊢ False
tactic: rw [h, mem_span_singleton'] at ha hb
state_before: case intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = a * b
ha : ∃ a_1, a_1 * ϖ = a
hb : ∃ a, a * ϖ = b
⊢ False
state_after: case intro.intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
b : R
hb : ∃ a, a * ϖ = b
a : R
hab : ϖ = a * ϖ * b
⊢ False
tactic: rcases ha with ⟨a, rfl⟩
state_before: case intro.intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
b : R
hb : ∃ a, a * ϖ = b
a : R
hab : ϖ = a * ϖ * b
⊢ False
state_after: case intro.intro.intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = a * ϖ * (b * ϖ)
⊢ False
tactic: rcases hb with ⟨b, rfl⟩
state_before: case intro.intro.intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = a * ϖ * (b * ϖ)
⊢ False
state_after: case intro.intro.intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = ϖ * (ϖ * (a * b))
⊢ False
tactic: rw [show a * ϖ * (b * ϖ) = ϖ * (ϖ * (a * b)) by ring] at hab
state_before: case intro.intro.intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = ϖ * (ϖ * (a * b))
⊢ False
state_after: case intro.intro.intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = ϖ * (ϖ * (a * b))
⊢ ϖ = 0
tactic: apply hϖ
state_before: case intro.intro.intro
R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = ϖ * (ϖ * (a * b))
⊢ ϖ = 0
state_after: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = ϖ * (ϖ * (a * b))
⊢ ϖ * (a * b) ≠ 1
tactic: apply eq_zero_of_mul_eq_self_right _ hab.symm
state_before: R✝ : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : IsDomain R✝
inst✝³ : DiscreteValuationRing R✝
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
ϖ : R
hϖ : ϖ ≠ 0
h : maximalIdeal R = span {ϖ}
h2 : ¬IsUnit ϖ
a b : R
hab : ϖ = ϖ * (ϖ * (a * b))
⊢ ϖ * (a * b) ≠ 1
state_after: no goals
tactic: exact fun hh => h2 (isUnit_of_dvd_one ⟨_, hh.symm⟩)