Theorem: rank_subsingleton
File: Mathlib/LinearAlgebra/Dimension/Basic.lean

tactic: haveI := Module.subsingleton R M
state_before: R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
⊢ Module.rank R M = 1
state_after: R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this : Subsingleton M
⊢ Module.rank R M = 1

tactic: have : Nonempty { s : Set M // LinearIndependent R ((↑) : s → M) } :=
  ⟨⟨∅, linearIndependent_empty _ _⟩⟩
state_before: R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this : Subsingleton M
⊢ Module.rank R M = 1
state_after: R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
⊢ Module.rank R M = 1

tactic: rw [Module.rank_def, ciSup_eq_of_forall_le_of_forall_lt_exists_gt]
state_before: R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
⊢ Module.rank R M = 1
state_after: case h₁
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
⊢ ∀ (i : { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }), #↑↑i ≤ 1

case h₂
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
⊢ ∀ w < 1, ∃ i, w < #↑↑i

tactic: intro w hw
state_before: case h₂
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
⊢ ∀ w < 1, ∃ i, w < #↑↑i
state_after: case h₂
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
w : Cardinal.{v}
hw : w < 1
⊢ ∃ i, w < #↑↑i

tactic: refine ⟨⟨{0}, ?_⟩, ?_⟩
state_before: case h₂
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
w : Cardinal.{v}
hw : w < 1
⊢ ∃ i, w < #↑↑i
state_after: case h₂.refine_1
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
w : Cardinal.{v}
hw : w < 1
⊢ LinearIndependent (ι := { x // x ∈ {0} }) R Subtype.val

case h₂.refine_2
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
w : Cardinal.{v}
hw : w < 1
⊢ w < #↑↑⟨{0}, ?h₂.refine_1⟩

tactic: rintro ⟨s, hs⟩
state_before: case h₁
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
⊢ ∀ (i : { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }), #↑↑i ≤ 1
state_after: case h₁.mk
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
s : Set M
hs : LinearIndependent (ι := { x // x ∈ s }) R Subtype.val
⊢ #↑↑⟨s, hs⟩ ≤ 1

tactic: rw [Cardinal.mk_le_one_iff_set_subsingleton]
state_before: case h₁.mk
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
s : Set M
hs : LinearIndependent (ι := { x // x ∈ s }) R Subtype.val
⊢ #↑↑⟨s, hs⟩ ≤ 1
state_after: case h₁.mk
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
s : Set M
hs : LinearIndependent (ι := { x // x ∈ s }) R Subtype.val
⊢ (↑⟨s, hs⟩).Subsingleton

tactic: apply subsingleton_of_subsingleton
state_before: case h₁.mk
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
s : Set M
hs : LinearIndependent (ι := { x // x ∈ s }) R Subtype.val
⊢ (↑⟨s, hs⟩).Subsingleton
state_after: no goals

tactic: rw [linearIndependent_iff']
state_before: case h₂.refine_1
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
w : Cardinal.{v}
hw : w < 1
⊢ LinearIndependent (ι := { x // x ∈ {0} }) R Subtype.val
state_after: case h₂.refine_1
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
w : Cardinal.{v}
hw : w < 1
⊢ ∀ (s : Finset { x // x ∈ {0} }) (g : { x // x ∈ {0} } → R), ∑ i ∈ s, g i • ↑i = 0 → ∀ i ∈ s, g i = 0

tactic: intros
state_before: case h₂.refine_1
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
w : Cardinal.{v}
hw : w < 1
⊢ ∀ (s : Finset { x // x ∈ {0} }) (g : { x // x ∈ {0} } → R), ∑ i ∈ s, g i • ↑i = 0 → ∀ i ∈ s, g i = 0
state_after: case h₂.refine_1
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
w : Cardinal.{v}
hw : w < 1
s✝ : Finset { x // x ∈ {0} }
g✝ : { x // x ∈ {0} } → R
a✝¹ : ∑ i ∈ s✝, g✝ i • ↑i = 0
i✝ : { x // x ∈ {0} }
a✝ : i✝ ∈ s✝
⊢ g✝ i✝ = 0

tactic: exact Subsingleton.elim _ _
state_before: case h₂.refine_1
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
w : Cardinal.{v}
hw : w < 1
s✝ : Finset { x // x ∈ {0} }
g✝ : { x // x ∈ {0} } → R
a✝¹ : ∑ i ∈ s✝, g✝ i • ↑i = 0
i✝ : { x // x ∈ {0} }
a✝ : i✝ ∈ s✝
⊢ g✝ i✝ = 0
state_after: no goals

tactic: exact hw.trans_eq (Cardinal.mk_singleton _).symm
state_before: case h₂.refine_2
R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝¹⁰ : Ring R
inst✝⁹ : Ring R'
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : Module R' M'
inst✝¹ : Module R' M₁
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent (ι := { x // x ∈ s }) R Subtype.val }
w : Cardinal.{v}
hw : w < 1
⊢ w < #↑↑⟨{0}, ⋯⟩
state_after: no goals