File: Mathlib/LinearAlgebra/Dimension/Free.lean

full_name: lift_rank_mul_lift_rank
code: /-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$.

The universe polymorphic version of `rank_mul_rank` below. -/
theorem lift_rank_mul_lift_rank :
    Cardinal.lift.{w} (Module.rank F K) * Cardinal.lift.{v} (Module.rank K A) =
      Cardinal.lift.{v} (Module.rank F A) 
goal: Cardinal.lift.{w, v} (Module.rank F K) * Cardinal.lift.{v, w} (Module.rank K A) = Cardinal.lift.{v, w} (Module.rank F A)

full_name: rank_mul_rank
code: /-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$.

This is a simpler version of `lift_rank_mul_lift_rank` with `K` and `A` in the same universe. -/
theorem rank_mul_rank (A : Type v) [AddCommGroup A]
    [Module K A] [Module F A] [IsScalarTower F K A] [Module.Free K A] :
    Module.rank F K * Module.rank K A = Module.rank F A 
goal: Module.rank F K * Module.rank K A = Module.rank F A

full_name: FiniteDimensional.finrank_mul_finrank
code: /-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
theorem FiniteDimensional.finrank_mul_finrank : finrank F K * finrank K A = finrank F A 
goal: FiniteDimensional.finrank F K * FiniteDimensional.finrank K A = FiniteDimensional.finrank F A

full_name: Module.Free.rank_eq_card_chooseBasisIndex
code: /-- The rank of a free module `M` over `R` is the cardinality of `ChooseBasisIndex R M`. -/
theorem rank_eq_card_chooseBasisIndex : Module.rank R M = #(ChooseBasisIndex R M) 
goal: Module.rank R M = #(Module.Free.ChooseBasisIndex R M)

full_name: FiniteDimensional.finrank_eq_card_chooseBasisIndex
code: /-- The finrank of a free module `M` over `R` is the cardinality of `ChooseBasisIndex R M`. -/
theorem _root_.FiniteDimensional.finrank_eq_card_chooseBasisIndex [Module.Finite R M] :
    finrank R M = Fintype.card (ChooseBasisIndex R M) 
goal: FiniteDimensional.finrank R M = Fintype.card (Module.Free.ChooseBasisIndex R M)

full_name: Module.Free.rank_eq_mk_of_infinite_lt
code: /-- The rank of a free module `M` over an infinite scalar ring `R` is the cardinality of `M`
whenever `#R < #M`. -/
lemma rank_eq_mk_of_infinite_lt [Infinite R] (h_lt : lift.{v} #R < lift.{u} #M) :
    Module.rank R M = #M 
goal: Module.rank R M = #M

full_name: nonempty_linearEquiv_of_lift_rank_eq
code: /-- Two vector spaces are isomorphic if they have the same dimension. -/
theorem nonempty_linearEquiv_of_lift_rank_eq
    (cnd : Cardinal.lift.{v'} (Module.rank R M) = Cardinal.lift.{v} (Module.rank R M')) :
    Nonempty (M ≃ₗ[R] M') 
goal: Nonempty (M ≃ₗ[R] M')

full_name: nonempty_linearEquiv_of_rank_eq
code: /-- Two vector spaces are isomorphic if they have the same dimension. -/
theorem nonempty_linearEquiv_of_rank_eq (cond : Module.rank R M = Module.rank R M₁) :
    Nonempty (M ≃ₗ[R] M₁) 
goal: Nonempty (M ≃ₗ[R] M₁)

full_name: LinearEquiv.ofLiftRankEq
code: /-- Two vector spaces are isomorphic if they have the same dimension. -/
def LinearEquiv.ofLiftRankEq
    (cond : Cardinal.lift.{v'} (Module.rank R M) = Cardinal.lift.{v} (Module.rank R M')) :
    M ≃ₗ[R] M' 
goal: M ≃ₗ[R] M'

full_name: LinearEquiv.ofRankEq
code: /-- Two vector spaces are isomorphic if they have the same dimension. -/
def LinearEquiv.ofRankEq (cond : Module.rank R M = Module.rank R M₁) : M ≃ₗ[R] M₁ 
goal: M ≃ₗ[R] M₁

full_name: LinearEquiv.nonempty_equiv_iff_lift_rank_eq
code: /-- Two vector spaces are isomorphic if and only if they have the same dimension. -/
theorem LinearEquiv.nonempty_equiv_iff_lift_rank_eq : Nonempty (M ≃ₗ[R] M') ↔
    Cardinal.lift.{v'} (Module.rank R M) = Cardinal.lift.{v} (Module.rank R M') 
goal: Nonempty (M ≃ₗ[R] M') ↔ Cardinal.lift.{v', v} (Module.rank R M) = Cardinal.lift.{v, v'} (Module.rank R M')

full_name: LinearEquiv.nonempty_equiv_iff_rank_eq
code: /-- Two vector spaces are isomorphic if and only if they have the same dimension. -/
theorem LinearEquiv.nonempty_equiv_iff_rank_eq :
    Nonempty (M ≃ₗ[R] M₁) ↔ Module.rank R M = Module.rank R M₁ 
goal: Nonempty (M ≃ₗ[R] M₁) ↔ Module.rank R M = Module.rank R M₁

full_name: FiniteDimensional.nonempty_linearEquiv_of_finrank_eq
code: /-- Two finite and free modules are isomorphic if they have the same (finite) rank. -/
theorem FiniteDimensional.nonempty_linearEquiv_of_finrank_eq
    [Module.Finite R M] [Module.Finite R M'] (cond : finrank R M = finrank R M') :
    Nonempty (M ≃ₗ[R] M') 
goal: Nonempty (M ≃ₗ[R] M')

full_name: FiniteDimensional.nonempty_linearEquiv_iff_finrank_eq
code: /-- Two finite and free modules are isomorphic if and only if they have the same (finite) rank. -/
theorem FiniteDimensional.nonempty_linearEquiv_iff_finrank_eq [Module.Finite R M]
    [Module.Finite R M'] : Nonempty (M ≃ₗ[R] M') ↔ finrank R M = finrank R M' 
goal: Nonempty (M ≃ₗ[R] M') ↔ FiniteDimensional.finrank R M = FiniteDimensional.finrank R M'

full_name: LinearEquiv.ofFinrankEq
code: /-- Two finite and free modules are isomorphic if they have the same (finite) rank. -/
noncomputable def LinearEquiv.ofFinrankEq [Module.Finite R M] [Module.Finite R M']
    (cond : finrank R M = finrank R M') : M ≃ₗ[R] M' 
goal: M ≃ₗ[R] M'

full_name: Module.rank_lt_alpeh0_iff
code: /-- See `rank_lt_aleph0` for the inverse direction without `Module.Free R M`. -/
lemma Module.rank_lt_alpeh0_iff :
    Module.rank R M < ℵ₀ ↔ Module.Finite R M 
goal: Module.rank R M < ℵ₀ ↔ Module.Finite R M

full_name: FiniteDimensional.finrank_of_not_finite
code: theorem FiniteDimensional.finrank_of_not_finite
    (h : ¬Module.Finite R M) :
    finrank R M = 0 
goal: FiniteDimensional.finrank R M = 0

full_name: Module.finite_of_finrank_pos
code: theorem Module.finite_of_finrank_pos (h : 0 < finrank R M) :
    Module.Finite R M 
goal: Module.Finite R M

full_name: Module.finite_of_finrank_eq_succ
code: theorem Module.finite_of_finrank_eq_succ {n : ℕ}
    (hn : finrank R M = n.succ) : Module.Finite R M 
goal: Module.Finite R M

full_name: Module.finite_iff_of_rank_eq_nsmul
code: theorem Module.finite_iff_of_rank_eq_nsmul {W} [AddCommGroup W]
    [Module R W] [Module.Free R W] {n : ℕ} (hn : n ≠ 0)
    (hVW : Module.rank R M = n • Module.rank R W) :
    Module.Finite R M ↔ Module.Finite R W 
goal: Module.Finite R M ↔ Module.Finite R W

full_name: FiniteDimensional.finBasis
code: /-- A finite rank free module has a basis indexed by `Fin (finrank R M)`. -/
noncomputable def finBasis [Module.Finite R M] :
    Basis (Fin (finrank R M)) R M 
goal: Basis (Fin (FiniteDimensional.finrank R M)) R M

full_name: FiniteDimensional.finBasisOfFinrankEq
code: /-- A rank `n` free module has a basis indexed by `Fin n`. -/
noncomputable def finBasisOfFinrankEq [Module.Finite R M] {n : ℕ} (hn : finrank R M = n) :
    Basis (Fin n) R M 
goal: Basis (Fin n) R M

full_name: FiniteDimensional.basisUnique
code: /-- A free module with rank 1 has a basis with one element. -/
noncomputable def basisUnique (ι : Type*) [Unique ι]
    (h : finrank R M = 1) :
    Basis ι R M 
goal: Basis ι R M

full_name: FiniteDimensional.basisUnique_repr_eq_zero_iff
code: @[simp]
theorem basisUnique_repr_eq_zero_iff {ι : Type*} [Unique ι]
    {h : finrank R M = 1} {v : M} {i : ι} :
    (basisUnique ι h).repr v i = 0 ↔ v = 0 
goal: ((FiniteDimensional.basisUnique ι h).repr v) i = 0 ↔ v = 0