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

tactic: obtain ⟨⟨_, B⟩⟩ := Module.Free.exists_basis (R := K) (M := 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.460838
inst✝¹⁰ : Ring K
inst✝⁹ : StrongRankCondition K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
inst✝⁶ : Module.Free K V
inst✝⁵ : AddCommGroup V'
inst✝⁴ : Module K V'
inst✝³ : Module.Free K V'
inst✝² : AddCommGroup V₁
inst✝¹ : Module K V₁
inst✝ : Module.Free K V₁
cnd : lift (Module.rank K V) = lift (Module.rank K V')
⊢ Nonempty (V ≃ₗ[K] V')

tactic: obtain ⟨⟨_, B'⟩⟩ := Module.Free.exists_basis (R := K) (M := V')
state_before: case intro.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.460838
inst✝¹⁰ : Ring K
inst✝⁹ : StrongRankCondition K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
inst✝⁶ : Module.Free K V
inst✝⁵ : AddCommGroup V'
inst✝⁴ : Module K V'
inst✝³ : Module.Free K V'
inst✝² : AddCommGroup V₁
inst✝¹ : Module K V₁
inst✝ : Module.Free K V₁
cnd : lift (Module.rank K V) = lift (Module.rank K V')
fst✝ : Type v
B : Basis fst✝ K V
⊢ Nonempty (V ≃ₗ[K] V')

tactic: have : Cardinal.lift.{v', v} (#_) = Cardinal.lift.{v, v'} (#_) := by
  rw [B.mk_eq_rank'', cnd, B'.mk_eq_rank'']
state_before: case intro.mk.intro.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.460838
inst✝¹⁰ : Ring K
inst✝⁹ : StrongRankCondition K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
inst✝⁶ : Module.Free K V
inst✝⁵ : AddCommGroup V'
inst✝⁴ : Module K V'
inst✝³ : Module.Free K V'
inst✝² : AddCommGroup V₁
inst✝¹ : Module K V₁
inst✝ : Module.Free K V₁
cnd : lift (Module.rank K V) = lift (Module.rank K V')
fst✝¹ : Type v
B : Basis fst✝¹ K V
fst✝ : Type v'
B' : Basis fst✝ K V'
⊢ Nonempty (V ≃ₗ[K] V')

tactic: exact (Cardinal.lift_mk_eq.{v, v', 0}.1 this).map (B.equiv B')
state_before: case intro.mk.intro.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.460838
inst✝¹⁰ : Ring K
inst✝⁹ : StrongRankCondition K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
inst✝⁶ : Module.Free K V
inst✝⁵ : AddCommGroup V'
inst✝⁴ : Module K V'
inst✝³ : Module.Free K V'
inst✝² : AddCommGroup V₁
inst✝¹ : Module K V₁
inst✝ : Module.Free K V₁
cnd : lift (Module.rank K V) = lift (Module.rank K V')
fst✝¹ : Type v
B : Basis fst✝¹ K V
fst✝ : Type v'
B' : Basis fst✝ K V'
this : lift (#fst✝¹) = lift (#fst✝)
⊢ Nonempty (V ≃ₗ[K] V')

tactic: rw [B.mk_eq_rank'', cnd, B'.mk_eq_rank'']
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.460838
inst✝¹⁰ : Ring K
inst✝⁹ : StrongRankCondition K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
inst✝⁶ : Module.Free K V
inst✝⁵ : AddCommGroup V'
inst✝⁴ : Module K V'
inst✝³ : Module.Free K V'
inst✝² : AddCommGroup V₁
inst✝¹ : Module K V₁
inst✝ : Module.Free K V₁
cnd : lift (Module.rank K V) = lift (Module.rank K V')
fst✝¹ : Type v
B : Basis fst✝¹ K V
fst✝ : Type v'
B' : Basis fst✝ K V'
⊢ lift (#?m.465513) = lift (#?m.465515)