Theorem: Ideal.IsMaximal.isPrime
File: Mathlib/RingTheory/Ideal/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
⊢ y ∈ I
state_after: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
⊢ y ∈ I
tactic: let J : Ideal α := Submodule.span α (insert x ↑I)
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
⊢ y ∈ I
state_after: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
⊢ y ∈ I
tactic: have IJ : I ≤ J := Set.Subset.trans (subset_insert _ _) subset_span
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
⊢ y ∈ I
state_after: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
⊢ y ∈ I
tactic: have xJ : x ∈ J := Ideal.subset_span (Set.mem_insert x I)
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
⊢ y ∈ I
state_after: case intro
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : ∀ (J : Ideal α) (x : α), I ≤ J → x ∉ I → x ∈ J → 1 ∈ J
⊢ y ∈ I
tactic: cases' isMaximal_iff.1 H with _ oJ
state_before: case intro
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : ∀ (J : Ideal α) (x : α), I ≤ J → x ∉ I → x ∈ J → 1 ∈ J
⊢ y ∈ I
state_after: case intro
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : 1 ∈ J
⊢ y ∈ I
tactic: specialize oJ J x IJ hx xJ
state_before: case intro
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : 1 ∈ J
⊢ y ∈ I
state_after: case intro.intro.intro.intro
α : Type u
β : Type v
a✝ b✝ : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : 1 ∈ J
a b : α
h : b ∈ Submodule.span α ↑I
oe : 1 = a • x + b
⊢ y ∈ I
tactic: rcases Submodule.mem_span_insert.mp oJ with ⟨a, b, h, oe⟩
state_before: case intro.intro.intro.intro
α : Type u
β : Type v
a✝ b✝ : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : 1 ∈ J
a b : α
h : b ∈ Submodule.span α ↑I
oe : 1 = a • x + b
⊢ y ∈ I
state_after: case intro.intro.intro.intro
α : Type u
β : Type v
a✝ b✝ : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : 1 ∈ J
a b : α
h : b ∈ Submodule.span α ↑I
oe : 1 = a • x + b
F : y * 1 = y * (a • x + b)
⊢ y ∈ I
tactic: obtain F : y * 1 = y * (a • x + b) := congr_arg (fun g : α => y * g) oe
state_before: case intro.intro.intro.intro
α : Type u
β : Type v
a✝ b✝ : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : 1 ∈ J
a b : α
h : b ∈ Submodule.span α ↑I
oe : 1 = a • x + b
F : y * 1 = y * (a • x + b)
⊢ y ∈ I
state_after: case intro.intro.intro.intro
α : Type u
β : Type v
a✝ b✝ : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : 1 ∈ J
a b : α
h : b ∈ Submodule.span α ↑I
oe : 1 = a • x + b
F : y * 1 = y * (a • x + b)
⊢ a * (x * y) + y * b ∈ I
tactic: rw [← mul_one y, F, mul_add, mul_comm, smul_eq_mul, mul_assoc]
state_before: case intro.intro.intro.intro
α : Type u
β : Type v
a✝ b✝ : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : 1 ∈ J
a b : α
h : b ∈ Submodule.span α ↑I
oe : 1 = a • x + b
F : y * 1 = y * (a • x + b)
⊢ a * (x * y) + y * b ∈ I
state_after: case intro.intro.intro.intro
α : Type u
β : Type v
a✝ b✝ : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : 1 ∈ J
a b : α
h : b ∈ Submodule.span α ↑I
oe : 1 = a • x + b
F : y * 1 = y * (a • x + b)
⊢ b ∈ I
tactic: refine Submodule.add_mem I (I.mul_mem_left a hxy) (Submodule.smul_mem I y ?_)
state_before: case intro.intro.intro.intro
α : Type u
β : Type v
a✝ b✝ : α
inst✝ : CommSemiring α
I✝ I : Ideal α
H : I.IsMaximal
x y : α
hxy : x * y ∈ I
hx : x ∉ I
J : Ideal α := Submodule.span α (insert x ↑I)
IJ : I ≤ J
xJ : x ∈ J
left✝ : 1 ∉ I
oJ : 1 ∈ J
a b : α
h : b ∈ Submodule.span α ↑I
oe : 1 = a • x + b
F : y * 1 = y * (a • x + b)
⊢ b ∈ I
state_after: no goals
tactic: rwa [Submodule.span_eq] at h