Theorem: LinearIndependent.map_of_surjective_injective
File: Mathlib/LinearAlgebra/LinearIndependent.lean

tactic: obtain ⟨i', hi'⟩ := hi.hasRightInverse
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M'✝ : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M'✝
inst✝⁶ : AddCommMonoid M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'✝
inst✝³ : Module R M''
a b : R
x y : M
R' : Type u_8
M' : Type u_9
inst✝² : Semiring R'
inst✝¹ : AddCommMonoid M'
inst✝ : Module R' M'
hv : LinearIndependent R v
i : ZeroHom R R'
j : M →+ M'
hi : Surjective ⇑i
hj : ∀ (m : M), j m = 0 → m = 0
hc : ∀ (r : R) (m : M), j (r • m) = i r • j m
⊢ LinearIndependent R' (⇑j ∘ v)
state_after: case intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M'✝ : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M'✝
inst✝⁶ : AddCommMonoid M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'✝
inst✝³ : Module R M''
a b : R
x y : M
R' : Type u_8
M' : Type u_9
inst✝² : Semiring R'
inst✝¹ : AddCommMonoid M'
inst✝ : Module R' M'
hv : LinearIndependent R v
i : ZeroHom R R'
j : M →+ M'
hi : Surjective ⇑i
hj : ∀ (m : M), j m = 0 → m = 0
hc : ∀ (r : R) (m : M), j (r • m) = i r • j m
i' : R' → R
hi' : Function.RightInverse i' ⇑i
⊢ LinearIndependent R' (⇑j ∘ v)

tactic: refine hv.map_of_injective_injective i' j (fun _ h ↦ ?_) hj fun r m ↦ ?_
state_before: case intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M'✝ : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M'✝
inst✝⁶ : AddCommMonoid M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'✝
inst✝³ : Module R M''
a b : R
x y : M
R' : Type u_8
M' : Type u_9
inst✝² : Semiring R'
inst✝¹ : AddCommMonoid M'
inst✝ : Module R' M'
hv : LinearIndependent R v
i : ZeroHom R R'
j : M →+ M'
hi : Surjective ⇑i
hj : ∀ (m : M), j m = 0 → m = 0
hc : ∀ (r : R) (m : M), j (r • m) = i r • j m
i' : R' → R
hi' : Function.RightInverse i' ⇑i
⊢ LinearIndependent R' (⇑j ∘ v)
state_after: case intro.refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M'✝ : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M'✝
inst✝⁶ : AddCommMonoid M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'✝
inst✝³ : Module R M''
a b : R
x y : M
R' : Type u_8
M' : Type u_9
inst✝² : Semiring R'
inst✝¹ : AddCommMonoid M'
inst✝ : Module R' M'
hv : LinearIndependent R v
i : ZeroHom R R'
j : M →+ M'
hi : Surjective ⇑i
hj : ∀ (m : M), j m = 0 → m = 0
hc : ∀ (r : R) (m : M), j (r • m) = i r • j m
i' : R' → R
hi' : Function.RightInverse i' ⇑i
x✝ : R'
h : i' x✝ = 0
⊢ x✝ = 0

case intro.refine_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M'✝ : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M'✝
inst✝⁶ : AddCommMonoid M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'✝
inst✝³ : Module R M''
a b : R
x y : M
R' : Type u_8
M' : Type u_9
inst✝² : Semiring R'
inst✝¹ : AddCommMonoid M'
inst✝ : Module R' M'
hv : LinearIndependent R v
i : ZeroHom R R'
j : M →+ M'
hi : Surjective ⇑i
hj : ∀ (m : M), j m = 0 → m = 0
hc : ∀ (r : R) (m : M), j (r • m) = i r • j m
i' : R' → R
hi' : Function.RightInverse i' ⇑i
r : R'
m : M
⊢ j (i' r • m) = r • j m

tactic: rw [hc (i' r) m, hi']
state_before: case intro.refine_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M'✝ : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M'✝
inst✝⁶ : AddCommMonoid M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'✝
inst✝³ : Module R M''
a b : R
x y : M
R' : Type u_8
M' : Type u_9
inst✝² : Semiring R'
inst✝¹ : AddCommMonoid M'
inst✝ : Module R' M'
hv : LinearIndependent R v
i : ZeroHom R R'
j : M →+ M'
hi : Surjective ⇑i
hj : ∀ (m : M), j m = 0 → m = 0
hc : ∀ (r : R) (m : M), j (r • m) = i r • j m
i' : R' → R
hi' : Function.RightInverse i' ⇑i
r : R'
m : M
⊢ j (i' r • m) = r • j m
state_after: no goals

tactic: apply_fun i at h
state_before: case intro.refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M'✝ : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M'✝
inst✝⁶ : AddCommMonoid M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'✝
inst✝³ : Module R M''
a b : R
x y : M
R' : Type u_8
M' : Type u_9
inst✝² : Semiring R'
inst✝¹ : AddCommMonoid M'
inst✝ : Module R' M'
hv : LinearIndependent R v
i : ZeroHom R R'
j : M →+ M'
hi : Surjective ⇑i
hj : ∀ (m : M), j m = 0 → m = 0
hc : ∀ (r : R) (m : M), j (r • m) = i r • j m
i' : R' → R
hi' : Function.RightInverse i' ⇑i
x✝ : R'
h : i' x✝ = 0
⊢ x✝ = 0
state_after: case intro.refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M'✝ : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M'✝
inst✝⁶ : AddCommMonoid M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'✝
inst✝³ : Module R M''
a b : R
x y : M
R' : Type u_8
M' : Type u_9
inst✝² : Semiring R'
inst✝¹ : AddCommMonoid M'
inst✝ : Module R' M'
hv : LinearIndependent R v
i : ZeroHom R R'
j : M →+ M'
hi : Surjective ⇑i
hj : ∀ (m : M), j m = 0 → m = 0
hc : ∀ (r : R) (m : M), j (r • m) = i r • j m
i' : R' → R
hi' : Function.RightInverse i' ⇑i
x✝ : R'
h : i (i' x✝) = i 0
⊢ x✝ = 0

tactic: rwa [hi', i.map_zero] at h
state_before: case intro.refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M'✝ : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M'✝
inst✝⁶ : AddCommMonoid M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'✝
inst✝³ : Module R M''
a b : R
x y : M
R' : Type u_8
M' : Type u_9
inst✝² : Semiring R'
inst✝¹ : AddCommMonoid M'
inst✝ : Module R' M'
hv : LinearIndependent R v
i : ZeroHom R R'
j : M →+ M'
hi : Surjective ⇑i
hj : ∀ (m : M), j m = 0 → m = 0
hc : ∀ (r : R) (m : M), j (r • m) = i r • j m
i' : R' → R
hi' : Function.RightInverse i' ⇑i
x✝ : R'
h : i (i' x✝) = i 0
⊢ x✝ = 0
state_after: no goals