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

tactic: haveI := Module.subsingleton R M
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.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
⊢ Module.rank R M = 1

tactic: have : Nonempty { s : Set M // LinearIndependent R ((↑) : s → M) } :=
  ⟨⟨∅, linearIndependent_empty _ _⟩⟩
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.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this : Subsingleton M
⊢ Module.rank R M = 1

tactic: rw [Module.rank_def, ciSup_eq_of_forall_le_of_forall_lt_exists_gt]
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.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent R Subtype.val }
⊢ Module.rank R M = 1

tactic: intro w hw
state_before: case 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.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent R Subtype.val }
⊢ ∀ (w : Cardinal), w < 1 → ∃ i, w < (#↑↑i)

tactic: refine' ⟨⟨{0}, _⟩, _⟩
state_before: case 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.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent R Subtype.val }
w : Cardinal
hw : w < 1
⊢ ∃ i, w < (#↑↑i)

tactic: rintro ⟨s, hs⟩
state_before: case 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.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent R Subtype.val }
⊢ ∀ (i : { s // LinearIndependent R Subtype.val }), (#↑↑i) ≤ 1

tactic: rw [Cardinal.mk_le_one_iff_set_subsingleton]
state_before: case 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.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent R Subtype.val }
s : Set M
hs : LinearIndependent R Subtype.val
⊢ (#↑↑{ val := s, property := hs }) ≤ 1

tactic: apply subsingleton_of_subsingleton
state_before: case 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.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent R Subtype.val }
s : Set M
hs : LinearIndependent R Subtype.val
⊢ Set.Subsingleton ↑{ val := s, property := hs }

tactic: rw [linearIndependent_iff']
state_before: case h₂.refine'_1
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent R Subtype.val }
w : Cardinal
hw : w < 1
⊢ LinearIndependent R Subtype.val

tactic: intros
state_before: case h₂.refine'_1
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent R Subtype.val }
w : Cardinal
hw : w < 1
⊢ ∀ (s : Finset { x // x ∈ {0} }) (g : { x // x ∈ {0} } → R),
    ∑ i in s, g i • ↑i = 0 → ∀ (i : { x // x ∈ {0} }), i ∈ s → g i = 0

tactic: exact Subsingleton.elim _ _
state_before: case h₂.refine'_1
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent R Subtype.val }
w : Cardinal
hw : w < 1
s✝ : Finset { x // x ∈ {0} }
g✝ : { x // x ∈ {0} } → R
a✝¹ : ∑ i in s✝, g✝ i • ↑i = 0
i✝ : { x // x ∈ {0} }
a✝ : i✝ ∈ s✝
⊢ g✝ i✝ = 0

tactic: exact hw.trans_eq (Cardinal.mk_singleton _).symm
state_before: case h₂.refine'_2
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.228981
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Subsingleton R
this✝ : Subsingleton M
this : Nonempty { s // LinearIndependent R Subtype.val }
w : Cardinal
hw : w < 1
⊢ w < (#↑↑{ val := {0}, property := (_ : LinearIndependent R Subtype.val) })