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

tactic: rw [eq_top_iff]
state_before: R : Type u
S : Type ?u.696957
σ : 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]
hpq : IsCoprime p q
⊢ LinearMap.range (↑(aeval f) p) ⊔ LinearMap.range (↑(aeval f) q) = ⊤

tactic: intro v _
state_before: R : Type u
S : Type ?u.696957
σ : 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]
hpq : IsCoprime p q
⊢ ⊤ ≤ LinearMap.range (↑(aeval f) p) ⊔ LinearMap.range (↑(aeval f) q)

tactic: rw [Submodule.mem_sup]
state_before: R : Type u
S : Type ?u.696957
σ : 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]
hpq : IsCoprime p q
v : M
a✝ : v ∈ ⊤
⊢ v ∈ LinearMap.range (↑(aeval f) p) ⊔ LinearMap.range (↑(aeval f) q)

tactic: rcases hpq with ⟨p', q', hpq'⟩
state_before: R : Type u
S : Type ?u.696957
σ : 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]
hpq : IsCoprime p q
v : M
a✝ : v ∈ ⊤
⊢ ∃ y, y ∈ LinearMap.range (↑(aeval f) p) ∧ ∃ z, z ∈ LinearMap.range (↑(aeval f) q) ∧ y + z = v

tactic: use aeval f (p * p') v
state_before: case intro.intro
R : Type u
S : Type ?u.696957
σ : 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
a✝ : v ∈ ⊤
p' q' : R[X]
hpq' : p' * p + q' * q = 1
⊢ ∃ y, y ∈ LinearMap.range (↑(aeval f) p) ∧ ∃ z, z ∈ LinearMap.range (↑(aeval f) q) ∧ y + z = v

tactic: use LinearMap.mem_range.2 ⟨aeval f p' v, by simp only [LinearMap.mul_apply, aeval_mul]⟩
state_before: case intro.intro
R : Type u
S : Type ?u.696957
σ : 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
a✝ : v ∈ ⊤
p' q' : R[X]
hpq' : p' * p + q' * q = 1
⊢ ↑(↑(aeval f) (p * p')) v ∈ LinearMap.range (↑(aeval f) p) ∧
    ∃ z, z ∈ LinearMap.range (↑(aeval f) q) ∧ ↑(↑(aeval f) (p * p')) v + z = v

tactic: use aeval f (q * q') v
state_before: case intro.intro
R : Type u
S : Type ?u.696957
σ : 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
a✝ : v ∈ ⊤
p' q' : R[X]
hpq' : p' * p + q' * q = 1
⊢ ∃ z, z ∈ LinearMap.range (↑(aeval f) q) ∧ ↑(↑(aeval f) (p * p')) v + z = v

tactic: use LinearMap.mem_range.2 ⟨aeval f q' v, by simp only [LinearMap.mul_apply, aeval_mul]⟩
state_before: case intro.intro
R : Type u
S : Type ?u.696957
σ : 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
a✝ : v ∈ ⊤
p' q' : R[X]
hpq' : p' * p + q' * q = 1
⊢ ↑(↑(aeval f) (q * q')) v ∈ LinearMap.range (↑(aeval f) q) ∧ ↑(↑(aeval f) (p * p')) v + ↑(↑(aeval f) (q * q')) v = v

tactic: simpa only [mul_comm p p', mul_comm q q', aeval_one, aeval_add] using
  congr_arg (fun p : R[X] => aeval f p v) hpq'
state_before: case intro.intro
R : Type u
S : Type ?u.696957
σ : 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
a✝ : v ∈ ⊤
p' q' : R[X]
hpq' : p' * p + q' * q = 1
⊢ ↑(↑(aeval f) (p * p')) v + ↑(↑(aeval f) (q * q')) v = v

tactic: simp only [LinearMap.mul_apply, aeval_mul]
state_before: R : Type u
S : Type ?u.696957
σ : 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
a✝ : v ∈ ⊤
p' q' : R[X]
hpq' : p' * p + q' * q = 1
⊢ ↑(↑(aeval f) p) (↑(↑(aeval f) p') v) = ↑(↑(aeval f) (p * p')) v

tactic: simp only [LinearMap.mul_apply, aeval_mul]
state_before: R : Type u
S : Type ?u.696957
σ : 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
a✝ : v ∈ ⊤
p' q' : R[X]
hpq' : p' * p + q' * q = 1
⊢ ↑(↑(aeval f) q) (↑(↑(aeval f) q') v) = ↑(↑(aeval f) (q * q')) v