Theorem: finrank_le_one
File: Mathlib/LinearAlgebra/Dimension/Finite.lean

tactic: haveI := nontrivial_of_invariantBasisNumber R
state_before: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
v : M
h : ∀ (w : M), ∃ c, c • v = w
⊢ finrank R M ≤ 1
state_after: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
v : M
h : ∀ (w : M), ∃ c, c • v = w
this : Nontrivial R
⊢ finrank R M ≤ 1

tactic: rcases eq_or_ne v 0 with (rfl | hn)
state_before: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
v : M
h : ∀ (w : M), ∃ c, c • v = w
this : Nontrivial R
⊢ finrank R M ≤ 1
state_after: case inl
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
this : Nontrivial R
h : ∀ (w : M), ∃ c, c • 0 = w
⊢ finrank R M ≤ 1

case inr
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
v : M
h : ∀ (w : M), ∃ c, c • v = w
this : Nontrivial R
hn : v ≠ 0
⊢ finrank R M ≤ 1

tactic: haveI :=
  _root_.subsingleton_of_forall_eq (0 : M) fun w => by
    obtain ⟨c, rfl⟩ := h w
    simp
state_before: case inl
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
this : Nontrivial R
h : ∀ (w : M), ∃ c, c • 0 = w
⊢ finrank R M ≤ 1
state_after: case inl
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
this✝ : Nontrivial R
h : ∀ (w : M), ∃ c, c • 0 = w
this : Subsingleton M
⊢ finrank R M ≤ 1

tactic: rw [finrank_zero_of_subsingleton]
state_before: case inl
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
this✝ : Nontrivial R
h : ∀ (w : M), ∃ c, c • 0 = w
this : Subsingleton M
⊢ finrank R M ≤ 1
state_after: case inl
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
this✝ : Nontrivial R
h : ∀ (w : M), ∃ c, c • 0 = w
this : Subsingleton M
⊢ 0 ≤ 1

tactic: exact zero_le_one
state_before: case inl
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
this✝ : Nontrivial R
h : ∀ (w : M), ∃ c, c • 0 = w
this : Subsingleton M
⊢ 0 ≤ 1
state_after: no goals

tactic: obtain ⟨c, rfl⟩ := h w
state_before: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
this : Nontrivial R
h : ∀ (w : M), ∃ c, c • 0 = w
w : M
⊢ w = 0
state_after: case intro
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
this : Nontrivial R
h : ∀ (w : M), ∃ c, c • 0 = w
c : R
⊢ c • 0 = 0

tactic: simp
state_before: case intro
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
this : Nontrivial R
h : ∀ (w : M), ∃ c, c • 0 = w
c : R
⊢ c • 0 = 0
state_after: no goals

tactic: exact (finrank_eq_one v hn h).le
state_before: case inr
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
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✝¹ : NoZeroSMulDivisors R M
inst✝ : StrongRankCondition R
v : M
h : ∀ (w : M), ∃ c, c • v = w
this : Nontrivial R
hn : v ≠ 0
⊢ finrank R M ≤ 1
state_after: no goals