Theorem: Basis.mk_eq_rank''
File: Mathlib/LinearAlgebra/Dimension.lean

tactic: haveI := nontrivial_of_invariantBasisNumber R
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.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
⊢ (#ι) = Module.rank R M

tactic: rw [Module.rank_def]
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.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ (#ι) = Module.rank R M

tactic: apply le_antisymm
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.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ (#ι) = ⨆ (ι : { s // LinearIndependent R Subtype.val }), #↑↑ι

tactic: trans
state_before: case a
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ (#ι) ≤ ⨆ (ι : { s // LinearIndependent R Subtype.val }), #↑↑ι

tactic: swap
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.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ (#ι) ≤ ?m.380781

K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ ?m.380781 ≤ ⨆ (ι : { s // LinearIndependent R Subtype.val }), #↑↑ι

K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ Cardinal

tactic: apply le_ciSup (Cardinal.bddAbove_range.{v, v} _)
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.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ ?m.380781 ≤ ⨆ (ι : { s // LinearIndependent R Subtype.val }), #↑↑ι

tactic: exact
  ⟨Set.range v, by
    convert v.reindexRange.linearIndependent
    ext
    simp⟩
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.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ { s // LinearIndependent R Subtype.val }

tactic: convert v.reindexRange.linearIndependent
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.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ LinearIndependent R Subtype.val

tactic: ext
state_before: case h.e'_4
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ Subtype.val = ↑(reindexRange v)

tactic: simp
state_before: case h.e'_4.h
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
x✝ : { x // x ∈ range ↑v }
⊢ ↑x✝ = ↑(reindexRange v) x✝

tactic: exact (Cardinal.mk_range_eq v v.injective).ge
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.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ (#ι) ≤ (#↑↑{ val := range ↑v, property := (_ : LinearIndependent R Subtype.val) })

tactic: apply ciSup_le'
state_before: case a
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ (⨆ (ι : { s // LinearIndependent R Subtype.val }), #↑↑ι) ≤ (#ι)

tactic: rintro ⟨s, li⟩
state_before: case a.h
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
⊢ ∀ (i : { s // LinearIndependent R Subtype.val }), (#↑↑i) ≤ (#ι)

tactic: apply linearIndependent_le_basis v _ li
state_before: case a.h.mk
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.378764
R : Type u
inst✝³ : Ring R
inst✝² : StrongRankCondition R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
ι : Type v
v : Basis ι R M
this : Nontrivial R
s : Set M
li : LinearIndependent R Subtype.val
⊢ (#↑↑{ val := s, property := li }) ≤ (#ι)