[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
V : Set (σ → k)
p q : MvPolynomial σ k
hp : p ∈ {p | ∀ (x : σ → k), x ∈ V → ↑(eval x) p = 0}
hq : q ∈ {p | ∀ (x : σ → k), x ∈ V → ↑(eval x) p = 0}
x : σ → k
hx : x ∈ V
⊢ ↑(eval x) (p + q) = 0
[PROOFSTEP]
simp only [hq x hx, hp x hx, add_zero, RingHom.map_add]
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
V : Set (σ → k)
p q : MvPolynomial σ k
hq :
  q ∈
    {
          toAddSubsemigroup :=
            { carrier := {p | ∀ (x : σ → k), x ∈ V → ↑(eval x) p = 0},
              add_mem' :=
                (_ :
                  ∀ {p q : MvPolynomial σ k},
                    p ∈ {p | ∀ (x : σ → k), x ∈ V → ↑(eval x) p = 0} →
                      q ∈ {p | ∀ (x : σ → k), x ∈ V → ↑(eval x) p = 0} →
                        ∀ (x : σ → k), x ∈ V → ↑(eval x) (p + q) = 0) },
          zero_mem' := (_ : ∀ (x : σ → k), x ∈ V → ↑(eval x) 0 = 0) }.toAddSubsemigroup.carrier
x : σ → k
hx : x ∈ V
⊢ ↑(eval x) (p • q) = 0
[PROOFSTEP]
simp only [hq x hx, Algebra.id.smul_eq_mul, mul_zero, RingHom.map_mul]
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
x : σ → k
⊢ IsMaximal (vanishingIdeal {x})
[PROOFSTEP]
have : MvPolynomial σ k ⧸ vanishingIdeal { x } ≃+* k :=
  RingEquiv.ofBijective (Ideal.Quotient.lift _ (eval x) fun p h => (mem_vanishingIdeal_singleton_iff x p).mp h)
    (by
      refine'
        ⟨(injective_iff_map_eq_zero _).mpr fun p hp => _, fun z =>
          ⟨(Ideal.Quotient.mk (vanishingIdeal { x } : Ideal (MvPolynomial σ k))) (C z), by simp⟩⟩
      obtain ⟨q, rfl⟩ := Quotient.mk_surjective p
      rwa [Ideal.Quotient.lift_mk, ← mem_vanishingIdeal_singleton_iff, ← Quotient.eq_zero_iff_mem] at hp )
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
x : σ → k
⊢ Function.Bijective
    ↑(Ideal.Quotient.lift (vanishingIdeal {x}) (eval x)
        (_ : ∀ (p : MvPolynomial σ k), p ∈ vanishingIdeal {x} → ↑(eval x) p = 0))
[PROOFSTEP]
refine'
  ⟨(injective_iff_map_eq_zero _).mpr fun p hp => _, fun z =>
    ⟨(Ideal.Quotient.mk (vanishingIdeal { x } : Ideal (MvPolynomial σ k))) (C z), by simp⟩⟩
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
x : σ → k
z : k
⊢ ↑(Ideal.Quotient.lift (vanishingIdeal {x}) (eval x)
          (_ : ∀ (p : MvPolynomial σ k), p ∈ vanishingIdeal {x} → ↑(eval x) p = 0))
      (↑(Ideal.Quotient.mk (vanishingIdeal {x})) (↑C z)) =
    z
[PROOFSTEP]
simp
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
x : σ → k
p : MvPolynomial σ k ⧸ vanishingIdeal {x}
hp :
  ↑(Ideal.Quotient.lift (vanishingIdeal {x}) (eval x)
          (_ : ∀ (p : MvPolynomial σ k), p ∈ vanishingIdeal {x} → ↑(eval x) p = 0))
      p =
    0
⊢ p = 0
[PROOFSTEP]
obtain ⟨q, rfl⟩ := Quotient.mk_surjective p
[GOAL]
case intro
k : Type u_1
inst✝ : Field k
σ : Type u_2
x : σ → k
q : MvPolynomial σ k
hp :
  ↑(Ideal.Quotient.lift (vanishingIdeal {x}) (eval x)
          (_ : ∀ (p : MvPolynomial σ k), p ∈ vanishingIdeal {x} → ↑(eval x) p = 0))
      (↑(Ideal.Quotient.mk (vanishingIdeal {x})) q) =
    0
⊢ ↑(Ideal.Quotient.mk (vanishingIdeal {x})) q = 0
[PROOFSTEP]
rwa [Ideal.Quotient.lift_mk, ← mem_vanishingIdeal_singleton_iff, ← Quotient.eq_zero_iff_mem] at hp
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
x : σ → k
this : MvPolynomial σ k ⧸ vanishingIdeal {x} ≃+* k
⊢ IsMaximal (vanishingIdeal {x})
[PROOFSTEP]
rw [← bot_quotient_isMaximal_iff, RingEquiv.bot_maximal_iff this]
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
x : σ → k
this : MvPolynomial σ k ⧸ vanishingIdeal {x} ≃+* k
⊢ IsMaximal ⊥
[PROOFSTEP]
exact bot_isMaximal
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
I : Ideal (MvPolynomial σ k)
⊢ radical I ≤ vanishingIdeal (zeroLocus I)
[PROOFSTEP]
intro p hp x hx
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
I : Ideal (MvPolynomial σ k)
p : MvPolynomial σ k
hp : p ∈ radical I
x : σ → k
hx : x ∈ zeroLocus I
⊢ ↑(eval x) p = 0
[PROOFSTEP]
rw [← mem_vanishingIdeal_singleton_iff]
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
I : Ideal (MvPolynomial σ k)
p : MvPolynomial σ k
hp : p ∈ radical I
x : σ → k
hx : x ∈ zeroLocus I
⊢ p ∈ vanishingIdeal {x}
[PROOFSTEP]
rw [radical_eq_sInf] at hp
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
I : Ideal (MvPolynomial σ k)
p : MvPolynomial σ k
hp : p ∈ sInf {J | I ≤ J ∧ IsPrime J}
x : σ → k
hx : x ∈ zeroLocus I
⊢ p ∈ vanishingIdeal {x}
[PROOFSTEP]
refine'
  (mem_sInf.mp hp)
    ⟨le_trans (le_vanishingIdeal_zeroLocus I) (vanishingIdeal_anti_mono fun y hy => hy.symm ▸ hx), IsMaximal.isPrime' _⟩
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
x : σ → k
⊢ IsPrime (vanishingIdeal {x})
[PROOFSTEP]
infer_instance
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
V : Set (σ → k)
p : MvPolynomial σ k
hp : p ∈ PrimeSpectrum.vanishingIdeal (pointToPoint '' V)
x : σ → k
hx : x ∈ V
⊢ IsPrime (vanishingIdeal {x})
[PROOFSTEP]
infer_instance
[GOAL]
k : Type u_1
inst✝ : Field k
σ : Type u_2
V : Set (σ → k)
p : MvPolynomial σ k
hp : p ∈ PrimeSpectrum.vanishingIdeal (pointToPoint '' V)
x : σ → k
hx : x ∈ V
⊢ { asIdeal := vanishingIdeal {x}, IsPrime := (_ : IsPrime (vanishingIdeal {x})) } ∈ pointToPoint '' V
[PROOFSTEP]
exact ⟨x, ⟨hx, rfl⟩⟩
[GOAL]
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
⊢ IsMaximal I ↔ ∃ x, I = vanishingIdeal {x}
[PROOFSTEP]
cases nonempty_fintype σ
[GOAL]
case intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
⊢ IsMaximal I ↔ ∃ x, I = vanishingIdeal {x}
[PROOFSTEP]
refine'
  ⟨fun hI => _, fun h =>
    let ⟨x, hx⟩ := h
    hx.symm ▸ MvPolynomial.vanishingIdeal_singleton_isMaximal⟩
[GOAL]
case intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
⊢ ∃ x, I = vanishingIdeal {x}
[PROOFSTEP]
letI : I.IsMaximal := hI
[GOAL]
case intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this : IsMaximal I := hI
⊢ ∃ x, I = vanishingIdeal {x}
[PROOFSTEP]
letI : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
[GOAL]
case intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
⊢ ∃ x, I = vanishingIdeal {x}
[PROOFSTEP]
let ϕ : k →+* MvPolynomial σ k ⧸ I := (Ideal.Quotient.mk I).comp C
[GOAL]
case intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
ϕ : k →+* MvPolynomial σ k ⧸ I := RingHom.comp (Ideal.Quotient.mk I) C
⊢ ∃ x, I = vanishingIdeal {x}
[PROOFSTEP]
have hϕ : Function.Bijective ϕ :=
  ⟨quotient_mk_comp_C_injective _ _ I hI.ne_top,
    IsAlgClosed.algebraMap_surjective_of_isIntegral' ϕ
      (MvPolynomial.comp_C_integral_of_surjective_of_jacobson _ Quotient.mk_surjective)⟩
[GOAL]
case intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
ϕ : k →+* MvPolynomial σ k ⧸ I := RingHom.comp (Ideal.Quotient.mk I) C
hϕ : Function.Bijective ↑ϕ
⊢ ∃ x, I = vanishingIdeal {x}
[PROOFSTEP]
obtain ⟨φ, hφ⟩ := Function.Surjective.hasRightInverse hϕ.2
[GOAL]
case intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
ϕ : k →+* MvPolynomial σ k ⧸ I := RingHom.comp (Ideal.Quotient.mk I) C
hϕ : Function.Bijective ↑ϕ
φ : MvPolynomial σ k ⧸ I → k
hφ : Function.RightInverse φ ↑ϕ
⊢ ∃ x, I = vanishingIdeal {x}
[PROOFSTEP]
let x : σ → k := fun s => φ ((Ideal.Quotient.mk I) (X s))
[GOAL]
case intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
ϕ : k →+* MvPolynomial σ k ⧸ I := RingHom.comp (Ideal.Quotient.mk I) C
hϕ : Function.Bijective ↑ϕ
φ : MvPolynomial σ k ⧸ I → k
hφ : Function.RightInverse φ ↑ϕ
x : σ → k := fun s => φ (↑(Ideal.Quotient.mk I) (X s))
⊢ ∃ x, I = vanishingIdeal {x}
[PROOFSTEP]
have hx : ∀ s : σ, ϕ (x s) = (Ideal.Quotient.mk I) (X s) := fun s => hφ ((Ideal.Quotient.mk I) (X s))
[GOAL]
case intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
ϕ : k →+* MvPolynomial σ k ⧸ I := RingHom.comp (Ideal.Quotient.mk I) C
hϕ : Function.Bijective ↑ϕ
φ : MvPolynomial σ k ⧸ I → k
hφ : Function.RightInverse φ ↑ϕ
x : σ → k := fun s => φ (↑(Ideal.Quotient.mk I) (X s))
hx : ∀ (s : σ), ↑ϕ (x s) = ↑(Ideal.Quotient.mk I) (X s)
⊢ ∃ x, I = vanishingIdeal {x}
[PROOFSTEP]
refine' ⟨x, (IsMaximal.eq_of_le (by infer_instance) hI.ne_top _).symm⟩
[GOAL]
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
ϕ : k →+* MvPolynomial σ k ⧸ I := RingHom.comp (Ideal.Quotient.mk I) C
hϕ : Function.Bijective ↑ϕ
φ : MvPolynomial σ k ⧸ I → k
hφ : Function.RightInverse φ ↑ϕ
x : σ → k := fun s => φ (↑(Ideal.Quotient.mk I) (X s))
hx : ∀ (s : σ), ↑ϕ (x s) = ↑(Ideal.Quotient.mk I) (X s)
⊢ IsMaximal (vanishingIdeal {x})
[PROOFSTEP]
infer_instance
[GOAL]
case intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
ϕ : k →+* MvPolynomial σ k ⧸ I := RingHom.comp (Ideal.Quotient.mk I) C
hϕ : Function.Bijective ↑ϕ
φ : MvPolynomial σ k ⧸ I → k
hφ : Function.RightInverse φ ↑ϕ
x : σ → k := fun s => φ (↑(Ideal.Quotient.mk I) (X s))
hx : ∀ (s : σ), ↑ϕ (x s) = ↑(Ideal.Quotient.mk I) (X s)
⊢ vanishingIdeal {x} ≤ I
[PROOFSTEP]
intro p hp
[GOAL]
case intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
ϕ : k →+* MvPolynomial σ k ⧸ I := RingHom.comp (Ideal.Quotient.mk I) C
hϕ : Function.Bijective ↑ϕ
φ : MvPolynomial σ k ⧸ I → k
hφ : Function.RightInverse φ ↑ϕ
x : σ → k := fun s => φ (↑(Ideal.Quotient.mk I) (X s))
hx : ∀ (s : σ), ↑ϕ (x s) = ↑(Ideal.Quotient.mk I) (X s)
p : MvPolynomial σ k
hp : p ∈ vanishingIdeal {x}
⊢ p ∈ I
[PROOFSTEP]
rw [← Quotient.eq_zero_iff_mem, map_mvPolynomial_eq_eval₂ (Ideal.Quotient.mk I) p, eval₂_eq']
[GOAL]
case intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
ϕ : k →+* MvPolynomial σ k ⧸ I := RingHom.comp (Ideal.Quotient.mk I) C
hϕ : Function.Bijective ↑ϕ
φ : MvPolynomial σ k ⧸ I → k
hφ : Function.RightInverse φ ↑ϕ
x : σ → k := fun s => φ (↑(Ideal.Quotient.mk I) (X s))
hx : ∀ (s : σ), ↑ϕ (x s) = ↑(Ideal.Quotient.mk I) (X s)
p : MvPolynomial σ k
hp : p ∈ vanishingIdeal {x}
⊢ (Finset.sum (support p) fun d =>
      ↑(RingHom.comp (Ideal.Quotient.mk I) C) (coeff d p) *
        Finset.prod Finset.univ fun i => ↑(Ideal.Quotient.mk I) (X i) ^ ↑d i) =
    0
[PROOFSTEP]
rw [mem_vanishingIdeal_singleton_iff, eval_eq'] at hp
[GOAL]
case intro.intro
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
val✝ : Fintype σ
hI : IsMaximal I
this✝ : IsMaximal I := hI
this : Field (MvPolynomial σ k ⧸ I) := Quotient.field I
ϕ : k →+* MvPolynomial σ k ⧸ I := RingHom.comp (Ideal.Quotient.mk I) C
hϕ : Function.Bijective ↑ϕ
φ : MvPolynomial σ k ⧸ I → k
hφ : Function.RightInverse φ ↑ϕ
x : σ → k := fun s => φ (↑(Ideal.Quotient.mk I) (X s))
hx : ∀ (s : σ), ↑ϕ (x s) = ↑(Ideal.Quotient.mk I) (X s)
p : MvPolynomial σ k
hp✝ : ↑(eval x) p = 0
hp : (Finset.sum (support p) fun d => coeff d p * Finset.prod Finset.univ fun i => x i ^ ↑d i) = 0
⊢ (Finset.sum (support p) fun d =>
      ↑(RingHom.comp (Ideal.Quotient.mk I) C) (coeff d p) *
        Finset.prod Finset.univ fun i => ↑(Ideal.Quotient.mk I) (X i) ^ ↑d i) =
    0
[PROOFSTEP]
simpa only [ϕ.map_sum, ϕ.map_mul, ϕ.map_prod, ϕ.map_pow, ϕ.map_zero, hx] using congr_arg ϕ hp
[GOAL]
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
⊢ vanishingIdeal (zeroLocus I) = radical I
[PROOFSTEP]
rw [I.radical_eq_jacobson]
[GOAL]
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
⊢ vanishingIdeal (zeroLocus I) = jacobson I
[PROOFSTEP]
refine' le_antisymm (le_sInf _) fun p hp x hx => _
[GOAL]
case refine'_1
k : Type u_1
inst✝² : Field k
σ : Type u_2
inst✝¹ : IsAlgClosed k
inst✝ : Finite σ
I : Ideal (MvPolynomial σ k)
⊢ ∀ (b : Ideal (MvPolynomial σ k)), b ∈ {J | I ≤ J ∧ IsMaximal J} → vanishingIdeal (zeroLocus I) ≤ b
[PROOFSTEP]
rintro J ⟨hJI, hJ⟩
[GOAL]
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 : IsMaximal J
⊢ vanishingIdeal (zeroLocus I) ≤ J
[PROOFSTEP]
obtain ⟨x, hx⟩ := (isMaximal_iff_eq_vanishingIdeal_singleton J).1 hJ
[GOAL]
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 : IsMaximal J
x : σ → k
hx : J = vanishingIdeal {x}
⊢ vanishingIdeal (zeroLocus I) ≤ J
[PROOFSTEP]
refine' hx.symm ▸ vanishingIdeal_anti_mono fun y hy p hp => _
[GOAL]
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 : IsMaximal J
x : σ → k
hx : J = vanishingIdeal {x}
y : σ → k
hy : y ∈ {x}
p : MvPolynomial σ k
hp : p ∈ I
⊢ ↑(eval y) p = 0
[PROOFSTEP]
rw [← mem_vanishingIdeal_singleton_iff, Set.mem_singleton_iff.1 hy, ← hx]
[GOAL]
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 : IsMaximal J
x : σ → k
hx : J = vanishingIdeal {x}
y : σ → k
hy : y ∈ {x}
p : MvPolynomial σ k
hp : p ∈ I
⊢ p ∈ J
[PROOFSTEP]
refine' hJI hp
[GOAL]
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 ∈ jacobson I
x : σ → k
hx : x ∈ zeroLocus I
⊢ ↑(eval x) p = 0
[PROOFSTEP]
rw [← mem_vanishingIdeal_singleton_iff x p]
[GOAL]
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 ∈ jacobson I
x : σ → k
hx : x ∈ zeroLocus I
⊢ p ∈ vanishingIdeal {x}
[PROOFSTEP]
refine'
  (mem_sInf.mp hp)
    ⟨le_trans (le_vanishingIdeal_zeroLocus I) (vanishingIdeal_anti_mono fun y hy => hy.symm ▸ hx),
      MvPolynomial.vanishingIdeal_singleton_isMaximal⟩


[GOAL]
α : Type u_1
S : Type u_2
R : Type u_3
M : Type u_4
inst✝¹ : TopologicalSpace R
inst✝ : TopologicalSpace M
x : tsze R M
⊢ nhds x = Filter.prod (nhds (fst x)) (nhds (snd x))
[PROOFSTEP]
cases x
[GOAL]
case mk
α : Type u_1
S : Type u_2
R : Type u_3
M : Type u_4
inst✝¹ : TopologicalSpace R
inst✝ : TopologicalSpace M
fst✝ : R
snd✝ : M
⊢ nhds (fst✝, snd✝) = Filter.prod (nhds (fst (fst✝, snd✝))) (nhds (snd (fst✝, snd✝)))
[PROOFSTEP]
exact nhds_prod_eq


[GOAL]
ι : Type u_1
α : Type u_2
inst✝ : Zero α
f✝ : ι →₀ α
i✝ : ι
a : α
f : ι →₀ α
i : ι
⊢ i ∈ f.support ↔ (fun i => {↑f i}) i ≠ 0
[PROOFSTEP]
rw [← not_iff_not, not_mem_support_iff, not_ne_iff]
[GOAL]
ι : Type u_1
α : Type u_2
inst✝ : Zero α
f✝ : ι →₀ α
i✝ : ι
a : α
f : ι →₀ α
i : ι
⊢ ↑f i = 0 ↔ (fun i => {↑f i}) i = 0
[PROOFSTEP]
exact singleton_injective.eq_iff.symm
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : Zero α
inst✝¹ : PartialOrder α
inst✝ : LocallyFiniteOrder α
f✝ g✝ : ι →₀ α
i✝ : ι
a : α
f g : ι →₀ α
i : ι
⊢ i ∈ f.support ∪ g.support ↔ (fun i => Icc (↑f i) (↑g i)) i ≠ 0
[PROOFSTEP]
rw [mem_union, ← not_iff_not, not_or, not_mem_support_iff, not_mem_support_iff, not_ne_iff]
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : Zero α
inst✝¹ : PartialOrder α
inst✝ : LocallyFiniteOrder α
f✝ g✝ : ι →₀ α
i✝ : ι
a : α
f g : ι →₀ α
i : ι
⊢ ↑f i = 0 ∧ ↑g i = 0 ↔ (fun i => Icc (↑f i) (↑g i)) i = 0
[PROOFSTEP]
exact Icc_eq_singleton_iff.symm
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : PartialOrder α
inst✝¹ : Zero α
inst✝ : LocallyFiniteOrder α
f✝ g✝ f g x : ι →₀ α
⊢ x ∈ (fun f g => Finset.finsupp (f.support ∪ g.support) ↑(rangeIcc f g)) f g ↔ f ≤ x ∧ x ≤ g
[PROOFSTEP]
refine' (mem_finsupp_iff_of_support_subset <| Finset.subset_of_eq <| rangeIcc_support _ _).trans _
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : PartialOrder α
inst✝¹ : Zero α
inst✝ : LocallyFiniteOrder α
f✝ g✝ f g x : ι →₀ α
⊢ (∀ (i : ι), ↑x i ∈ ↑(rangeIcc f g) i) ↔ f ≤ x ∧ x ≤ g
[PROOFSTEP]
simp_rw [mem_rangeIcc_apply_iff]
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : PartialOrder α
inst✝¹ : Zero α
inst✝ : LocallyFiniteOrder α
f✝ g✝ f g x : ι →₀ α
⊢ (∀ (i : ι), ↑f i ≤ ↑x i ∧ ↑x i ≤ ↑g i) ↔ f ≤ x ∧ x ≤ g
[PROOFSTEP]
exact forall_and
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : PartialOrder α
inst✝¹ : Zero α
inst✝ : LocallyFiniteOrder α
f g : ι →₀ α
⊢ card (Icc f g) = ∏ i in f.support ∪ g.support, card (Icc (↑f i) (↑g i))
[PROOFSTEP]
simp_rw [Icc_eq, card_finsupp, coe_rangeIcc]
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : PartialOrder α
inst✝¹ : Zero α
inst✝ : LocallyFiniteOrder α
f g : ι →₀ α
⊢ card (Ico f g) = ∏ i in f.support ∪ g.support, card (Icc (↑f i) (↑g i)) - 1
[PROOFSTEP]
rw [card_Ico_eq_card_Icc_sub_one, card_Icc]
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : PartialOrder α
inst✝¹ : Zero α
inst✝ : LocallyFiniteOrder α
f g : ι →₀ α
⊢ card (Ioc f g) = ∏ i in f.support ∪ g.support, card (Icc (↑f i) (↑g i)) - 1
[PROOFSTEP]
rw [card_Ioc_eq_card_Icc_sub_one, card_Icc]
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : PartialOrder α
inst✝¹ : Zero α
inst✝ : LocallyFiniteOrder α
f g : ι →₀ α
⊢ card (Ioo f g) = ∏ i in f.support ∪ g.support, card (Icc (↑f i) (↑g i)) - 2
[PROOFSTEP]
rw [card_Ioo_eq_card_Icc_sub_two, card_Icc]
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : Lattice α
inst✝¹ : Zero α
inst✝ : LocallyFiniteOrder α
f g : ι →₀ α
⊢ card (uIcc f g) = ∏ i in f.support ∪ g.support, card (uIcc (↑f i) (↑g i))
[PROOFSTEP]
rw [← support_inf_union_support_sup]
[GOAL]
ι : Type u_1
α : Type u_2
inst✝² : Lattice α
inst✝¹ : Zero α
inst✝ : LocallyFiniteOrder α
f g : ι →₀ α
⊢ card (uIcc f g) = ∏ i in (f ⊓ g).support ∪ (f ⊔ g).support, card (uIcc (↑f i) (↑g i))
[PROOFSTEP]
exact card_Icc (_ : ι →₀ α) _
[GOAL]
ι : Type u_1
α : Type u_2
inst✝¹ : CanonicallyOrderedAddMonoid α
inst✝ : LocallyFiniteOrder α
f : ι →₀ α
⊢ card (Iic f) = ∏ i in f.support, card (Iic (↑f i))
[PROOFSTEP]
classical simp_rw [Iic_eq_Icc, card_Icc, Finsupp.bot_eq_zero, support_zero, empty_union, zero_apply, bot_eq_zero]
[GOAL]
ι : Type u_1
α : Type u_2
inst✝¹ : CanonicallyOrderedAddMonoid α
inst✝ : LocallyFiniteOrder α
f : ι →₀ α
⊢ card (Iic f) = ∏ i in f.support, card (Iic (↑f i))
[PROOFSTEP]
simp_rw [Iic_eq_Icc, card_Icc, Finsupp.bot_eq_zero, support_zero, empty_union, zero_apply, bot_eq_zero]
[GOAL]
ι : Type u_1
α : Type u_2
inst✝¹ : CanonicallyOrderedAddMonoid α
inst✝ : LocallyFiniteOrder α
f : ι →₀ α
⊢ card (Iio f) = ∏ i in f.support, card (Iic (↑f i)) - 1
[PROOFSTEP]
rw [card_Iio_eq_card_Iic_sub_one, card_Iic]