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

tactic: constructor
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1036363
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
⊢ c ≤ Module.rank K V ↔ ∃ s, (#↑s) = c ∧ LinearIndependent K Subtype.val

tactic: intro h
state_before: case mp
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1036363
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
⊢ c ≤ Module.rank K V → ∃ s, (#↑s) = c ∧ LinearIndependent K Subtype.val

tactic: let t := Basis.ofVectorSpace K V
state_before: case mp
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1036363
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
h : c ≤ Module.rank K V
⊢ ∃ s, (#↑s) = c ∧ LinearIndependent K Subtype.val

tactic: rw [← t.mk_eq_rank'', Cardinal.le_mk_iff_exists_subset] at h
state_before: case mp
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1036363
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
h : c ≤ Module.rank K V
t : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
⊢ ∃ s, (#↑s) = c ∧ LinearIndependent K Subtype.val

tactic: rcases h with ⟨s, hst, hsc⟩
state_before: case mp
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1036363
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
h : ∃ p, p ⊆ ofVectorSpaceIndex K V ∧ (#↑p) = c
t : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
⊢ ∃ s, (#↑s) = c ∧ LinearIndependent K Subtype.val

tactic: exact ⟨s, hsc, (ofVectorSpaceIndex.linearIndependent K V).mono hst⟩
state_before: case mp.intro.intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1036363
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
t : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
s : Set V
hst : s ⊆ ofVectorSpaceIndex K V
hsc : (#↑s) = c
⊢ ∃ s, (#↑s) = c ∧ LinearIndependent K Subtype.val

tactic: rintro ⟨s, rfl, si⟩
state_before: case mpr
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1036363
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
⊢ (∃ s, (#↑s) = c ∧ LinearIndependent K Subtype.val) → c ≤ Module.rank K V

tactic: exact cardinal_le_rank_of_linearIndependent si
state_before: case mpr.intro.intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1036363
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Set V
si : LinearIndependent K Subtype.val
⊢ (#↑s) ≤ Module.rank K V