Documentation

Mathlib.LinearAlgebra.FiniteDimensional.Defs

Finite dimensional vector spaces #

This file defines finite dimensional vector spaces and shows our definition is equivalent to alternative definitions.

Main definitions #

Assume V is a vector space over a division ring K. There are (at least) three equivalent definitions of finite-dimensionality of V:

We introduce a typeclass FiniteDimensional K V capturing this property. For ease of transfer of proof, it is defined using the second point of view, i.e., as Module.Finite. However, we prove that all these points of view are equivalent, with the following lemmas (in the namespace FiniteDimensional):

We make use of finrank, the dimension of a finite dimensional space, returning a Nat, as opposed to Module.rank, which returns a Cardinal. When the space has infinite dimension, its finrank is by convention set to 0. finrank is not defined using FiniteDimensional. For basic results that do not need the FiniteDimensional class, import Mathlib.LinearAlgebra.Finrank.

Preservation of finite-dimensionality and formulas for the dimension are given for

Implementation notes #

You should not assume that there has been any effort to state lemmas as generally as possible.

Plenty of the results hold for general fg modules or notherian modules, and they can be found in Mathlib.LinearAlgebra.FreeModule.Finite.Rank and Mathlib.RingTheory.Noetherian.

@[reducible, inline]
abbrev FiniteDimensional (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] :

FiniteDimensional vector spaces are defined to be finite modules. Use FiniteDimensional.of_fintype_basis to prove finite dimension from another definition.

Equations
Instances For
    theorem FiniteDimensional.of_injective {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {V₂ : Type v'} [AddCommGroup V₂] [Module K V₂] (f : V →ₗ[K] V₂) (w : Function.Injective f) [FiniteDimensional K V₂] :

    If the codomain of an injective linear map is finite dimensional, the domain must be as well.

    theorem FiniteDimensional.of_surjective {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {V₂ : Type v'} [AddCommGroup V₂] [Module K V₂] (f : V →ₗ[K] V₂) (w : Function.Surjective f) [FiniteDimensional K V] :

    If the domain of a surjective linear map is finite dimensional, the codomain must be as well.

    instance FiniteDimensional.finiteDimensional_pi' (K : Type u) [DivisionRing K] {ι : Type u_1} [Finite ι] (M : ιType u_2) [(i : ι) → AddCommGroup (M i)] [(i : ι) → Module K (M i)] [∀ (i : ι), FiniteDimensional K (M i)] :
    FiniteDimensional K ((i : ι) → M i)
    theorem FiniteDimensional.of_fintype_basis {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {ι : Type w} [Finite ι] (h : Basis ι K V) :

    If a vector space has a finite basis, then it is finite-dimensional.

    noncomputable def FiniteDimensional.fintypeBasisIndex {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {ι : Type u_1} [FiniteDimensional K V] (b : Basis ι K V) :

    If a vector space is FiniteDimensional, all bases are indexed by a finite type

    Equations
    Instances For
      theorem FiniteDimensional.of_finite_basis {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {ι : Type w} {s : Set ι} (h : Basis (↑s) K V) (hs : s.Finite) :

      If a vector space has a basis indexed by elements of a finite set, then it is finite-dimensional.

      A subspace of a finite-dimensional space is also finite-dimensional.

      This is a shortcut instance to simplify inference in the presence of [FiniteDimensional K V].

      A quotient of a finite-dimensional space is also finite-dimensional.

      We can infer FiniteDimensional K V in the presence of [Fact (finrank K V = n + 1)]. Declare this as a local instance where needed.

      theorem Module.finrank_eq_rank' (K : Type u) (V : Type v) [DivisionRing K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] :
      (finrank K V) = Module.rank K V

      In a finite-dimensional space, its dimension (seen as a cardinal) coincides with its finrank. This is a copy of finrank_eq_rank _ _ which creates easier typeclass searches.

      theorem Module.finrank_eq_card_basis' {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] {ι : Type w} (h : Basis ι K V) :
      (finrank K V) = Cardinal.mk ι

      If a vector space is finite-dimensional, then the cardinality of any basis is equal to its finrank.

      theorem FiniteDimensional.span_of_finite (K : Type u) {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {A : Set V} (hA : A.Finite) :

      The submodule generated by a finite set is finite-dimensional.

      The submodule generated by a single element is finite-dimensional.

      instance FiniteDimensional.span_finset (K : Type u) {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] (s : Finset V) :

      The submodule generated by a finset is finite-dimensional.

      instance FiniteDimensional.instSubtypeMemSubmoduleMapLinearMapId (K : Type u) {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {V₂ : Type v'} [AddCommGroup V₂] [Module K V₂] (f : V →ₗ[K] V₂) (p : Submodule K V) [FiniteDimensional K p] :

      Pushforwards of finite-dimensional submodules are finite-dimensional.

      theorem FiniteDimensional.trans (F : Type u_1) (K : Type u_2) (A : Type u_3) [DivisionRing F] [DivisionRing K] [AddCommGroup A] [Module F K] [Module K A] [Module F A] [IsScalarTower F K A] [FiniteDimensional F K] [FiniteDimensional K A] :

      A submodule is finitely generated if and only if it is finite-dimensional

      theorem LinearEquiv.finiteDimensional {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {V₂ : Type v'} [AddCommGroup V₂] [Module K V₂] (f : V ≃ₗ[K] V₂) [FiniteDimensional K V] :

      Finite dimensionality is preserved under linear equivalence.