Theorem: Polynomial.mem_map_rangeS
File: Mathlib/Data/Polynomial/Eval.lean

tactic: constructor
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : S[X]
⊢ p ∈ RingHom.rangeS (mapRingHom f) ↔ ∀ (n : ℕ), coeff p n ∈ RingHom.rangeS f

tactic: rintro ⟨p, rfl⟩ n
state_before: case mp
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : S[X]
⊢ p ∈ RingHom.rangeS (mapRingHom f) → ∀ (n : ℕ), coeff p n ∈ RingHom.rangeS f

tactic: rw [coe_mapRingHom, coeff_map]
state_before: case mp.intro
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n✝ : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
n : ℕ
⊢ coeff (↑(mapRingHom f) p) n ∈ RingHom.rangeS f

tactic: exact Set.mem_range_self _
state_before: case mp.intro
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n✝ : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
n : ℕ
⊢ ↑f (coeff p n) ∈ RingHom.rangeS f

tactic: intro h
state_before: case mpr
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : S[X]
⊢ (∀ (n : ℕ), coeff p n ∈ RingHom.rangeS f) → p ∈ RingHom.rangeS (mapRingHom f)

tactic: rw [p.as_sum_range_C_mul_X_pow]
state_before: case mpr
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : S[X]
h : ∀ (n : ℕ), coeff p n ∈ RingHom.rangeS f
⊢ p ∈ RingHom.rangeS (mapRingHom f)

tactic: refine' (mapRingHom f).rangeS.sum_mem _
state_before: case mpr
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : S[X]
h : ∀ (n : ℕ), coeff p n ∈ RingHom.rangeS f
⊢ ∑ i in range (natDegree p + 1), ↑C (coeff p i) * X ^ i ∈ RingHom.rangeS (mapRingHom f)

tactic: intro i _hi
state_before: case mpr
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : S[X]
h : ∀ (n : ℕ), coeff p n ∈ RingHom.rangeS f
⊢ ∀ (c : ℕ), c ∈ range (natDegree p + 1) → ↑C (coeff p c) * X ^ c ∈ RingHom.rangeS (mapRingHom f)

tactic: rcases h i with ⟨c, hc⟩
state_before: case mpr
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : S[X]
h : ∀ (n : ℕ), coeff p n ∈ RingHom.rangeS f
i : ℕ
_hi : i ∈ range (natDegree p + 1)
⊢ ↑C (coeff p i) * X ^ i ∈ RingHom.rangeS (mapRingHom f)

tactic: use C c * X ^ i
state_before: case mpr.intro
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : S[X]
h : ∀ (n : ℕ), coeff p n ∈ RingHom.rangeS f
i : ℕ
_hi : i ∈ range (natDegree p + 1)
c : R
hc : ↑f c = coeff p i
⊢ ↑C (coeff p i) * X ^ i ∈ RingHom.rangeS (mapRingHom f)

tactic: rw [coe_mapRingHom, Polynomial.map_mul, map_C, hc, Polynomial.map_pow, map_X]
state_before: case mpr.intro
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : S[X]
h : ∀ (n : ℕ), coeff p n ∈ RingHom.rangeS f
i : ℕ
_hi : i ∈ range (natDegree p + 1)
c : R
hc : ↑f c = coeff p i
⊢ ↑(mapRingHom f) (↑C c * X ^ i) = ↑C (coeff p i) * X ^ i