Theorem: Module.Free.rank_eq_mk_of_infinite_lt
File: Mathlib/LinearAlgebra/Dimension/Free.lean

tactic: have : Infinite M := infinite_iff.mpr <| lift_le.mp <| le_trans (by simp) h_lt.le
state_before: R : Type u
M M₁ : Type v
M' : Type v'
inst✝¹¹ : Ring R
inst✝¹⁰ : StrongRankCondition R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Free R M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
inst✝⁴ : Free R M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : Free R M₁
inst✝ : Infinite R
h_lt : lift.{v, u} #R < lift.{u, v} #M
⊢ Module.rank R M = #M
state_after: R : Type u
M M₁ : Type v
M' : Type v'
inst✝¹¹ : Ring R
inst✝¹⁰ : StrongRankCondition R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Free R M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
inst✝⁴ : Free R M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : Free R M₁
inst✝ : Infinite R
h_lt : lift.{v, u} #R < lift.{u, v} #M
this : Infinite M
⊢ Module.rank R M = #M

tactic: have h : lift #M = lift #(ChooseBasisIndex R M →₀ R) := lift_mk_eq'.mpr ⟨(chooseBasis R M).repr⟩
state_before: R : Type u
M M₁ : Type v
M' : Type v'
inst✝¹¹ : Ring R
inst✝¹⁰ : StrongRankCondition R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Free R M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
inst✝⁴ : Free R M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : Free R M₁
inst✝ : Infinite R
h_lt : lift.{v, u} #R < lift.{u, v} #M
this : Infinite M
⊢ Module.rank R M = #M
state_after: R : Type u
M M₁ : Type v
M' : Type v'
inst✝¹¹ : Ring R
inst✝¹⁰ : StrongRankCondition R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Free R M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
inst✝⁴ : Free R M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : Free R M₁
inst✝ : Infinite R
h_lt : lift.{v, u} #R < lift.{u, v} #M
this : Infinite M
h : lift.{max u v, v} #M = lift.{v, max u v} #(ChooseBasisIndex R M →₀ R)
⊢ Module.rank R M = #M

tactic: simp only [mk_finsupp_lift_of_infinite', lift_id', ← rank_eq_card_chooseBasisIndex, lift_max,
  lift_lift] at h
state_before: R : Type u
M M₁ : Type v
M' : Type v'
inst✝¹¹ : Ring R
inst✝¹⁰ : StrongRankCondition R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Free R M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
inst✝⁴ : Free R M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : Free R M₁
inst✝ : Infinite R
h_lt : lift.{v, u} #R < lift.{u, v} #M
this : Infinite M
h : lift.{max u v, v} #M = lift.{v, max u v} #(ChooseBasisIndex R M →₀ R)
⊢ Module.rank R M = #M
state_after: R : Type u
M M₁ : Type v
M' : Type v'
inst✝¹¹ : Ring R
inst✝¹⁰ : StrongRankCondition R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Free R M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
inst✝⁴ : Free R M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : Free R M₁
inst✝ : Infinite R
h_lt : lift.{v, u} #R < lift.{u, v} #M
this : Infinite M
h : lift.{max u v, v} #M = max (lift.{max u v, v} (Module.rank R M)) (lift.{v, u} #R)
⊢ Module.rank R M = #M

tactic: refine lift_inj.mp ((max_eq_iff.mp h.symm).resolve_right <| not_and_of_not_left _ ?_).left
state_before: R : Type u
M M₁ : Type v
M' : Type v'
inst✝¹¹ : Ring R
inst✝¹⁰ : StrongRankCondition R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Free R M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
inst✝⁴ : Free R M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : Free R M₁
inst✝ : Infinite R
h_lt : lift.{v, u} #R < lift.{u, v} #M
this : Infinite M
h : lift.{max u v, v} #M = max (lift.{max u v, v} (Module.rank R M)) (lift.{v, u} #R)
⊢ Module.rank R M = #M
state_after: R : Type u
M M₁ : Type v
M' : Type v'
inst✝¹¹ : Ring R
inst✝¹⁰ : StrongRankCondition R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Free R M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
inst✝⁴ : Free R M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : Free R M₁
inst✝ : Infinite R
h_lt : lift.{v, u} #R < lift.{u, v} #M
this : Infinite M
h : lift.{max u v, v} #M = max (lift.{max u v, v} (Module.rank R M)) (lift.{v, u} #R)
⊢ ¬lift.{v, u} #R = lift.{max u v, v} #M

tactic: exact (lift_umax.{v, u}.symm ▸ h_lt).ne
state_before: R : Type u
M M₁ : Type v
M' : Type v'
inst✝¹¹ : Ring R
inst✝¹⁰ : StrongRankCondition R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Free R M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
inst✝⁴ : Free R M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : Free R M₁
inst✝ : Infinite R
h_lt : lift.{v, u} #R < lift.{u, v} #M
this : Infinite M
h : lift.{max u v, v} #M = max (lift.{max u v, v} (Module.rank R M)) (lift.{v, u} #R)
⊢ ¬lift.{v, u} #R = lift.{max u v, v} #M
state_after: no goals

tactic: simp
state_before: R : Type u
M M₁ : Type v
M' : Type v'
inst✝¹¹ : Ring R
inst✝¹⁰ : StrongRankCondition R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : Free R M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
inst✝⁴ : Free R M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : Free R M₁
inst✝ : Infinite R
h_lt : lift.{v, u} #R < lift.{u, v} #M
⊢ lift.{u, v} ℵ₀ ≤ lift.{v, u} #R
state_after: no goals