Theorem: LinearMap.funLeft_injective_of_surjective
File: Mathlib/Algebra/Module/Equiv/Basic.lean

Proof steps:
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Surjective f
⊢ Injective ⇑(funLeft R M f)
state_after: case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
⊢ Injective ⇑(funLeft R M f)
tactic: obtain ⟨g, hg⟩ := hf.hasRightInverse
state_before: case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
⊢ Injective ⇑(funLeft R M f)
state_after: case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
⊢ LeftInverse ⇑(funLeft R M g) ⇑(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_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Surjective f
g : n → m
hg : Function.RightInverse g f
⊢ LeftInverse ⇑(funLeft R M g) ⇑(funLeft R M f)
state_after: case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
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: intro x
state_before: case intro
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
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
state_after: no goals
tactic: rw [← LinearMap.comp_apply, ← funLeft_comp, hg.id, funLeft_id]