Theorem: LinearMap.ker_coprod_of_disjoint_range
File: Mathlib/LinearAlgebra/Prod.lean

tactic: apply le_antisymm _ (ker_prod_ker_le_ker_coprod f g)
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂✝ : Type w
V₂ : Type w'
M₃✝ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.249709
M₆ : Type ?u.249712
inst✝¹² : Semiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂✝
inst✝⁹ : AddCommMonoid M₃✝
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : Module R M
inst✝⁶ : Module R M₂✝
inst✝⁵ : Module R M₃✝
inst✝⁴ : Module R M₄
M₂ : Type u_1
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
M₃ : Type u_2
inst✝¹ : AddCommGroup M₃
inst✝ : Module R M₃
f : M →ₗ[R] M₃
g : M₂ →ₗ[R] M₃
hd : Disjoint (range f) (range g)
⊢ ker (coprod f g) = Submodule.prod (ker f) (ker g)

tactic: rintro ⟨y, z⟩ h
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂✝ : Type w
V₂ : Type w'
M₃✝ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.249709
M₆ : Type ?u.249712
inst✝¹² : Semiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂✝
inst✝⁹ : AddCommMonoid M₃✝
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : Module R M
inst✝⁶ : Module R M₂✝
inst✝⁵ : Module R M₃✝
inst✝⁴ : Module R M₄
M₂ : Type u_1
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
M₃ : Type u_2
inst✝¹ : AddCommGroup M₃
inst✝ : Module R M₃
f : M →ₗ[R] M₃
g : M₂ →ₗ[R] M₃
hd : Disjoint (range f) (range g)
⊢ ker (coprod f g) ≤ Submodule.prod (ker f) (ker g)

tactic: simp only [mem_ker, mem_prod, coprod_apply] at h⊢
state_before: case mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂✝ : Type w
V₂ : Type w'
M₃✝ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.249709
M₆ : Type ?u.249712
inst✝¹² : Semiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂✝
inst✝⁹ : AddCommMonoid M₃✝
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : Module R M
inst✝⁶ : Module R M₂✝
inst✝⁵ : Module R M₃✝
inst✝⁴ : Module R M₄
M₂ : Type u_1
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
M₃ : Type u_2
inst✝¹ : AddCommGroup M₃
inst✝ : Module R M₃
f : M →ₗ[R] M₃
g : M₂ →ₗ[R] M₃
hd : Disjoint (range f) (range g)
y : M
z : M₂
h : (y, z) ∈ ker (coprod f g)
⊢ (y, z) ∈ Submodule.prod (ker f) (ker g)

tactic: have : f y ∈ (range f) ⊓ (range g) := by
  simp only [true_and_iff, mem_range, mem_inf, exists_apply_eq_apply]
  use -z
  rwa [eq_comm, map_neg, ← sub_eq_zero, sub_neg_eq_add]
state_before: case mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂✝ : Type w
V₂ : Type w'
M₃✝ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.249709
M₆ : Type ?u.249712
inst✝¹² : Semiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂✝
inst✝⁹ : AddCommMonoid M₃✝
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : Module R M
inst✝⁶ : Module R M₂✝
inst✝⁵ : Module R M₃✝
inst✝⁴ : Module R M₄
M₂ : Type u_1
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
M₃ : Type u_2
inst✝¹ : AddCommGroup M₃
inst✝ : Module R M₃
f : M →ₗ[R] M₃
g : M₂ →ₗ[R] M₃
hd : Disjoint (range f) (range g)
y : M
z : M₂
h : ↑f y + ↑g z = 0
⊢ ↑f y = 0 ∧ ↑g z = 0

tactic: rw [hd.eq_bot, mem_bot] at this
state_before: case mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂✝ : Type w
V₂ : Type w'
M₃✝ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.249709
M₆ : Type ?u.249712
inst✝¹² : Semiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂✝
inst✝⁹ : AddCommMonoid M₃✝
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : Module R M
inst✝⁶ : Module R M₂✝
inst✝⁵ : Module R M₃✝
inst✝⁴ : Module R M₄
M₂ : Type u_1
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
M₃ : Type u_2
inst✝¹ : AddCommGroup M₃
inst✝ : Module R M₃
f : M →ₗ[R] M₃
g : M₂ →ₗ[R] M₃
hd : Disjoint (range f) (range g)
y : M
z : M₂
h : ↑f y + ↑g z = 0
this : ↑f y ∈ range f ⊓ range g
⊢ ↑f y = 0 ∧ ↑g z = 0

tactic: rw [this] at h
state_before: case mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂✝ : Type w
V₂ : Type w'
M₃✝ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.249709
M₆ : Type ?u.249712
inst✝¹² : Semiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂✝
inst✝⁹ : AddCommMonoid M₃✝
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : Module R M
inst✝⁶ : Module R M₂✝
inst✝⁵ : Module R M₃✝
inst✝⁴ : Module R M₄
M₂ : Type u_1
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
M₃ : Type u_2
inst✝¹ : AddCommGroup M₃
inst✝ : Module R M₃
f : M →ₗ[R] M₃
g : M₂ →ₗ[R] M₃
hd : Disjoint (range f) (range g)
y : M
z : M₂
h : ↑f y + ↑g z = 0
this : ↑f y = 0
⊢ ↑f y = 0 ∧ ↑g z = 0

tactic: simpa [this] using h
state_before: case mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂✝ : Type w
V₂ : Type w'
M₃✝ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.249709
M₆ : Type ?u.249712
inst✝¹² : Semiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂✝
inst✝⁹ : AddCommMonoid M₃✝
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : Module R M
inst✝⁶ : Module R M₂✝
inst✝⁵ : Module R M₃✝
inst✝⁴ : Module R M₄
M₂ : Type u_1
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
M₃ : Type u_2
inst✝¹ : AddCommGroup M₃
inst✝ : Module R M₃
f : M →ₗ[R] M₃
g : M₂ →ₗ[R] M₃
hd : Disjoint (range f) (range g)
y : M
z : M₂
h : 0 + ↑g z = 0
this : ↑f y = 0
⊢ ↑f y = 0 ∧ ↑g z = 0

tactic: simp only [true_and_iff, mem_range, mem_inf, exists_apply_eq_apply]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂✝ : Type w
V₂ : Type w'
M₃✝ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.249709
M₆ : Type ?u.249712
inst✝¹² : Semiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂✝
inst✝⁹ : AddCommMonoid M₃✝
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : Module R M
inst✝⁶ : Module R M₂✝
inst✝⁵ : Module R M₃✝
inst✝⁴ : Module R M₄
M₂ : Type u_1
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
M₃ : Type u_2
inst✝¹ : AddCommGroup M₃
inst✝ : Module R M₃
f : M →ₗ[R] M₃
g : M₂ →ₗ[R] M₃
hd : Disjoint (range f) (range g)
y : M
z : M₂
h : ↑f y + ↑g z = 0
⊢ ↑f y ∈ range f ⊓ range g

tactic: use -z
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂✝ : Type w
V₂ : Type w'
M₃✝ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.249709
M₆ : Type ?u.249712
inst✝¹² : Semiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂✝
inst✝⁹ : AddCommMonoid M₃✝
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : Module R M
inst✝⁶ : Module R M₂✝
inst✝⁵ : Module R M₃✝
inst✝⁴ : Module R M₄
M₂ : Type u_1
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
M₃ : Type u_2
inst✝¹ : AddCommGroup M₃
inst✝ : Module R M₃
f : M →ₗ[R] M₃
g : M₂ →ₗ[R] M₃
hd : Disjoint (range f) (range g)
y : M
z : M₂
h : ↑f y + ↑g z = 0
⊢ ∃ y_1, ↑g y_1 = ↑f y

tactic: rwa [eq_comm, map_neg, ← sub_eq_zero, sub_neg_eq_add]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂✝ : Type w
V₂ : Type w'
M₃✝ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.249709
M₆ : Type ?u.249712
inst✝¹² : Semiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂✝
inst✝⁹ : AddCommMonoid M₃✝
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : Module R M
inst✝⁶ : Module R M₂✝
inst✝⁵ : Module R M₃✝
inst✝⁴ : Module R M₄
M₂ : Type u_1
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
M₃ : Type u_2
inst✝¹ : AddCommGroup M₃
inst✝ : Module R M₃
f : M →ₗ[R] M₃
g : M₂ →ₗ[R] M₃
hd : Disjoint (range f) (range g)
y : M
z : M₂
h : ↑f y + ↑g z = 0
⊢ ↑g (-z) = ↑f y