Theorem: Polynomial.sup_ker_aeval_le_ker_aeval_mul
File: Mathlib/RingTheory/Polynomial/Basic.lean

tactic: intro v hv
state_before: R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
⊢ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q) ≤ LinearMap.ker ((aeval f) (p * q))
state_after: R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
v : M
hv : v ∈ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q)
⊢ v ∈ LinearMap.ker ((aeval f) (p * q))

tactic: rcases Submodule.mem_sup.1 hv with ⟨x, hx, y, hy, hxy⟩
state_before: R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
v : M
hv : v ∈ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q)
⊢ v ∈ LinearMap.ker ((aeval f) (p * q))
state_after: case intro.intro.intro.intro
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
v : M
hv : v ∈ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q)
x : M
hx : x ∈ LinearMap.ker ((aeval f) p)
y : M
hy : y ∈ LinearMap.ker ((aeval f) q)
hxy : x + y = v
⊢ v ∈ LinearMap.ker ((aeval f) (p * q))

tactic: have h_eval_x : aeval f (p * q) x = 0 := by
  rw [mul_comm, aeval_mul, LinearMap.mul_apply, LinearMap.mem_ker.1 hx, LinearMap.map_zero]
state_before: case intro.intro.intro.intro
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
v : M
hv : v ∈ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q)
x : M
hx : x ∈ LinearMap.ker ((aeval f) p)
y : M
hy : y ∈ LinearMap.ker ((aeval f) q)
hxy : x + y = v
⊢ v ∈ LinearMap.ker ((aeval f) (p * q))
state_after: case intro.intro.intro.intro
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
v : M
hv : v ∈ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q)
x : M
hx : x ∈ LinearMap.ker ((aeval f) p)
y : M
hy : y ∈ LinearMap.ker ((aeval f) q)
hxy : x + y = v
h_eval_x : ((aeval f) (p * q)) x = 0
⊢ v ∈ LinearMap.ker ((aeval f) (p * q))

tactic: have h_eval_y : aeval f (p * q) y = 0 := by
  rw [aeval_mul, LinearMap.mul_apply, LinearMap.mem_ker.1 hy, LinearMap.map_zero]
state_before: case intro.intro.intro.intro
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
v : M
hv : v ∈ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q)
x : M
hx : x ∈ LinearMap.ker ((aeval f) p)
y : M
hy : y ∈ LinearMap.ker ((aeval f) q)
hxy : x + y = v
h_eval_x : ((aeval f) (p * q)) x = 0
⊢ v ∈ LinearMap.ker ((aeval f) (p * q))
state_after: case intro.intro.intro.intro
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
v : M
hv : v ∈ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q)
x : M
hx : x ∈ LinearMap.ker ((aeval f) p)
y : M
hy : y ∈ LinearMap.ker ((aeval f) q)
hxy : x + y = v
h_eval_x : ((aeval f) (p * q)) x = 0
h_eval_y : ((aeval f) (p * q)) y = 0
⊢ v ∈ LinearMap.ker ((aeval f) (p * q))

tactic: rw [LinearMap.mem_ker, ← hxy, LinearMap.map_add, h_eval_x, h_eval_y, add_zero]
state_before: case intro.intro.intro.intro
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
v : M
hv : v ∈ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q)
x : M
hx : x ∈ LinearMap.ker ((aeval f) p)
y : M
hy : y ∈ LinearMap.ker ((aeval f) q)
hxy : x + y = v
h_eval_x : ((aeval f) (p * q)) x = 0
h_eval_y : ((aeval f) (p * q)) y = 0
⊢ v ∈ LinearMap.ker ((aeval f) (p * q))
state_after: no goals

tactic: rw [mul_comm, aeval_mul, LinearMap.mul_apply, LinearMap.mem_ker.1 hx, LinearMap.map_zero]
state_before: R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
v : M
hv : v ∈ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q)
x : M
hx : x ∈ LinearMap.ker ((aeval f) p)
y : M
hy : y ∈ LinearMap.ker ((aeval f) q)
hxy : x + y = v
⊢ ((aeval f) (p * q)) x = 0
state_after: no goals

tactic: rw [aeval_mul, LinearMap.mul_apply, LinearMap.mem_ker.1 hy, LinearMap.map_zero]
state_before: R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : M →ₗ[R] M
p q : R[X]
v : M
hv : v ∈ LinearMap.ker ((aeval f) p) ⊔ LinearMap.ker ((aeval f) q)
x : M
hx : x ∈ LinearMap.ker ((aeval f) p)
y : M
hy : y ∈ LinearMap.ker ((aeval f) q)
hxy : x + y = v
h_eval_x : ((aeval f) (p * q)) x = 0
⊢ ((aeval f) (p * q)) y = 0
state_after: no goals