Theorem: MvPolynomial.IsHomogeneous.eq_zero_of_forall_eval_eq_zero_of_le_card
File: Mathlib/RingTheory/MvPolynomial/Homogeneous.lean

Proof steps:
state_before: σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
F G : MvPolynomial σ R
n : ℕ
hF : F.IsHomogeneous n
h : ∀ (r : σ → R), (eval r) F = 0
hnR : ↑n ≤ #R
⊢ F = 0
state_after: σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
F G : MvPolynomial σ R
n : ℕ
hF : F.IsHomogeneous n
hnR : ↑n ≤ #R
h : F ≠ 0
⊢ ∃ r, (eval r) F ≠ 0
tactic: contrapose! h
state_before: σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
F G : MvPolynomial σ R
n : ℕ
hF : F.IsHomogeneous n
hnR : ↑n ≤ #R
h : F ≠ 0
⊢ ∃ r, (eval r) F ≠ 0
state_after: case intro.intro.intro.intro
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
⊢ ∃ r, (eval r) ((rename f) F) ≠ 0
tactic: obtain ⟨k, f, hf, F, rfl⟩ := exists_fin_rename F
state_before: case intro.intro.intro.intro
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
⊢ ∃ r, (eval r) ((rename f) F) ≠ 0
state_after: case intro.intro.intro.intro
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
hF₀ : F ≠ 0
⊢ ∃ r, (eval r) ((rename f) F) ≠ 0
tactic: have hF₀ : F ≠ 0 := by rintro rfl; simp at h
state_before: case intro.intro.intro.intro
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
hF₀ : F ≠ 0
⊢ ∃ r, (eval r) ((rename f) F) ≠ 0
state_after: case intro.intro.intro.intro
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF✝ : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
hF₀ : F ≠ 0
hF : F.IsHomogeneous n
⊢ ∃ r, (eval r) ((rename f) F) ≠ 0
tactic: have hF : F.IsHomogeneous n := by rwa [rename_isHomogeneous_iff hf] at hF
state_before: case intro.intro.intro.intro
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF✝ : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
hF₀ : F ≠ 0
hF : F.IsHomogeneous n
⊢ ∃ r, (eval r) ((rename f) F) ≠ 0
state_after: case intro.intro.intro.intro.intro
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF✝ : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
hF₀ : F ≠ 0
hF : F.IsHomogeneous n
r : Fin k → R
hr : (eval r) F ≠ 0
⊢ ∃ r, (eval r) ((rename f) F) ≠ 0
tactic: obtain ⟨r, hr⟩ := exists_eval_ne_zero_of_totalDegree_le_card_aux hF hF₀ hnR
state_before: case intro.intro.intro.intro.intro
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF✝ : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
hF₀ : F ≠ 0
hF : F.IsHomogeneous n
r : Fin k → R
hr : (eval r) F ≠ 0
⊢ ∃ r, (eval r) ((rename f) F) ≠ 0
state_after: case intro.intro.intro.intro.intro.intro
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF✝ : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
hF₀ : F ≠ 0
hF : F.IsHomogeneous n
r : σ → R
hr : (eval (r ∘ f)) F ≠ 0
⊢ ∃ r, (eval r) ((rename f) F) ≠ 0
tactic: obtain ⟨r, rfl⟩ := (Function.factorsThrough_iff _).mp <| (hf.factorsThrough r)
state_before: case intro.intro.intro.intro.intro.intro
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF✝ : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
hF₀ : F ≠ 0
hF : F.IsHomogeneous n
r : σ → R
hr : (eval (r ∘ f)) F ≠ 0
⊢ ∃ r, (eval r) ((rename f) F) ≠ 0
state_after: case h
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF✝ : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
hF₀ : F ≠ 0
hF : F.IsHomogeneous n
r : σ → R
hr : (eval (r ∘ f)) F ≠ 0
⊢ (eval r) ((rename f) F) ≠ 0
tactic: use r
state_before: case h
σ✝ : Type u_1
τ : Type u_2
R✝ : Type u_3
S : Type u_4
inst✝⁴ inst✝³ : CommSemiring R✝
inst✝² : CommSemiring S
φ ψ : MvPolynomial σ✝ R✝
m n✝ : ℕ
R : Type u_5
σ : Type u_6
inst✝¹ : CommRing R
inst✝ : IsDomain R
G : MvPolynomial σ R
n : ℕ
hnR : ↑n ≤ #R
k : ℕ
f : Fin k → σ
hf : Function.Injective f
F : MvPolynomial (Fin k) R
hF✝ : ((rename f) F).IsHomogeneous n
h : (rename f) F ≠ 0
hF₀ : F ≠ 0
hF : F.IsHomogeneous n
r : σ → R
hr : (eval (r ∘ f)) F ≠ 0
⊢ (eval r) ((rename f) F) ≠ 0
state_after: no goals
tactic: rwa [eval_rename]