Theorem: MvPolynomial.vanishingIdeal_zeroLocus_eq_radical
File: Mathlib/RingTheory/Nullstellensatz.lean

tactic: rw [I.radical_eq_jacobson]
state_before: k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
⊢ vanishingIdeal (zeroLocus I) = I.radical
state_after: k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
⊢ vanishingIdeal (zeroLocus I) = I.jacobson

tactic: refine le_antisymm (le_sInf ?_) fun p hp x hx => ?_
state_before: k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
⊢ vanishingIdeal (zeroLocus I) = I.jacobson
state_after: case refine_1
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
⊢ ∀ b ∈ {J | I ≤ J ∧ J.IsMaximal}, vanishingIdeal (zeroLocus I) ≤ b

case refine_2
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
p : MvPolynomial σ k
hp : p ∈ I.jacobson
x : σ → k
hx : x ∈ zeroLocus I
⊢ (eval x) p = 0

tactic: rintro J ⟨hJI, hJ⟩
state_before: case refine_1
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
⊢ ∀ b ∈ {J | I ≤ J ∧ J.IsMaximal}, vanishingIdeal (zeroLocus I) ≤ b
state_after: case refine_1.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I J : Ideal (MvPolynomial σ k)
hJI : I ≤ J
hJ : J.IsMaximal
⊢ vanishingIdeal (zeroLocus I) ≤ J

tactic: obtain ⟨x, hx⟩ := (isMaximal_iff_eq_vanishingIdeal_singleton J).1 hJ
state_before: case refine_1.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I J : Ideal (MvPolynomial σ k)
hJI : I ≤ J
hJ : J.IsMaximal
⊢ vanishingIdeal (zeroLocus I) ≤ J
state_after: case refine_1.intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I J : Ideal (MvPolynomial σ k)
hJI : I ≤ J
hJ : J.IsMaximal
x : σ → k
hx : J = vanishingIdeal {x}
⊢ vanishingIdeal (zeroLocus I) ≤ J

tactic: refine hx.symm ▸ vanishingIdeal_anti_mono fun y hy p hp => ?_
state_before: case refine_1.intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I J : Ideal (MvPolynomial σ k)
hJI : I ≤ J
hJ : J.IsMaximal
x : σ → k
hx : J = vanishingIdeal {x}
⊢ vanishingIdeal (zeroLocus I) ≤ J
state_after: case refine_1.intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I J : Ideal (MvPolynomial σ k)
hJI : I ≤ J
hJ : J.IsMaximal
x : σ → k
hx : J = vanishingIdeal {x}
y : σ → k
hy : y ∈ {x}
p : MvPolynomial σ k
hp : p ∈ I
⊢ (eval y) p = 0

tactic: rw [← mem_vanishingIdeal_singleton_iff, Set.mem_singleton_iff.1 hy, ← hx]
state_before: case refine_1.intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I J : Ideal (MvPolynomial σ k)
hJI : I ≤ J
hJ : J.IsMaximal
x : σ → k
hx : J = vanishingIdeal {x}
y : σ → k
hy : y ∈ {x}
p : MvPolynomial σ k
hp : p ∈ I
⊢ (eval y) p = 0
state_after: case refine_1.intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I J : Ideal (MvPolynomial σ k)
hJI : I ≤ J
hJ : J.IsMaximal
x : σ → k
hx : J = vanishingIdeal {x}
y : σ → k
hy : y ∈ {x}
p : MvPolynomial σ k
hp : p ∈ I
⊢ p ∈ J

tactic: exact hJI hp
state_before: case refine_1.intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I J : Ideal (MvPolynomial σ k)
hJI : I ≤ J
hJ : J.IsMaximal
x : σ → k
hx : J = vanishingIdeal {x}
y : σ → k
hy : y ∈ {x}
p : MvPolynomial σ k
hp : p ∈ I
⊢ p ∈ J
state_after: no goals

tactic: rw [← mem_vanishingIdeal_singleton_iff x p]
state_before: case refine_2
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
p : MvPolynomial σ k
hp : p ∈ I.jacobson
x : σ → k
hx : x ∈ zeroLocus I
⊢ (eval x) p = 0
state_after: case refine_2
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
p : MvPolynomial σ k
hp : p ∈ I.jacobson
x : σ → k
hx : x ∈ zeroLocus I
⊢ p ∈ vanishingIdeal {x}

tactic: refine (mem_sInf.mp hp)
  ⟨le_trans (le_vanishingIdeal_zeroLocus I) (vanishingIdeal_anti_mono fun y hy => hy.symm ▸ hx),
    MvPolynomial.vanishingIdeal_singleton_isMaximal⟩
state_before: case refine_2
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
p : MvPolynomial σ k
hp : p ∈ I.jacobson
x : σ → k
hx : x ∈ zeroLocus I
⊢ p ∈ vanishingIdeal {x}
state_after: no goals