Theorem: LinearPMap.mem_inverse_graph_snd_eq_zero
File: Mathlib/LinearAlgebra/LinearPMap.lean

tactic: simp only [Submodule.mem_map, mem_graph_iff, Subtype.exists, exists_and_left, exists_eq_left,
  LinearEquiv.prodComm_apply, Prod.exists, Prod.swap_prod_mk] at hv
state_before: R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : LinearMap.ker f.toFun = ⊥
x : F × E
hv : x ∈ Submodule.map (LinearEquiv.prodComm R E F) f.graph
hv' : x.1 = 0
⊢ x.2 = 0
state_after: R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : LinearMap.ker f.toFun = ⊥
x : F × E
hv' : x.1 = 0
hv : ∃ a b, (∃ (h : a ∈ f.domain), ↑f ⟨a, ⋯⟩ = b) ∧ (b, a) = x
⊢ x.2 = 0

tactic: rcases hv with ⟨a, b, ⟨ha, h1⟩, ⟨h2, h3⟩⟩
state_before: R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : LinearMap.ker f.toFun = ⊥
x : F × E
hv' : x.1 = 0
hv : ∃ a b, (∃ (h : a ∈ f.domain), ↑f ⟨a, ⋯⟩ = b) ∧ (b, a) = x
⊢ x.2 = 0
state_after: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : LinearMap.ker f.toFun = ⊥
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = b
hv' : (b, a).1 = 0
⊢ (b, a).2 = 0

tactic: simp only at hv' ⊢
state_before: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : LinearMap.ker f.toFun = ⊥
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = b
hv' : (b, a).1 = 0
⊢ (b, a).2 = 0
state_after: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : LinearMap.ker f.toFun = ⊥
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = b
hv' : b = 0
⊢ a = 0

tactic: rw [hv'] at h1
state_before: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : LinearMap.ker f.toFun = ⊥
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = b
hv' : b = 0
⊢ a = 0
state_after: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : LinearMap.ker f.toFun = ⊥
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = 0
hv' : b = 0
⊢ a = 0

tactic: rw [LinearMap.ker_eq_bot'] at hf
state_before: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : LinearMap.ker f.toFun = ⊥
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = 0
hv' : b = 0
⊢ a = 0
state_after: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : ∀ (m : ↥f.domain), f.toFun m = 0 → m = 0
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = 0
hv' : b = 0
⊢ a = 0

tactic: specialize hf ⟨a, ha⟩ h1
state_before: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
hf : ∀ (m : ↥f.domain), f.toFun m = 0 → m = 0
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = 0
hv' : b = 0
⊢ a = 0
state_after: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = 0
hv' : b = 0
hf : ⟨a, ha⟩ = 0
⊢ a = 0

tactic: simp only [Submodule.mk_eq_zero] at hf
state_before: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = 0
hv' : b = 0
hf : ⟨a, ha⟩ = 0
⊢ a = 0
state_after: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = 0
hv' : b = 0
hf : a = 0
⊢ a = 0

tactic: exact hf
state_before: case intro.intro.intro.intro.refl
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f : E →ₗ.[R] F
a : E
b : F
ha : a ∈ f.domain
h1 : ↑f ⟨a, ⋯⟩ = 0
hv' : b = 0
hf : a = 0
⊢ a = 0
state_after: no goals