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

tactic: haveI := nontrivial_of_invariantBasisNumber R
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.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
⊢ lift (#ι) = lift (#ι')

tactic: cases fintypeOrInfinite ι
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.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this : Nontrivial R
⊢ lift (#ι) = lift (#ι')

tactic: haveI : Fintype (range v) := Set.fintypeRange v
state_before: case inl
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this : Nontrivial R
val✝ : Fintype ι
⊢ lift (#ι) = lift (#ι')

tactic: haveI := basisFintypeOfFiniteSpans _ v.span_eq v'
state_before: case inl
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this✝ : Nontrivial R
val✝ : Fintype ι
this : Fintype ↑(range ↑v)
⊢ lift (#ι) = lift (#ι')

tactic: rw [Cardinal.mk_fintype, Cardinal.mk_fintype]
state_before: case inl
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this✝¹ : Nontrivial R
val✝ : Fintype ι
this✝ : Fintype ↑(range ↑v)
this : Fintype ι'
⊢ lift (#ι) = lift (#ι')

tactic: simp only [Cardinal.lift_natCast, Cardinal.natCast_inj]
state_before: case inl
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this✝¹ : Nontrivial R
val✝ : Fintype ι
this✝ : Fintype ↑(range ↑v)
this : Fintype ι'
⊢ lift ↑(Fintype.card ι) = lift ↑(Fintype.card ι')

tactic: apply card_eq_of_linearEquiv R
state_before: case inl
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this✝¹ : Nontrivial R
val✝ : Fintype ι
this✝ : Fintype ↑(range ↑v)
this : Fintype ι'
⊢ Fintype.card ι = Fintype.card ι'

tactic: exact
  (Finsupp.linearEquivFunOnFinite R R ι).symm.trans v.repr.symm ≪≫ₗ v'.repr ≪≫ₗ
    Finsupp.linearEquivFunOnFinite R R ι'
state_before: case inl
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this✝¹ : Nontrivial R
val✝ : Fintype ι
this✝ : Fintype ↑(range ↑v)
this : Fintype ι'
⊢ (ι → R) ≃ₗ[R] ι' → R

tactic: have w₁ := infinite_basis_le_maximal_linearIndependent' v _ v'.linearIndependent v'.maximal
state_before: case inr
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this : Nontrivial R
val✝ : Infinite ι
⊢ lift (#ι) = lift (#ι')

tactic: rcases Cardinal.lift_mk_le'.mp w₁ with ⟨f⟩
state_before: case inr
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this : Nontrivial R
val✝ : Infinite ι
w₁ : lift (#ι) ≤ lift (#ι')
⊢ lift (#ι) = lift (#ι')

tactic: haveI : Infinite ι' := Infinite.of_injective f f.2
state_before: case inr.intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this : Nontrivial R
val✝ : Infinite ι
w₁ : lift (#ι) ≤ lift (#ι')
f : ι ↪ ι'
⊢ lift (#ι) = lift (#ι')

tactic: have w₂ := infinite_basis_le_maximal_linearIndependent' v' _ v.linearIndependent v.maximal
state_before: case inr.intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this✝ : Nontrivial R
val✝ : Infinite ι
w₁ : lift (#ι) ≤ lift (#ι')
f : ι ↪ ι'
this : Infinite ι'
⊢ lift (#ι) = lift (#ι')

tactic: exact le_antisymm w₁ w₂
state_before: case inr.intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.266192
R : Type u
inst✝³ : Ring R
inst✝² : InvariantBasisNumber R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : Basis ι R M
v' : Basis ι' R M
this✝ : Nontrivial R
val✝ : Infinite ι
w₁ : lift (#ι) ≤ lift (#ι')
f : ι ↪ ι'
this : Infinite ι'
w₂ : lift (#ι') ≤ lift (#ι)
⊢ lift (#ι) = lift (#ι')