Theorem: LinearMap.exists_rightInverse_of_surjective
File: Mathlib/LinearAlgebra/Basis.lean

tactic: let C := Basis.ofVectorSpaceIndex K V'
state_before: ι : Type ?u.1199606
ι' : Type ?u.1199609
R : Type ?u.1199612
R₂ : Type ?u.1199615
K : Type u_1
M : Type ?u.1199621
M' : Type ?u.1199624
M'' : Type ?u.1199627
V : Type u
V' : Type u_2
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
f : V →ₗ[K] V'
hf_surj : range f = ⊤
⊢ ∃ g, comp f g = id

tactic: let hC := Basis.ofVectorSpace K V'
state_before: ι : Type ?u.1199606
ι' : Type ?u.1199609
R : Type ?u.1199612
R₂ : Type ?u.1199615
K : Type u_1
M : Type ?u.1199621
M' : Type ?u.1199624
M'' : Type ?u.1199627
V : Type u
V' : Type u_2
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
f : V →ₗ[K] V'
hf_surj : range f = ⊤
C : Set V' := Basis.ofVectorSpaceIndex K V'
⊢ ∃ g, comp f g = id

tactic: haveI : Inhabited V := ⟨0⟩
state_before: ι : Type ?u.1199606
ι' : Type ?u.1199609
R : Type ?u.1199612
R₂ : Type ?u.1199615
K : Type u_1
M : Type ?u.1199621
M' : Type ?u.1199624
M'' : Type ?u.1199627
V : Type u
V' : Type u_2
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
f : V →ₗ[K] V'
hf_surj : range f = ⊤
C : Set V' := Basis.ofVectorSpaceIndex K V'
hC : Basis (↑(Basis.ofVectorSpaceIndex K V')) K V' := Basis.ofVectorSpace K V'
⊢ ∃ g, comp f g = id

tactic: refine' ⟨(hC.constr ℕ : _ → _) (C.restrict (invFun f)), hC.ext fun c => _⟩
state_before: ι : Type ?u.1199606
ι' : Type ?u.1199609
R : Type ?u.1199612
R₂ : Type ?u.1199615
K : Type u_1
M : Type ?u.1199621
M' : Type ?u.1199624
M'' : Type ?u.1199627
V : Type u
V' : Type u_2
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
f : V →ₗ[K] V'
hf_surj : range f = ⊤
C : Set V' := Basis.ofVectorSpaceIndex K V'
hC : Basis (↑(Basis.ofVectorSpaceIndex K V')) K V' := Basis.ofVectorSpace K V'
this : Inhabited V
⊢ ∃ g, comp f g = id

tactic: rw [LinearMap.comp_apply, hC.constr_basis]
state_before: ι : Type ?u.1199606
ι' : Type ?u.1199609
R : Type ?u.1199612
R₂ : Type ?u.1199615
K : Type u_1
M : Type ?u.1199621
M' : Type ?u.1199624
M'' : Type ?u.1199627
V : Type u
V' : Type u_2
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
f : V →ₗ[K] V'
hf_surj : range f = ⊤
C : Set V' := Basis.ofVectorSpaceIndex K V'
hC : Basis (↑(Basis.ofVectorSpaceIndex K V')) K V' := Basis.ofVectorSpace K V'
this : Inhabited V
c : ↑(Basis.ofVectorSpaceIndex K V')
⊢ ↑(comp f (↑(Basis.constr hC ℕ) (Set.restrict C (invFun ↑f)))) (↑hC c) = ↑id (↑hC c)

tactic: simp [rightInverse_invFun (LinearMap.range_eq_top.1 hf_surj) c]
state_before: ι : Type ?u.1199606
ι' : Type ?u.1199609
R : Type ?u.1199612
R₂ : Type ?u.1199615
K : Type u_1
M : Type ?u.1199621
M' : Type ?u.1199624
M'' : Type ?u.1199627
V : Type u
V' : Type u_2
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
f : V →ₗ[K] V'
hf_surj : range f = ⊤
C : Set V' := Basis.ofVectorSpaceIndex K V'
hC : Basis (↑(Basis.ofVectorSpaceIndex K V')) K V' := Basis.ofVectorSpace K V'
this : Inhabited V
c : ↑(Basis.ofVectorSpaceIndex K V')
⊢ ↑f (Set.restrict C (invFun ↑f) c) = ↑id (↑hC c)