Documentation

Mathlib.LinearAlgebra.FiniteDimensional.Lemmas

Finite-dimensional vector spaces #

This file contains some further development of finite-dimensional vector spaces, their dimensions, and linear maps on such spaces.

Definitions are in Mathlib/LinearAlgebra/FiniteDimensional/Defs.lean and results that require fewer imports are in Mathlib/LinearAlgebra/FiniteDimensional/Basic.lean.

theorem Submodule.finrank_lt {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] {s : Submodule K V} (h : s ≠ ⊤) :

The dimension of a strict submodule is strictly bounded by the dimension of the ambient space.

See also Submodule.length_lt.

theorem Submodule.finrank_sup_add_finrank_inf_eq {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] (s t : Submodule K V) [FiniteDimensional K ↄs] [FiniteDimensional K ↄt] :
Module.finrank K ↄ(s āŠ” t) + Module.finrank K ↄ(s āŠ“ t) = Module.finrank K ↄs + Module.finrank K ↄt

The sum of the dimensions of s + t and s ∩ t is the sum of the dimensions of s and t

theorem Submodule.finrank_add_le_finrank_add_finrank {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] (s t : Submodule K V) [FiniteDimensional K ↄs] [FiniteDimensional K ↄt] :
Module.finrank K ↄ(s āŠ” t) ≤ Module.finrank K ↄs + Module.finrank K ↄt
theorem Submodule.eq_top_of_disjoint {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] (s t : Submodule K V) (hdim : Module.finrank K V ≤ Module.finrank K ↄs + Module.finrank K ↄt) (hdisjoint : Disjoint s t) :
s āŠ” t = ⊤
theorem Submodule.isCompl_iff_disjoint {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] (s t : Submodule K V) (hdim : Module.finrank K V ≤ Module.finrank K ↄs + Module.finrank K ↄt) :
IsCompl s t ↔ Disjoint s t
theorem Submodule.sup_span_singleton_eq_top_iff {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] [Module.Finite K V] {W : Submodule K V} {v : V} (hv : v āˆ‰ W) :
W āŠ” K āˆ™ v = ⊤ ↔ Module.finrank K (V ā§ø W) = 1
noncomputable def FiniteDimensional.LinearEquiv.quotEquivOfEquiv {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {Vā‚‚ : Type v'} [AddCommGroup Vā‚‚] [Module K Vā‚‚] [FiniteDimensional K V] [FiniteDimensional K Vā‚‚] {p : Subspace K V} {q : Subspace K Vā‚‚} (f₁ : ↄp ā‰ƒā‚—[K] ↄq) (fā‚‚ : V ā‰ƒā‚—[K] Vā‚‚) :
(V ā§ø p) ā‰ƒā‚—[K] Vā‚‚ ā§ø q

Given isomorphic subspaces p q of vector spaces V and V₁ respectively, p.quotient is isomorphic to q.quotient.

Instances For
    noncomputable def FiniteDimensional.LinearEquiv.quotEquivOfQuotEquiv {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] {p q : Subspace K V} (f : (V ā§ø p) ā‰ƒā‚—[K] ↄq) :
    (V ā§ø q) ā‰ƒā‚—[K] ↄp

    Given the subspaces p q, if p.quotient ā‰ƒā‚—[K] q, then q.quotient ā‰ƒā‚—[K] p

    Instances For
      theorem LinearMap.finrank_range_add_finrank_ker {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {Vā‚‚ : Type v'} [AddCommGroup Vā‚‚] [Module K Vā‚‚] [FiniteDimensional K V] (f : V →ₗ[K] Vā‚‚) :
      Module.finrank K ↄf.range + Module.finrank K ↄf.ker = Module.finrank K V

      rank-nullity theorem : the dimensions of the kernel and the range of a linear map add up to the dimension of the source space.

      theorem LinearMap.ker_ne_bot_of_finrank_lt {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {Vā‚‚ : Type v'} [AddCommGroup Vā‚‚] [Module K Vā‚‚] [FiniteDimensional K V] [FiniteDimensional K Vā‚‚] {f : V →ₗ[K] Vā‚‚} (h : Module.finrank K Vā‚‚ < Module.finrank K V) :
      f.ker ≠ ⊄
      theorem LinearMap.injective_iff_surjective_of_finrank_eq_finrank {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {Vā‚‚ : Type v'} [AddCommGroup Vā‚‚] [Module K Vā‚‚] [FiniteDimensional K V] [FiniteDimensional K Vā‚‚] (H : Module.finrank K V = Module.finrank K Vā‚‚) {f : V →ₗ[K] Vā‚‚} :
      Function.Injective ⇑f ↔ Function.Surjective ⇑f
      theorem LinearMap.ker_eq_bot_iff_range_eq_top_of_finrank_eq_finrank {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {Vā‚‚ : Type v'} [AddCommGroup Vā‚‚] [Module K Vā‚‚] [FiniteDimensional K V] [FiniteDimensional K Vā‚‚] (H : Module.finrank K V = Module.finrank K Vā‚‚) {f : V →ₗ[K] Vā‚‚} :
      f.ker = ⊄ ↔ f.range = ⊤
      noncomputable def LinearMap.linearEquivOfInjective {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {Vā‚‚ : Type v'} [AddCommGroup Vā‚‚] [Module K Vā‚‚] [FiniteDimensional K V] [FiniteDimensional K Vā‚‚] (f : V →ₗ[K] Vā‚‚) (hf : Function.Injective ⇑f) (hdim : Module.finrank K V = Module.finrank K Vā‚‚) :
      V ā‰ƒā‚—[K] Vā‚‚

      Given a linear map f between two vector spaces with the same dimension, if ker f = ⊄ then linearEquivOfInjective is the induced isomorphism between the two vector spaces.

      Instances For
        @[simp]
        theorem LinearMap.linearEquivOfInjective_apply {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {Vā‚‚ : Type v'} [AddCommGroup Vā‚‚] [Module K Vā‚‚] [FiniteDimensional K V] [FiniteDimensional K Vā‚‚] {f : V →ₗ[K] Vā‚‚} (hf : Function.Injective ⇑f) (hdim : Module.finrank K V = Module.finrank K Vā‚‚) (x : V) :
        (f.linearEquivOfInjective hf hdim) x = f x
        theorem Submodule.finrank_lt_finrank_of_lt {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {s t : Submodule K V} [FiniteDimensional K ↄt] (hst : s < t) :
        Module.finrank K ↄs < Module.finrank K ↄt
        theorem LinearIndependent.span_eq_top_of_card_eq_finrank' {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {ι : Type u_1} [Fintype ι] [FiniteDimensional K V] {b : ι → V} (lin_ind : LinearIndependent K b) (card_eq : Fintype.card ι = Module.finrank K V) :
        theorem LinearIndependent.span_eq_top_of_card_eq_finrank {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {ι : Type u_1} [Nonempty ι] [Fintype ι] {b : ι → V} (lin_ind : LinearIndependent K b) (card_eq : Fintype.card ι = Module.finrank K V) :
        noncomputable def basisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {ι : Type u_1} [Nonempty ι] [Fintype ι] {b : ι → V} (lin_ind : LinearIndependent K b) (card_eq : Fintype.card ι = Module.finrank K V) :
        Module.Basis ι K V

        A linear independent family of finrank K V vectors forms a basis.

        Instances For
          @[simp]
          theorem basisOfLinearIndependentOfCardEqFinrank_repr_apply {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {ι : Type u_1} [Nonempty ι] [Fintype ι] {b : ι → V} (lin_ind : LinearIndependent K b) (card_eq : Fintype.card ι = Module.finrank K V) (aāœ : V) :
          (basisOfLinearIndependentOfCardEqFinrank lin_ind card_eq).repr aāœ = lin_ind.repr ((LinearMap.codRestrict (Submodule.span K (Set.range b)) LinearMap.id ⋯) aāœ)
          @[simp]
          theorem coe_basisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {ι : Type u_1} [Nonempty ι] [Fintype ι] {b : ι → V} (lin_ind : LinearIndependent K b) (card_eq : Fintype.card ι = Module.finrank K V) :
          ⇑(basisOfLinearIndependentOfCardEqFinrank lin_ind card_eq) = b
          noncomputable def basisOfPiSpaceOfLinearIndependent {K : Type u} [DivisionRing K] {ι : Type u_1} [Fintype ι] [Decidable (Nonempty ι)] {b : ι → ι → K} (hb : LinearIndependent K b) :
          Module.Basis ι K (ι → K)

          In a vector space ι → K, a linear independent family indexed by ι is a basis.

          Instances For
            @[simp]
            theorem coe_basisOfPiSpaceOfLinearIndependent {K : Type u} [DivisionRing K] {ι : Type u_1} [Fintype ι] {b : ι → ι → K} (hb : LinearIndependent K b) :
            noncomputable def finsetBasisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {s : Finset V} (hs : s.Nonempty) (lin_ind : LinearIndependent K Subtype.val) (card_eq : s.card = Module.finrank K V) :
            Module.Basis (ↄs) K V

            A linear independent finset of finrank K V vectors forms a basis.

            Instances For
              @[simp]
              theorem finsetBasisOfLinearIndependentOfCardEqFinrank_repr_apply {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {s : Finset V} (hs : s.Nonempty) (lin_ind : LinearIndependent K Subtype.val) (card_eq : s.card = Module.finrank K V) (aāœ : V) :
              (finsetBasisOfLinearIndependentOfCardEqFinrank hs lin_ind card_eq).repr aāœ = lin_ind.repr ((LinearMap.codRestrict (Submodule.span K (Set.range Subtype.val)) LinearMap.id ⋯) aāœ)
              @[simp]
              theorem coe_finsetBasisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {s : Finset V} (hs : s.Nonempty) (lin_ind : LinearIndependent K Subtype.val) (card_eq : s.card = Module.finrank K V) :
              ⇑(finsetBasisOfLinearIndependentOfCardEqFinrank hs lin_ind card_eq) = Subtype.val
              noncomputable def setBasisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {s : Set V} [Nonempty ↑s] [Fintype ↑s] (lin_ind : LinearIndependent K Subtype.val) (card_eq : s.toFinset.card = Module.finrank K V) :
              Module.Basis (↑s) K V

              A linear independent set of finrank K V vectors forms a basis.

              Instances For
                @[simp]
                theorem setBasisOfLinearIndependentOfCardEqFinrank_repr_apply {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {s : Set V} [Nonempty ↑s] [Fintype ↑s] (lin_ind : LinearIndependent K Subtype.val) (card_eq : s.toFinset.card = Module.finrank K V) (aāœ : V) :
                (setBasisOfLinearIndependentOfCardEqFinrank lin_ind card_eq).repr aāœ = lin_ind.repr ((LinearMap.codRestrict (Submodule.span K (Set.range Subtype.val)) LinearMap.id ⋯) aāœ)
                @[simp]
                theorem coe_setBasisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {s : Set V} [Nonempty ↑s] [Fintype ↑s] (lin_ind : LinearIndependent K Subtype.val) (card_eq : s.toFinset.card = Module.finrank K V) :
                ⇑(setBasisOfLinearIndependentOfCardEqFinrank lin_ind card_eq) = Subtype.val

                We now give characterisations of finrank K V = 1 and finrank K V ≤ 1.

                theorem is_simple_module_of_finrank_eq_one {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] {A : Type u_1} [Semiring A] [Module A V] [SMul K A] [IsScalarTower K A V] (h : Module.finrank K V = 1) :

                Any K-algebra module that is 1-dimensional over K is simple.

                theorem Module.End.exists_ker_pow_eq_ker_pow_succ {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] (f : End K V) :
                ∃ k ≤ finrank K V, LinearMap.ker (f ^ k) = LinearMap.ker (f ^ k.succ)
                theorem Module.End.ker_pow_eq_ker_pow_finrank_of_le {K : Type u} {V : Type v} [DivisionRing K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] {f : End K V} {m : ā„•} (hm : finrank K V ≤ m) :
                LinearMap.ker (f ^ m) = LinearMap.ker (f ^ finrank K V)