Theorem: LinearMap.funLeft_injective_of_surjective
File: Mathlib/LinearAlgebra/Basic.lean

tactic: obtain ⟨g, hg⟩ := hf.hasRightInverse
state_before: R : Type u_4
R₁ : Type ?u.2323244
R₂ : Type ?u.2323247
R₃ : Type ?u.2323250
R₄ : Type ?u.2323253
S : Type ?u.2323256
K : Type ?u.2323259
K₂ : Type ?u.2323262
M : Type u_3
M' : Type ?u.2323268
M₁ : Type ?u.2323271
M₂ : Type ?u.2323274
M₃ : Type ?u.2323277
M₄ : Type ?u.2323280
N : Type ?u.2323283
N₂ : Type ?u.2323286
ι : Type ?u.2323289
V : Type ?u.2323292
V₂ : Type ?u.2323295
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_1
n : Type u_2
p : Type ?u.2323336
f : m → n
hf : Surjective f
⊢ Injective ↑(funLeft R M f)

tactic: suffices LeftInverse (funLeft R M g) (funLeft R M f) by exact this.injective
state_before: case intro
R : Type u_4
R₁ : Type ?u.2323244
R₂ : Type ?u.2323247
R₃ : Type ?u.2323250
R₄ : Type ?u.2323253
S : Type ?u.2323256
K : Type ?u.2323259
K₂ : Type ?u.2323262
M : Type u_3
M' : Type ?u.2323268
M₁ : Type ?u.2323271
M₂ : Type ?u.2323274
M₃ : Type ?u.2323277
M₄ : Type ?u.2323280
N : Type ?u.2323283
N₂ : Type ?u.2323286
ι : Type ?u.2323289
V : Type ?u.2323292
V₂ : Type ?u.2323295
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_1
n : Type u_2
p : Type ?u.2323336
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
⊢ Injective ↑(funLeft R M f)

tactic: intro x
state_before: case intro
R : Type u_4
R₁ : Type ?u.2323244
R₂ : Type ?u.2323247
R₃ : Type ?u.2323250
R₄ : Type ?u.2323253
S : Type ?u.2323256
K : Type ?u.2323259
K₂ : Type ?u.2323262
M : Type u_3
M' : Type ?u.2323268
M₁ : Type ?u.2323271
M₂ : Type ?u.2323274
M₃ : Type ?u.2323277
M₄ : Type ?u.2323280
N : Type ?u.2323283
N₂ : Type ?u.2323286
ι : Type ?u.2323289
V : Type ?u.2323292
V₂ : Type ?u.2323295
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_1
n : Type u_2
p : Type ?u.2323336
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
⊢ LeftInverse ↑(funLeft R M g) ↑(funLeft R M f)

tactic: rw [← LinearMap.comp_apply, ← funLeft_comp, hg.id, funLeft_id]
state_before: case intro
R : Type u_4
R₁ : Type ?u.2323244
R₂ : Type ?u.2323247
R₃ : Type ?u.2323250
R₄ : Type ?u.2323253
S : Type ?u.2323256
K : Type ?u.2323259
K₂ : Type ?u.2323262
M : Type u_3
M' : Type ?u.2323268
M₁ : Type ?u.2323271
M₂ : Type ?u.2323274
M₃ : Type ?u.2323277
M₄ : Type ?u.2323280
N : Type ?u.2323283
N₂ : Type ?u.2323286
ι : Type ?u.2323289
V : Type ?u.2323292
V₂ : Type ?u.2323295
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_1
n : Type u_2
p : Type ?u.2323336
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
x : n → M
⊢ ↑(funLeft R M g) (↑(funLeft R M f) x) = x

tactic: exact this.injective
state_before: R : Type u_4
R₁ : Type ?u.2323244
R₂ : Type ?u.2323247
R₃ : Type ?u.2323250
R₄ : Type ?u.2323253
S : Type ?u.2323256
K : Type ?u.2323259
K₂ : Type ?u.2323262
M : Type u_3
M' : Type ?u.2323268
M₁ : Type ?u.2323271
M₂ : Type ?u.2323274
M₃ : Type ?u.2323277
M₄ : Type ?u.2323280
N : Type ?u.2323283
N₂ : Type ?u.2323286
ι : Type ?u.2323289
V : Type ?u.2323292
V₂ : Type ?u.2323295
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_1
n : Type u_2
p : Type ?u.2323336
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
this : LeftInverse ↑(funLeft R M g) ↑(funLeft R M f)
⊢ Injective ↑(funLeft R M f)