Theorem: MvPolynomial.mem_map_C_iff
File: Mathlib/RingTheory/Polynomial/Basic.lean

tactic: constructor
state_before: R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
⊢ f ∈ Ideal.map C I ↔ ∀ (m : σ →₀ ℕ), coeff m f ∈ I

tactic: intro hf
state_before: case mp
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
⊢ f ∈ Ideal.map C I → ∀ (m : σ →₀ ℕ), coeff m f ∈ I

tactic: apply @Submodule.span_induction _ _ _ _ Semiring.toModule f _ _ hf
state_before: case mp
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : f ∈ Ideal.map C I
⊢ ∀ (m : σ →₀ ℕ), coeff m f ∈ I

tactic: intro f hf n
state_before: case mp.Hs
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : f ∈ Ideal.map C I
⊢ ∀ (x : MvPolynomial σ R), x ∈ ↑C '' ↑I → ∀ (m : σ →₀ ℕ), coeff m x ∈ I

tactic: cases' (Set.mem_image _ _ _).mp hf with x hx
state_before: case mp.Hs
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f✝ : MvPolynomial σ R
hf✝ : f✝ ∈ Ideal.map C I
f : MvPolynomial σ R
hf : f ∈ ↑C '' ↑I
n : σ →₀ ℕ
⊢ coeff n f ∈ I

tactic: rw [← hx.right, coeff_C]
state_before: case mp.Hs.intro
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f✝ : MvPolynomial σ R
hf✝ : f✝ ∈ Ideal.map C I
f : MvPolynomial σ R
hf : f ∈ ↑C '' ↑I
n : σ →₀ ℕ
x : R
hx : x ∈ ↑I ∧ ↑C x = f
⊢ coeff n f ∈ I

tactic: by_cases h : n = 0
state_before: case mp.Hs.intro
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f✝ : MvPolynomial σ R
hf✝ : f✝ ∈ Ideal.map C I
f : MvPolynomial σ R
hf : f ∈ ↑C '' ↑I
n : σ →₀ ℕ
x : R
hx : x ∈ ↑I ∧ ↑C x = f
⊢ (if 0 = n then x else 0) ∈ I

tactic: simpa [h] using hx.left
state_before: case pos
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f✝ : MvPolynomial σ R
hf✝ : f✝ ∈ Ideal.map C I
f : MvPolynomial σ R
hf : f ∈ ↑C '' ↑I
n : σ →₀ ℕ
x : R
hx : x ∈ ↑I ∧ ↑C x = f
h : n = 0
⊢ (if 0 = n then x else 0) ∈ I

tactic: simp [Ne.symm h]
state_before: case neg
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f✝ : MvPolynomial σ R
hf✝ : f✝ ∈ Ideal.map C I
f : MvPolynomial σ R
hf : f ∈ ↑C '' ↑I
n : σ →₀ ℕ
x : R
hx : x ∈ ↑I ∧ ↑C x = f
h : ¬n = 0
⊢ (if 0 = n then x else 0) ∈ I

tactic: simp
state_before: case mp.H0
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : f ∈ Ideal.map C I
⊢ ∀ (m : σ →₀ ℕ), coeff m 0 ∈ I

tactic: exact fun f g hf hg n => by simp [I.add_mem (hf n) (hg n)]
state_before: case mp.H1
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : f ∈ Ideal.map C I
⊢ ∀ (x y : MvPolynomial σ R),
    (∀ (m : σ →₀ ℕ), coeff m x ∈ I) → (∀ (m : σ →₀ ℕ), coeff m y ∈ I) → ∀ (m : σ →₀ ℕ), coeff m (x + y) ∈ I

tactic: simp [I.add_mem (hf n) (hg n)]
state_before: R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f✝ : MvPolynomial σ R
hf✝ : f✝ ∈ Ideal.map C I
f g : MvPolynomial σ R
hf : ∀ (m : σ →₀ ℕ), coeff m f ∈ I
hg : ∀ (m : σ →₀ ℕ), coeff m g ∈ I
n : σ →₀ ℕ
⊢ coeff n (f + g) ∈ I

tactic: refine' fun f g hg n => _
state_before: case mp.H2
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : f ∈ Ideal.map C I
⊢ ∀ (a x : MvPolynomial σ R), (∀ (m : σ →₀ ℕ), coeff m x ∈ I) → ∀ (m : σ →₀ ℕ), coeff m (a • x) ∈ I

tactic: rw [smul_eq_mul, coeff_mul]
state_before: case mp.H2
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f✝ : MvPolynomial σ R
hf : f✝ ∈ Ideal.map C I
f g : MvPolynomial σ R
hg : ∀ (m : σ →₀ ℕ), coeff m g ∈ I
n : σ →₀ ℕ
⊢ coeff n (f • g) ∈ I

tactic: exact I.sum_mem fun c _ => I.mul_mem_left (f.coeff c.fst) (hg c.snd)
state_before: case mp.H2
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f✝ : MvPolynomial σ R
hf : f✝ ∈ Ideal.map C I
f g : MvPolynomial σ R
hg : ∀ (m : σ →₀ ℕ), coeff m g ∈ I
n : σ →₀ ℕ
⊢ ∑ x in Finsupp.antidiagonal n, coeff x.fst f * coeff x.snd g ∈ I

tactic: intro hf
state_before: case mpr
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
⊢ (∀ (m : σ →₀ ℕ), coeff m f ∈ I) → f ∈ Ideal.map C I

tactic: rw [as_sum f]
state_before: case mpr
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : ∀ (m : σ →₀ ℕ), coeff m f ∈ I
⊢ f ∈ Ideal.map C I

tactic: suffices ∀ m ∈ f.support, monomial m (coeff m f) ∈ (Ideal.map C I : Ideal (MvPolynomial σ R)) by
  exact Submodule.sum_mem _ this
state_before: case mpr
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : ∀ (m : σ →₀ ℕ), coeff m f ∈ I
⊢ ∑ v in support f, ↑(monomial v) (coeff v f) ∈ Ideal.map C I

tactic: intro m _
state_before: case mpr
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : ∀ (m : σ →₀ ℕ), coeff m f ∈ I
⊢ ∀ (m : σ →₀ ℕ), m ∈ support f → ↑(monomial m) (coeff m f) ∈ Ideal.map C I

tactic: rw [← mul_one (coeff m f), ← C_mul_monomial]
state_before: case mpr
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : ∀ (m : σ →₀ ℕ), coeff m f ∈ I
m : σ →₀ ℕ
a✝ : m ∈ support f
⊢ ↑(monomial m) (coeff m f) ∈ Ideal.map C I

tactic: suffices C (coeff m f) ∈ (Ideal.map C I : Ideal (MvPolynomial σ R)) by
  exact Ideal.mul_mem_right _ _ this
state_before: case mpr
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : ∀ (m : σ →₀ ℕ), coeff m f ∈ I
m : σ →₀ ℕ
a✝ : m ∈ support f
⊢ ↑C (coeff m f) * ↑(monomial m) 1 ∈ Ideal.map C I

tactic: apply Ideal.mem_map_of_mem _
state_before: case mpr
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : ∀ (m : σ →₀ ℕ), coeff m f ∈ I
m : σ →₀ ℕ
a✝ : m ∈ support f
⊢ ↑C (coeff m f) ∈ Ideal.map C I

tactic: exact hf m
state_before: case mpr
R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : ∀ (m : σ →₀ ℕ), coeff m f ∈ I
m : σ →₀ ℕ
a✝ : m ∈ support f
⊢ coeff m f ∈ I

tactic: exact Submodule.sum_mem _ this
state_before: R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : ∀ (m : σ →₀ ℕ), coeff m f ∈ I
this : ∀ (m : σ →₀ ℕ), m ∈ support f → ↑(monomial m) (coeff m f) ∈ Ideal.map C I
⊢ ∑ v in support f, ↑(monomial v) (coeff v f) ∈ Ideal.map C I

tactic: exact Ideal.mul_mem_right _ _ this
state_before: R : Type u
S : Type ?u.979377
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
f : MvPolynomial σ R
hf : ∀ (m : σ →₀ ℕ), coeff m f ∈ I
m : σ →₀ ℕ
a✝ : m ∈ support f
this : ↑C (coeff m f) ∈ Ideal.map C I
⊢ ↑C (coeff m f) * ↑(monomial m) 1 ∈ Ideal.map C I