Theorem: MvPolynomial.ringHom_ext
File: Mathlib/Data/MvPolynomial/Basic.lean

tactic: refine AddMonoidAlgebra.ringHom_ext' ?_ ?_
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S₁
p q : MvPolynomial σ R
A : Type u_1
inst✝ : Semiring A
f g : MvPolynomial σ R →+* A
hC : ∀ (r : R), ↑f (↑C r) = ↑g (↑C r)
hX : ∀ (i : σ), ↑f (X i) = ↑g (X i)
⊢ f = g

tactic: ext x
state_before: case refine_1
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S₁
p q : MvPolynomial σ R
A : Type u_1
inst✝ : Semiring A
f g : MvPolynomial σ R →+* A
hC : ∀ (r : R), ↑f (↑C r) = ↑g (↑C r)
hX : ∀ (i : σ), ↑f (X i) = ↑g (X i)
⊢ RingHom.comp f singleZeroRingHom = RingHom.comp g singleZeroRingHom

tactic: exact hC _
state_before: case refine_1.a
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S₁
p q : MvPolynomial σ R
A : Type u_1
inst✝ : Semiring A
f g : MvPolynomial σ R →+* A
hC : ∀ (r : R), ↑f (↑C r) = ↑g (↑C r)
hX : ∀ (i : σ), ↑f (X i) = ↑g (X i)
x : R
⊢ ↑(RingHom.comp f singleZeroRingHom) x = ↑(RingHom.comp g singleZeroRingHom) x

tactic: apply Finsupp.mulHom_ext'
state_before: case refine_2
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S₁
p q : MvPolynomial σ R
A : Type u_1
inst✝ : Semiring A
f g : MvPolynomial σ R →+* A
hC : ∀ (r : R), ↑f (↑C r) = ↑g (↑C r)
hX : ∀ (i : σ), ↑f (X i) = ↑g (X i)
⊢ MonoidHom.comp (↑f) (of R (σ →₀ ℕ)) = MonoidHom.comp (↑g) (of R (σ →₀ ℕ))

tactic: intros x
state_before: case refine_2.H
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S₁
p q : MvPolynomial σ R
A : Type u_1
inst✝ : Semiring A
f g : MvPolynomial σ R →+* A
hC : ∀ (r : R), ↑f (↑C r) = ↑g (↑C r)
hX : ∀ (i : σ), ↑f (X i) = ↑g (X i)
⊢ ∀ (x : σ),
    MonoidHom.comp (MonoidHom.comp (↑f) (of R (σ →₀ ℕ))) (↑AddMonoidHom.toMultiplicative (singleAddHom x)) =
      MonoidHom.comp (MonoidHom.comp (↑g) (of R (σ →₀ ℕ))) (↑AddMonoidHom.toMultiplicative (singleAddHom x))

tactic: apply MonoidHom.ext_mnat
state_before: case refine_2.H
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S₁
p q : MvPolynomial σ R
A : Type u_1
inst✝ : Semiring A
f g : MvPolynomial σ R →+* A
hC : ∀ (r : R), ↑f (↑C r) = ↑g (↑C r)
hX : ∀ (i : σ), ↑f (X i) = ↑g (X i)
x : σ
⊢ MonoidHom.comp (MonoidHom.comp (↑f) (of R (σ →₀ ℕ))) (↑AddMonoidHom.toMultiplicative (singleAddHom x)) =
    MonoidHom.comp (MonoidHom.comp (↑g) (of R (σ →₀ ℕ))) (↑AddMonoidHom.toMultiplicative (singleAddHom x))

tactic: exact hX _
state_before: case refine_2.H.h
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S₁
p q : MvPolynomial σ R
A : Type u_1
inst✝ : Semiring A
f g : MvPolynomial σ R →+* A
hC : ∀ (r : R), ↑f (↑C r) = ↑g (↑C r)
hX : ∀ (i : σ), ↑f (X i) = ↑g (X i)
x : σ
⊢ ↑(MonoidHom.comp (MonoidHom.comp (↑f) (of R (σ →₀ ℕ))) (↑AddMonoidHom.toMultiplicative (singleAddHom x)))
      (↑Multiplicative.ofAdd 1) =
    ↑(MonoidHom.comp (MonoidHom.comp (↑g) (of R (σ →₀ ℕ))) (↑AddMonoidHom.toMultiplicative (singleAddHom x)))
      (↑Multiplicative.ofAdd 1)