Theorem: LinearMap.le_rank_iff_exists_linearIndependent
File: Mathlib/LinearAlgebra/Dimension/LinearMap.lean

tactic: rcases f.rangeRestrict.exists_rightInverse_of_surjective f.range_rangeRestrict with ⟨g, hg⟩
state_before: K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
⊢ c ≤ f.rank ↔ ∃ s, lift.{v', v} #↑s = lift.{v, v'} c ∧ LinearIndependent K fun (x : ↑s) => f ↑x
state_after: case intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
⊢ c ≤ f.rank ↔ ∃ s, lift.{v', v} #↑s = lift.{v, v'} c ∧ LinearIndependent K fun (x : ↑s) => f ↑x

tactic: have fg : LeftInverse f.rangeRestrict g := LinearMap.congr_fun hg
state_before: case intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
⊢ c ≤ f.rank ↔ ∃ s, lift.{v', v} #↑s = lift.{v, v'} c ∧ LinearIndependent K fun (x : ↑s) => f ↑x
state_after: case intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
⊢ c ≤ f.rank ↔ ∃ s, lift.{v', v} #↑s = lift.{v, v'} c ∧ LinearIndependent K fun (x : ↑s) => f ↑x

tactic: refine ⟨fun h => ?_, ?_⟩
state_before: case intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
⊢ c ≤ f.rank ↔ ∃ s, lift.{v', v} #↑s = lift.{v, v'} c ∧ LinearIndependent K fun (x : ↑s) => f ↑x
state_after: case intro.refine_1
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
h : c ≤ f.rank
⊢ ∃ s, lift.{v', v} #↑s = lift.{v, v'} c ∧ LinearIndependent K fun (x : ↑s) => f ↑x

case intro.refine_2
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
⊢ (∃ s, lift.{v', v} #↑s = lift.{v, v'} c ∧ LinearIndependent K fun (x : ↑s) => f ↑x) → c ≤ f.rank

tactic: rcases _root_.le_rank_iff_exists_linearIndependent.1 h with ⟨s, rfl, si⟩
state_before: case intro.refine_1
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
h : c ≤ f.rank
⊢ ∃ s, lift.{v', v} #↑s = lift.{v, v'} c ∧ LinearIndependent K fun (x : ↑s) => f ↑x
state_after: case intro.refine_1.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set ↥(range f)
si : LinearIndependent (ι := { x // x ∈ s }) K Subtype.val
h : #↑s ≤ f.rank
⊢ ∃ s_1, lift.{v', v} #↑s_1 = lift.{v, v'} #↑s ∧ LinearIndependent K fun (x : ↑s_1) => f ↑x

tactic: refine ⟨g '' s, Cardinal.mk_image_eq_lift _ _ fg.injective, ?_⟩
state_before: case intro.refine_1.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set ↥(range f)
si : LinearIndependent (ι := { x // x ∈ s }) K Subtype.val
h : #↑s ≤ f.rank
⊢ ∃ s_1, lift.{v', v} #↑s_1 = lift.{v, v'} #↑s ∧ LinearIndependent K fun (x : ↑s_1) => f ↑x
state_after: case intro.refine_1.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set ↥(range f)
si : LinearIndependent (ι := { x // x ∈ s }) K Subtype.val
h : #↑s ≤ f.rank
⊢ LinearIndependent K fun (x : ↑(⇑g '' s)) => f ↑x

tactic: replace fg : ∀ x, f (g x) = x := by
  intro x
  convert congr_arg Subtype.val (fg x)
state_before: case intro.refine_1.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set ↥(range f)
si : LinearIndependent (ι := { x // x ∈ s }) K Subtype.val
h : #↑s ≤ f.rank
⊢ LinearIndependent K fun (x : ↑(⇑g '' s)) => f ↑x
state_after: case intro.refine_1.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
s : Set ↥(range f)
si : LinearIndependent (ι := { x // x ∈ s }) K Subtype.val
h : #↑s ≤ f.rank
fg : ∀ (x : ↥(range f)), f (g x) = ↑x
⊢ LinearIndependent K fun (x : ↑(⇑g '' s)) => f ↑x

tactic: replace si : LinearIndependent K fun x : s => f (g x) := by
  simpa only [fg] using si.map' _ (ker_subtype _)
state_before: case intro.refine_1.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
s : Set ↥(range f)
si : LinearIndependent (ι := { x // x ∈ s }) K Subtype.val
h : #↑s ≤ f.rank
fg : ∀ (x : ↥(range f)), f (g x) = ↑x
⊢ LinearIndependent K fun (x : ↑(⇑g '' s)) => f ↑x
state_after: case intro.refine_1.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
s : Set ↥(range f)
h : #↑s ≤ f.rank
fg : ∀ (x : ↥(range f)), f (g x) = ↑x
si : LinearIndependent K fun (x : ↑s) => f (g ↑x)
⊢ LinearIndependent K fun (x : ↑(⇑g '' s)) => f ↑x

tactic: exact si.image_of_comp s g f
state_before: case intro.refine_1.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
s : Set ↥(range f)
h : #↑s ≤ f.rank
fg : ∀ (x : ↥(range f)), f (g x) = ↑x
si : LinearIndependent K fun (x : ↑s) => f (g ↑x)
⊢ LinearIndependent K fun (x : ↑(⇑g '' s)) => f ↑x
state_after: no goals

tactic: intro x
state_before: K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set ↥(range f)
si : LinearIndependent (ι := { x // x ∈ s }) K Subtype.val
h : #↑s ≤ f.rank
⊢ ∀ (x : ↥(range f)), f (g x) = ↑x
state_after: K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set ↥(range f)
si : LinearIndependent (ι := { x // x ∈ s }) K Subtype.val
h : #↑s ≤ f.rank
x : ↥(range f)
⊢ f (g x) = ↑x

tactic: convert congr_arg Subtype.val (fg x)
state_before: K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set ↥(range f)
si : LinearIndependent (ι := { x // x ∈ s }) K Subtype.val
h : #↑s ≤ f.rank
x : ↥(range f)
⊢ f (g x) = ↑x
state_after: no goals

tactic: simpa only [fg] using si.map' _ (ker_subtype _)
state_before: K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
s : Set ↥(range f)
si : LinearIndependent (ι := { x // x ∈ s }) K Subtype.val
h : #↑s ≤ f.rank
fg : ∀ (x : ↥(range f)), f (g x) = ↑x
⊢ LinearIndependent K fun (x : ↑s) => f (g ↑x)
state_after: no goals

tactic: rintro ⟨s, hsc, si⟩
state_before: case intro.refine_2
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
⊢ (∃ s, lift.{v', v} #↑s = lift.{v, v'} c ∧ LinearIndependent K fun (x : ↑s) => f ↑x) → c ≤ f.rank
state_after: case intro.refine_2.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set V
hsc : lift.{v', v} #↑s = lift.{v, v'} c
si : LinearIndependent K fun (x : ↑s) => f ↑x
⊢ c ≤ f.rank

tactic: have : LinearIndependent K fun x : s => f.rangeRestrict x :=
  LinearIndependent.of_comp f.range.subtype (by convert si)
state_before: case intro.refine_2.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set V
hsc : lift.{v', v} #↑s = lift.{v, v'} c
si : LinearIndependent K fun (x : ↑s) => f ↑x
⊢ c ≤ f.rank
state_after: case intro.refine_2.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set V
hsc : lift.{v', v} #↑s = lift.{v, v'} c
si : LinearIndependent K fun (x : ↑s) => f ↑x
this : LinearIndependent K fun (x : ↑s) => f.rangeRestrict ↑x
⊢ c ≤ f.rank

tactic: convert this.image.cardinal_le_rank
state_before: case intro.refine_2.intro.intro
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set V
hsc : lift.{v', v} #↑s = lift.{v, v'} c
si : LinearIndependent K fun (x : ↑s) => f ↑x
this : LinearIndependent K fun (x : ↑s) => f.rangeRestrict ↑x
⊢ c ≤ f.rank
state_after: case h.e'_3
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set V
hsc : lift.{v', v} #↑s = lift.{v, v'} c
si : LinearIndependent K fun (x : ↑s) => f ↑x
this : LinearIndependent K fun (x : ↑s) => f.rangeRestrict ↑x
⊢ c = #↑(⇑f.rangeRestrict '' s)

tactic: rw [← Cardinal.lift_inj, ← hsc, Cardinal.mk_image_eq_of_injOn_lift]
state_before: case h.e'_3
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set V
hsc : lift.{v', v} #↑s = lift.{v, v'} c
si : LinearIndependent K fun (x : ↑s) => f ↑x
this : LinearIndependent K fun (x : ↑s) => f.rangeRestrict ↑x
⊢ c = #↑(⇑f.rangeRestrict '' s)
state_after: case h.e'_3.h
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set V
hsc : lift.{v', v} #↑s = lift.{v, v'} c
si : LinearIndependent K fun (x : ↑s) => f ↑x
this : LinearIndependent K fun (x : ↑s) => f.rangeRestrict ↑x
⊢ InjOn (⇑f.rangeRestrict) s

tactic: exact injOn_iff_injective.2 this.injective
state_before: case h.e'_3.h
K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set V
hsc : lift.{v', v} #↑s = lift.{v, v'} c
si : LinearIndependent K fun (x : ↑s) => f ↑x
this : LinearIndependent K fun (x : ↑s) => f.rangeRestrict ↑x
⊢ InjOn (⇑f.rangeRestrict) s
state_after: no goals

tactic: convert si
state_before: K : Type u
V V₁ : Type v
V' V'₁ : Type v'
V'' : Type v''
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
c : Cardinal.{v'}
f : V →ₗ[K] V'
g : ↥(range f) →ₗ[K] V
hg : f.rangeRestrict ∘ₗ g = id
fg : LeftInverse ⇑f.rangeRestrict ⇑g
s : Set V
hsc : lift.{v', v} #↑s = lift.{v, v'} c
si : LinearIndependent K fun (x : ↑s) => f ↑x
⊢ LinearIndependent (ι := ↑s) K (⇑(range f).subtype ∘ fun x => f.rangeRestrict ↑x)
state_after: no goals