# Documentation

Mathlib.LinearAlgebra.FiniteDimensional

# Finite dimensional vector spaces #

Definition and basic properties of finite dimensional vector spaces, of their dimensions, and of linear maps on such spaces.

## 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:

• it admits a finite basis.
• it is finitely generated.
• it is noetherian, i.e., every subspace is finitely generated.

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 Finite. However, we prove that all these points of view are equivalent, with the following lemmas (in the namespace FiniteDimensional):

• fintypeBasisIndex states that a finite-dimensional vector space has a finite basis
• FiniteDimensional.finBasis and FiniteDimensional.finBasisOfFinrankEq are bases for finite dimensional vector spaces, where the index type is Fin
• of_fintype_basis states that the existence of a basis indexed by a finite type implies finite-dimensionality
• of_finite_basis states that the existence of a basis indexed by a finite set implies finite-dimensionality
• IsNoetherian.iff_fg states that the space is finite-dimensional if and only if it is noetherian

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

• submodules
• quotients (for the dimension of a quotient, see finrank_quotient_add_finrank)
• linear equivs, in LinearEquiv.finiteDimensional
• image under a linear map (the rank-nullity formula is in finrank_range_add_finrank_ker)

Basic properties of linear maps of a finite-dimensional vector space are given. Notably, the equivalence of injectivity and surjectivity is proved in LinearMap.injective_iff_surjective, and the equivalence between left-inverse and right-inverse in LinearMap.mul_eq_one_comm and LinearMap.comp_eq_id_comm.

## Implementation notes #

Most results are deduced from the corresponding results for the general dimension (as a cardinal), in Mathlib.LinearAlgebra.Dimension. Not all results have been ported yet.

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

One of the characterizations of finite-dimensionality is in terms of finite generation. This property is currently defined only for submodules, so we express it through the fact that the maximal submodule (which, as a set, coincides with the whole space) is finitely generated. This is not very convenient to use, although there are some helper functions. However, this becomes very convenient when speaking of submodules which are finite-dimensional, as this notion coincides with the fact that the submodule is finitely generated (as a submodule of the whole space). This equivalence is proved in Submodule.fg_iff_finiteDimensional.

@[reducible]
def FiniteDimensional (K : Type u_1) (V : Type u_2) [] [] [Module K V] :

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

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

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} [] [] [Module K V] {V₂ : Type v'} [] [Module K V₂] (f : V →ₗ[K] V₂) (w : ) [] :

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

instance FiniteDimensional.finiteDimensional_pi (K : Type u) [] {ι : Type u_1} [] :
FiniteDimensional K (ιK)
instance FiniteDimensional.finiteDimensional_pi' (K : Type u) [] {ι : Type u_1} [] (M : ιType u_2) [(i : ι) → AddCommGroup (M i)] [(i : ι) → Module K (M i)] [I : ∀ (i : ι), FiniteDimensional K (M i)] :
FiniteDimensional K ((i : ι) → M i)
noncomputable def FiniteDimensional.fintypeOfFintype (K : Type u) (V : Type v) [] [] [Module K V] [] [] :

A finite dimensional vector space over a finite field is finite

Instances For
theorem FiniteDimensional.finite_of_finite (K : Type u) (V : Type v) [] [] [Module K V] [] [] :
theorem FiniteDimensional.of_fintype_basis {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type w} [] (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} [] [] [Module K V] {ι : Type u_1} [] (b : Basis ι K V) :

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

Instances For
noncomputable instance FiniteDimensional.instFintypeElemOfVectorSpaceIndex {K : Type u} {V : Type v} [] [] [Module K V] [] :

If a vector space is FiniteDimensional, Basis.ofVectorSpace is indexed by a finite type.

theorem FiniteDimensional.of_finite_basis {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type w} {s : Set ι} (h : Basis (s) K V) (hs : ) :

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

instance FiniteDimensional.finiteDimensional_submodule {K : Type u} {V : Type v} [] [] [Module K V] [] (S : ) :
FiniteDimensional K { x // x S }

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

instance FiniteDimensional.finiteDimensional_quotient {K : Type u} {V : Type v} [] [] [Module K V] [] (S : ) :

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

theorem FiniteDimensional.finrank_eq_rank' (K : Type u) (V : Type v) [] [] [Module 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 FiniteDimensional.finrank_of_infinite_dimensional {K : Type u} {V : Type v} [] [] [Module K V] (h : ) :
theorem FiniteDimensional.finiteDimensional_of_finrank {K : Type u} {V : Type v} [] [] [Module K V] (h : ) :
theorem FiniteDimensional.finiteDimensional_of_finrank_eq_succ {K : Type u} {V : Type v} [] [] [Module K V] {n : } (hn : ) :
theorem FiniteDimensional.fact_finiteDimensional_of_finrank_eq_succ {K : Type u} {V : Type v} [] [] [Module K V] (n : ) [Fact ( = n + 1)] :

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 FiniteDimensional.finiteDimensional_iff_of_rank_eq_nsmul {K : Type u} {V : Type v} [] [] [Module K V] {W : Type v} [] [Module K W] {n : } (hn : n 0) (hVW : = n ) :
theorem FiniteDimensional.finrank_eq_card_basis' {K : Type u} {V : Type v} [] [] [Module K V] [] {ι : Type w} (h : Basis ι K V) :

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

noncomputable def Basis.unique {K : Type u} [] {ι : Type u_1} (b : Basis ι K K) :

Given a basis of a division ring over itself indexed by a type ι, then ι is Unique.

Instances For
noncomputable def FiniteDimensional.finBasis (K : Type u) (V : Type v) [] [] [Module K V] [] :
Basis () K V

A finite dimensional vector space has a basis indexed by Fin (finrank K V).

Instances For
noncomputable def FiniteDimensional.finBasisOfFinrankEq (K : Type u) (V : Type v) [] [] [Module K V] [] {n : } (hn : ) :
Basis (Fin n) K V

An n-dimensional vector space has a basis indexed by Fin n.

Instances For
noncomputable def FiniteDimensional.basisUnique {K : Type u} {V : Type v} [] [] [Module K V] (ι : Type u_1) [] (h : ) :
Basis ι K V

A module with dimension 1 has a basis with one element.

Instances For
@[simp]
theorem FiniteDimensional.basisUnique.repr_eq_zero_iff {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type u_1} [] {h : } {v : V} {i : ι} :
↑(().repr v) i = 0 v = 0
theorem FiniteDimensional.cardinal_mk_le_finrank_of_linearIndependent {K : Type u} {V : Type v} [] [] [Module K V] [] {ι : Type w} {b : ιV} (h : ) :
theorem FiniteDimensional.fintype_card_le_finrank_of_linearIndependent {K : Type u} {V : Type v} [] [] [Module K V] [] {ι : Type u_1} [] {b : ιV} (h : ) :
theorem FiniteDimensional.finset_card_le_finrank_of_linearIndependent {K : Type u} {V : Type v} [] [] [Module K V] [] {b : } (h : LinearIndependent K fun x => x) :
theorem FiniteDimensional.lt_aleph0_of_linearIndependent {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type w} [] {v : ιV} (h : ) :
theorem LinearIndependent.finite {K : Type u} {V : Type v} [] [] [Module K V] [] {b : Set V} (h : LinearIndependent K fun x => x) :
theorem FiniteDimensional.not_linearIndependent_of_infinite {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type w} [inf : ] [] (v : ιV) :
theorem FiniteDimensional.finrank_pos_iff_exists_ne_zero {K : Type u} {V : Type v} [] [] [Module K V] [] :
x, x 0

A finite dimensional space has positive finrank iff it has a nonzero element.

theorem FiniteDimensional.finrank_pos_iff {K : Type u} {V : Type v} [] [] [Module K V] [] :

A finite dimensional space has positive finrank iff it is nontrivial.

theorem FiniteDimensional.finrank_pos {K : Type u} {V : Type v} [] [] [Module K V] [] [h : ] :

A nontrivial finite dimensional space has positive finrank.

theorem FiniteDimensional.finrank_zero_iff {K : Type u} {V : Type v} [] [] [Module K V] [] :

A finite dimensional space has zero finrank iff it is a subsingleton. This is the finrank version of rank_zero_iff.

theorem Submodule.eq_top_of_finrank_eq {K : Type u} {V : Type v} [] [] [Module K V] [] {S : } (h : FiniteDimensional.finrank K { x // x S } = ) :
S =

If a submodule has maximal dimension in a finite dimensional space, then it is equal to the whole space.

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

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

instance FiniteDimensional.span_singleton (K : Type u) {V : Type v} [] [] [Module K V] (x : V) :

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

instance FiniteDimensional.span_finset (K : Type u) {V : Type v} [] [] [Module K V] (s : ) :
FiniteDimensional K { x // x }

The submodule generated by a finset is finite-dimensional.

theorem CompleteLattice.Independent.subtype_ne_bot_le_finrank_aux {K : Type u} {V : Type v} [] [] [Module K V] [] {ι : Type w} {p : ι} (hp : ) :
Cardinal.mk { i // p i } ↑()
noncomputable def CompleteLattice.Independent.fintypeNeBotOfFiniteDimensional {K : Type u} {V : Type v} [] [] [Module K V] [] {ι : Type w} {p : ι} (hp : ) :
Fintype { i // p i }

If p is an independent family of subspaces of a finite-dimensional space V, then the number of nontrivial subspaces in the family p is finite.

Instances For
theorem CompleteLattice.Independent.subtype_ne_bot_le_finrank {K : Type u} {V : Type v} [] [] [Module K V] [] {ι : Type w} {p : ι} (hp : ) [Fintype { i // p i }] :
Fintype.card { i // p i }

If p is an independent family of subspaces of a finite-dimensional space V, then the number of nontrivial subspaces in the family p is bounded above by the dimension of V.

Note that the Fintype hypothesis required here can be provided by CompleteLattice.Independent.fintypeNeBotOfFiniteDimensional.

theorem FiniteDimensional.exists_nontrivial_relation_of_rank_lt_card {K : Type u} {V : Type v} [] [] [Module K V] [] {t : } (h : ) :
f, (Finset.sum t fun e => f e e) = 0 x, x t f x 0

If a finset has cardinality larger than the dimension of the space, then there is a nontrivial linear relation amongst its elements.

theorem FiniteDimensional.exists_nontrivial_relation_sum_zero_of_rank_succ_lt_card {K : Type u} {V : Type v} [] [] [Module K V] [] {t : } (h : ) :
f, (Finset.sum t fun e => f e e) = 0 (Finset.sum t fun e => f e) = 0 x, x t f x 0

If a finset has cardinality larger than finrank + 1, then there is a nontrivial linear relation amongst its elements, such that the coefficients of the relation sum to zero.

theorem FiniteDimensional.exists_relation_sum_zero_pos_coefficient_of_rank_succ_lt_card {L : Type u_1} {W : Type v} [] [Module L W] [] {t : } (h : ) :
f, (Finset.sum t fun e => f e e) = 0 (Finset.sum t fun e => f e) = 0 x, x t 0 < f x

A slight strengthening of exists_nontrivial_relation_sum_zero_of_rank_succ_lt_card available when working over an ordered field: we can ensure a positive coefficient, not just a nonzero coefficient.

@[simp]
theorem FiniteDimensional.basisSingleton_repr_apply {K : Type u} {V : Type v} [] [] [Module K V] (ι : Type u_1) [] (h : ) (v : V) (hv : v 0) (w : V) :
().repr w = fun₀ | default => ↑(().repr w) default / ↑(().repr v) default
noncomputable def FiniteDimensional.basisSingleton {K : Type u} {V : Type v} [] [] [Module K V] (ι : Type u_1) [] (h : ) (v : V) (hv : v 0) :
Basis ι K V

In a vector space with dimension 1, each set {v} is a basis for v ≠ 0.

Instances For
@[simp]
theorem FiniteDimensional.basisSingleton_apply {K : Type u} {V : Type v} [] [] [Module K V] (ι : Type u_1) [] (h : ) (v : V) (hv : v 0) (i : ι) :
↑() i = v
@[simp]
theorem FiniteDimensional.range_basisSingleton {K : Type u} {V : Type v} [] [] [Module K V] (ι : Type u_1) [] (h : ) (v : V) (hv : v 0) :
Set.range ↑() = {v}
theorem finiteDimensional_of_rank_eq_nat {K : Type u} {V : Type v} [] [] [Module K V] {n : } (h : = n) :
theorem finiteDimensional_of_rank_eq_zero {K : Type u} {V : Type v} [] [] [Module K V] (h : = 0) :
theorem finiteDimensional_of_rank_eq_one {K : Type u} {V : Type v} [] [] [Module K V] (h : = 1) :
theorem finrank_eq_zero_of_rank_eq_zero {K : Type u} {V : Type v} [] [] [Module K V] [] (h : = 0) :
instance finiteDimensional_bot (K : Type u) (V : Type v) [] [] [Module K V] :
theorem bot_eq_top_of_rank_eq_zero {K : Type u} {V : Type v} [] [] [Module K V] (h : = 0) :
@[simp]
theorem rank_eq_zero {K : Type u} {V : Type v} [] [] [Module K V] {S : } :
Module.rank K { x // x S } = 0 S =
@[simp]
theorem finrank_eq_zero {K : Type u} {V : Type v} [] [] [Module K V] {S : } [FiniteDimensional K { x // x S }] :
FiniteDimensional.finrank K { x // x S } = 0 S =
theorem Submodule.fg_iff_finiteDimensional {K : Type u} {V : Type v} [] [] [Module K V] (s : ) :
FiniteDimensional K { x // x s }

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

theorem Submodule.finiteDimensional_of_le {K : Type u} {V : Type v} [] [] [Module K V] {S₁ : } {S₂ : } [FiniteDimensional K { x // x S₂ }] (h : S₁ S₂) :
FiniteDimensional K { x // x S₁ }

A submodule contained in a finite-dimensional submodule is finite-dimensional.

instance Submodule.finiteDimensional_inf_left {K : Type u} {V : Type v} [] [] [Module K V] (S₁ : ) (S₂ : ) [FiniteDimensional K { x // x S₁ }] :
FiniteDimensional K { x // x S₁ S₂ }

The inf of two submodules, the first finite-dimensional, is finite-dimensional.

instance Submodule.finiteDimensional_inf_right {K : Type u} {V : Type v} [] [] [Module K V] (S₁ : ) (S₂ : ) [FiniteDimensional K { x // x S₂ }] :
FiniteDimensional K { x // x S₁ S₂ }

The inf of two submodules, the second finite-dimensional, is finite-dimensional.

instance Submodule.finiteDimensional_sup {K : Type u} {V : Type v} [] [] [Module K V] (S₁ : ) (S₂ : ) [h₁ : FiniteDimensional K { x // x S₁ }] [h₂ : FiniteDimensional K { x // x S₂ }] :
FiniteDimensional K { x // x S₁ S₂ }

The sup of two finite-dimensional submodules is finite-dimensional.

instance Submodule.finiteDimensional_finset_sup {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type u_1} (s : ) (S : ι) [∀ (i : ι), FiniteDimensional K { x // x S i }] :
FiniteDimensional K { x // x }

The submodule generated by a finite supremum of finite dimensional submodules is finite-dimensional.

Note that strictly this only needs ∀ i ∈ s, FiniteDimensional K (S i), but that doesn't work well with typeclass search.

instance Submodule.finiteDimensional_iSup {K : Type u} {V : Type v} [] [] [Module K V] {ι : Sort u_1} [] (S : ι) [∀ (i : ι), FiniteDimensional K { x // x S i }] :
FiniteDimensional K { x // x ⨆ (i : ι), S i }

The submodule generated by a supremum of finite dimensional submodules, indexed by a finite sort is finite-dimensional.

theorem Submodule.finrank_quotient_add_finrank {K : Type u} {V : Type v} [] [] [Module K V] [] (s : ) :

In a finite-dimensional vector space, the dimensions of a submodule and of the corresponding quotient add up to the dimension of the space.

theorem Submodule.finrank_lt {K : Type u} {V : Type v} [] [] [Module K V] [] {s : } (h : s < ) :

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

theorem Submodule.finrank_sup_add_finrank_inf_eq {K : Type u} {V : Type v} [] [] [Module K V] (s : ) (t : ) [FiniteDimensional K { x // x s }] [FiniteDimensional K { x // x 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} [] [] [Module K V] (s : ) (t : ) [FiniteDimensional K { x // x s }] [FiniteDimensional K { x // x t }] :
theorem Submodule.eq_top_of_disjoint {K : Type u} {V : Type v} [] [] [Module K V] [] (s : ) (t : ) (hdim : FiniteDimensional.finrank K { x // x s } + FiniteDimensional.finrank K { x // x t } = ) (hdisjoint : Disjoint s t) :
s t =
theorem LinearEquiv.finiteDimensional {K : Type u} {V : Type v} [] [] [Module K V] {V₂ : Type v'} [] [Module K V₂] (f : V ≃ₗ[K] V₂) [] :

Finite dimensionality is preserved under linear equivalence.

instance finiteDimensional_finsupp {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type u_1} [] [] :
theorem FiniteDimensional.eq_of_le_of_finrank_le {K : Type u} {V : Type v} [] [] [Module K V] {S₁ : } {S₂ : } [FiniteDimensional K { x // x S₂ }] (hle : S₁ S₂) (hd : FiniteDimensional.finrank K { x // x S₂ } FiniteDimensional.finrank K { x // x S₁ }) :
S₁ = S₂
theorem FiniteDimensional.eq_of_le_of_finrank_eq {K : Type u} {V : Type v} [] [] [Module K V] {S₁ : } {S₂ : } [FiniteDimensional K { x // x S₂ }] (hle : S₁ S₂) (hd : FiniteDimensional.finrank K { x // x S₁ } = FiniteDimensional.finrank K { x // x S₂ }) :
S₁ = S₂

If a submodule is less than or equal to a finite-dimensional submodule with the same dimension, they are equal.

noncomputable def FiniteDimensional.LinearEquiv.quotEquivOfEquiv {K : Type u} {V : Type v} [] [] [Module K V] {V₂ : Type v'} [] [Module K V₂] [] [] {p : Subspace K V} {q : Subspace K V₂} (f₁ : { x // x p } ≃ₗ[K] { x // x 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} [] [] [Module K V] [] {p : Subspace K V} {q : Subspace K V} (f : (V p) ≃ₗ[K] { x // x q }) :
(V q) ≃ₗ[K] { x // x p }

Given the subspaces p q, if p.quotient ≃ₗ[K] q, then q.quotient ≃ₗ[K] p

Instances For
theorem LinearMap.surjective_of_injective {K : Type u} {V : Type v} [] [] [Module K V] [] {f : V →ₗ[K] V} (hinj : ) :

On a finite-dimensional space, an injective linear map is surjective.

theorem LinearMap.finiteDimensional_of_surjective {K : Type u} {V : Type v} [] [] [Module K V] {V₂ : Type v'} [] [Module K V₂] [] (f : V →ₗ[K] V₂) (hf : ) :

The image under an onto linear map of a finite-dimensional space is also finite-dimensional.

instance LinearMap.finiteDimensional_range {K : Type u} {V : Type v} [] [] [Module K V] {V₂ : Type v'} [] [Module K V₂] [] (f : V →ₗ[K] V₂) :

The range of a linear map defined on a finite-dimensional space is also finite-dimensional.

theorem LinearMap.injective_iff_surjective {K : Type u} {V : Type v} [] [] [Module K V] [] {f : V →ₗ[K] V} :

On a finite-dimensional space, a linear map is injective if and only if it is surjective.

theorem LinearMap.ker_eq_bot_iff_range_eq_top {K : Type u} {V : Type v} [] [] [Module K V] [] {f : V →ₗ[K] V} :
theorem LinearMap.mul_eq_one_of_mul_eq_one {K : Type u} {V : Type v} [] [] [Module K V] [] {f : V →ₗ[K] V} {g : V →ₗ[K] V} (hfg : f * g = 1) :
g * f = 1

In a finite-dimensional space, if linear maps are inverse to each other on one side then they are also inverse to each other on the other side.

theorem LinearMap.mul_eq_one_comm {K : Type u} {V : Type v} [] [] [Module K V] [] {f : V →ₗ[K] V} {g : V →ₗ[K] V} :
f * g = 1 g * f = 1

In a finite-dimensional space, linear maps are inverse to each other on one side if and only if they are inverse to each other on the other side.

theorem LinearMap.comp_eq_id_comm {K : Type u} {V : Type v} [] [] [Module K V] [] {f : V →ₗ[K] V} {g : V →ₗ[K] V} :
= LinearMap.id = LinearMap.id

In a finite-dimensional space, linear maps are inverse to each other on one side if and only if they are inverse to each other on the other side.

theorem LinearMap.finrank_range_add_finrank_ker {K : Type u} {V : Type v} [] [] [Module K V] {V₂ : Type v'} [] [Module K V₂] [] (f : V →ₗ[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.

noncomputable def LinearEquiv.ofInjectiveEndo {K : Type u} {V : Type v} [] [] [Module K V] [] (f : V →ₗ[K] V) (h_inj : ) :

The linear equivalence corresponding to an injective endomorphism.

Instances For
@[simp]
theorem LinearEquiv.coe_ofInjectiveEndo {K : Type u} {V : Type v} [] [] [Module K V] [] (f : V →ₗ[K] V) (h_inj : ) :
↑() = f
@[simp]
theorem LinearEquiv.ofInjectiveEndo_right_inv {K : Type u} {V : Type v} [] [] [Module K V] [] (f : V →ₗ[K] V) (h_inj : ) :
f * ↑() = 1
@[simp]
theorem LinearEquiv.ofInjectiveEndo_left_inv {K : Type u} {V : Type v} [] [] [Module K V] [] (f : V →ₗ[K] V) (h_inj : ) :
↑() * f = 1
theorem LinearMap.isUnit_iff_ker_eq_bot {K : Type u} {V : Type v} [] [] [Module K V] [] (f : V →ₗ[K] V) :
theorem LinearMap.isUnit_iff_range_eq_top {K : Type u} {V : Type v} [] [] [Module K V] [] (f : V →ₗ[K] V) :
theorem finrank_zero_iff_forall_zero {K : Type u} {V : Type v} [] [] [Module K V] [] :
∀ (x : V), x = 0
noncomputable def basisOfFinrankZero {K : Type u} {V : Type v} [] [] [Module K V] [] {ι : Type u_1} [] (hV : ) :
Basis ι K V

If ι is an empty type and V is zero-dimensional, there is a unique ι-indexed basis.

Instances For
theorem LinearMap.injective_iff_surjective_of_finrank_eq_finrank {K : Type u} {V : Type v} [] [] [Module K V] {V₂ : Type v'} [] [Module K V₂] [] [] (H : ) {f : V →ₗ[K] V₂} :
theorem LinearMap.ker_eq_bot_iff_range_eq_top_of_finrank_eq_finrank {K : Type u} {V : Type v} [] [] [Module K V] {V₂ : Type v'} [] [Module K V₂] [] [] (H : ) {f : V →ₗ[K] V₂} :
noncomputable def LinearMap.linearEquivOfInjective {K : Type u} {V : Type v} [] [] [Module K V] {V₂ : Type v'} [] [Module K V₂] [] [] (f : V →ₗ[K] V₂) (hf : ) (hdim : ) :
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} [] [] [Module K V] {V₂ : Type v'} [] [Module K V₂] [] [] {f : V →ₗ[K] V₂} (hf : ) (hdim : ) (x : V) :
↑() x = f x
theorem FiniteDimensional.exists_mul_eq_one (F : Type u_1) {K : Type u_2} [] [Ring K] [] [Algebra F K] [] {x : K} (H : x 0) :
y, x * y = 1
noncomputable def divisionRingOfFiniteDimensional (F : Type u_1) (K : Type u_2) [] [h : Ring K] [] [Algebra F K] [] :

A domain that is module-finite as an algebra over a field is a division ring.

Instances For
noncomputable def fieldOfFiniteDimensional (F : Type u_1) (K : Type u_2) [] [h : ] [] [Algebra F K] [] :

An integral domain that is module-finite as an algebra over a field is a field.

Instances For
theorem Submodule.finrank_mono {K : Type u} {V : Type v} [] [] [Module K V] [] :
Monotone fun s => FiniteDimensional.finrank K { x // x s }
theorem Submodule.finrank_lt_finrank_of_lt {K : Type u} {V : Type v} [] [] [Module K V] {s : } {t : } [FiniteDimensional K { x // x t }] (hst : s < t) :
theorem Submodule.finrank_strictMono {K : Type u} {V : Type v} [] [] [Module K V] [] :
StrictMono fun s => FiniteDimensional.finrank K { x // x s }
theorem Submodule.finrank_add_eq_of_isCompl {K : Type u} {V : Type v} [] [] [Module K V] [] {U : } {W : } (h : IsCompl U W) :
theorem finrank_span_singleton {K : Type u} {V : Type v} [] [] [Module K V] {v : V} (hv : v 0) :
theorem exists_smul_eq_of_finrank_eq_one {K : Type u} {V : Type v} [] [] [Module K V] (h : ) {x : V} (hx : x 0) (y : V) :
c, c x = y

In a one-dimensional space, any vector is a multiple of any nonzero vector

theorem Set.finrank_mono {K : Type u} {V : Type v} [] [] [Module K V] [] {s : Set V} {t : Set V} (h : s t) :
theorem span_eq_top_of_linearIndependent_of_card_eq_finrank {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type u_1} [hι : ] [] {b : ιV} (lin_ind : ) (card_eq : ) :
@[simp]
theorem basisOfLinearIndependentOfCardEqFinrank_repr_apply {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type u_1} [] [] {b : ιV} (lin_ind : ) (card_eq : ) :
∀ (a : V), (basisOfLinearIndependentOfCardEqFinrank lin_ind card_eq).repr a = ↑(LinearIndependent.repr lin_ind) (↑(LinearMap.codRestrict () LinearMap.id (_ : ∀ (x : V), LinearMap.id x )) a)
noncomputable def basisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type u_1} [] [] {b : ιV} (lin_ind : ) (card_eq : ) :
Basis ι K V

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

Instances For
@[simp]
theorem coe_basisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [] [] [Module K V] {ι : Type u_1} [] [] {b : ιV} (lin_ind : ) (card_eq : ) :
@[simp]
theorem finsetBasisOfLinearIndependentOfCardEqFinrank_repr_apply {K : Type u} {V : Type v} [] [] [Module K V] {s : } (hs : ) (lin_ind : LinearIndependent K Subtype.val) (card_eq : ) :
∀ (a : V), (finsetBasisOfLinearIndependentOfCardEqFinrank hs lin_ind card_eq).repr a = ↑(LinearIndependent.repr lin_ind) (↑(LinearMap.codRestrict (Submodule.span K (Set.range Subtype.val)) LinearMap.id (_ : ∀ (x : V), LinearMap.id x Submodule.span K (Set.range Subtype.val))) a)
noncomputable def finsetBasisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [] [] [Module K V] {s : } (hs : ) (lin_ind : LinearIndependent K Subtype.val) (card_eq : ) :
Basis { x // x s } K V

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

Instances For
@[simp]
theorem coe_finsetBasisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [] [] [Module K V] {s : } (hs : ) (lin_ind : LinearIndependent K Subtype.val) (card_eq : ) :
↑(finsetBasisOfLinearIndependentOfCardEqFinrank hs lin_ind card_eq) = Subtype.val
@[simp]
theorem setBasisOfLinearIndependentOfCardEqFinrank_repr_apply {K : Type u} {V : Type v} [] [] [Module K V] {s : Set V} [Nonempty s] [Fintype s] (lin_ind : LinearIndependent K Subtype.val) (card_eq : ) :
∀ (a : V), (setBasisOfLinearIndependentOfCardEqFinrank lin_ind card_eq).repr a = ↑(LinearIndependent.repr lin_ind) (↑(LinearMap.codRestrict (Submodule.span K (Set.range Subtype.val)) LinearMap.id (_ : ∀ (x : V), LinearMap.id x Submodule.span K (Set.range Subtype.val))) a)
noncomputable def setBasisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [] [] [Module K V] {s : Set V} [Nonempty s] [Fintype s] (lin_ind : LinearIndependent K Subtype.val) (card_eq : ) :
Basis (s) K V

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

Instances For
@[simp]
theorem coe_setBasisOfLinearIndependentOfCardEqFinrank {K : Type u} {V : Type v} [] [] [Module K V] {s : Set V} [Nonempty s] [Fintype s] (lin_ind : LinearIndependent K Subtype.val) (card_eq : ) :
↑(setBasisOfLinearIndependentOfCardEqFinrank lin_ind card_eq) = Subtype.val

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

theorem finrank_eq_one_iff_of_nonzero {K : Type u} {V : Type v} [] [] [Module K V] (v : V) (nz : v 0) :

A vector space with a nonzero vector v has dimension 1 iff v spans.

theorem finrank_eq_one_iff_of_nonzero' {K : Type u} {V : Type v} [] [] [Module K V] (v : V) (nz : v 0) :
∀ (w : V), c, c v = w

A module with a nonzero vector v has dimension 1 iff every vector is a multiple of v.

theorem finrank_eq_one_iff {K : Type u} {V : Type v} [] [] [Module K V] (ι : Type u_1) [] :
Nonempty (Basis ι K V)

A module has dimension 1 iff there is some v : V so {v} is a basis.

theorem finrank_eq_one_iff' {K : Type u} {V : Type v} [] [] [Module K V] :
v _n, ∀ (w : V), c, c v = w

A module has dimension 1 iff there is some nonzero v : V so every vector is a multiple of v.

theorem finrank_le_one_iff {K : Type u} {V : Type v} [] [] [Module K V] [] :
v, ∀ (w : V), c, c v = w

A finite dimensional module has dimension at most 1 iff there is some v : V so every vector is a multiple of v.

theorem Submodule.finrank_le_one_iff_isPrincipal {K : Type u} {V : Type v} [] [] [Module K V] (W : ) [FiniteDimensional K { x // x W }] :
theorem Module.finrank_le_one_iff_top_isPrincipal {K : Type u} {V : Type v} [] [] [Module K V] [] :
theorem surjective_of_nonzero_of_finrank_eq_one {K : Type u} {V : Type v} [] [] [Module K V] {W : Type u_1} {A : Type u_2} [] [Module A V] [] [Module K W] [Module A W] [] (h : ) {f : V →ₗ[A] W} (w : f 0) :
theorem is_simple_module_of_finrank_eq_one {K : Type u} {V : Type v} [] [] [Module K V] {A : Type u_1} [] [Module A V] [SMul K A] [] (h : ) :

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

theorem Subalgebra.finiteDimensional_toSubmodule {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] {S : } :
FiniteDimensional F { x // x Subalgebra.toSubmodule S } FiniteDimensional F { x // x S }

A Subalgebra is FiniteDimensional iff it is FiniteDimensional as a submodule.

theorem FiniteDimensional.of_subalgebra_toSubmodule {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] {S : } :
FiniteDimensional F { x // x Subalgebra.toSubmodule S }FiniteDimensional F { x // x S }

Alias of the forward direction of Subalgebra.finiteDimensional_toSubmodule.

A Subalgebra is FiniteDimensional iff it is FiniteDimensional as a submodule.

theorem FiniteDimensional.subalgebra_toSubmodule {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] {S : } :
FiniteDimensional F { x // x S }FiniteDimensional F { x // x Subalgebra.toSubmodule S }

Alias of the reverse direction of Subalgebra.finiteDimensional_toSubmodule.

A Subalgebra is FiniteDimensional iff it is FiniteDimensional as a submodule.

instance FiniteDimensional.finiteDimensional_subalgebra {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] [] (S : ) :
FiniteDimensional F { x // x S }
instance Subalgebra.finiteDimensional_bot {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] :
theorem Subalgebra.eq_bot_of_rank_le_one {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] {S : } (h : Module.rank F { x // x S } 1) :
S =
theorem Subalgebra.eq_bot_of_finrank_one {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] {S : } (h : FiniteDimensional.finrank F { x // x S } = 1) :
S =
@[simp]
theorem Subalgebra.rank_eq_one_iff {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] [] {S : } :
Module.rank F { x // x S } = 1 S =
@[simp]
theorem Subalgebra.finrank_eq_one_iff {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] [] {S : } :
FiniteDimensional.finrank F { x // x S } = 1 S =
theorem Subalgebra.bot_eq_top_iff_rank_eq_one {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] [] :
= 1
theorem Subalgebra.bot_eq_top_iff_finrank_eq_one {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] [] :
@[simp]
theorem Subalgebra.bot_eq_top_of_rank_eq_one {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] [] :
= 1

Alias of the reverse direction of Subalgebra.bot_eq_top_iff_rank_eq_one.

@[simp]
theorem Subalgebra.bot_eq_top_of_finrank_eq_one {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] [] :

Alias of the reverse direction of Subalgebra.bot_eq_top_iff_finrank_eq_one.

theorem Subalgebra.isSimpleOrder_of_finrank {F : Type u_1} {E : Type u_2} [] [Ring E] [Algebra F E] (hr : ) :
theorem Module.End.exists_ker_pow_eq_ker_pow_succ {K : Type u} {V : Type v} [] [] [Module K V] [] (f : ) :
k, LinearMap.ker (f ^ k) = LinearMap.ker (f ^ )
theorem Module.End.ker_pow_constant {K : Type u} {V : Type v} [] [] [Module K V] {f : } {k : } (h : LinearMap.ker (f ^ k) = LinearMap.ker (f ^ )) (m : ) :
LinearMap.ker (f ^ k) = LinearMap.ker (f ^ (k + m))
theorem Module.End.ker_pow_eq_ker_pow_finrank_of_le {K : Type u} {V : Type v} [] [] [Module K V] [] {f : } {m : } (hm : ) :
theorem Module.End.ker_pow_le_ker_pow_finrank {K : Type u} {V : Type v} [] [] [Module K V] [] (f : ) (m : ) :
theorem cardinal_mk_eq_cardinal_mk_field_pow_rank (K : Type u) (V : Type u) [] [] [Module K V] [] :
= ^
theorem cardinal_lt_aleph0_of_finiteDimensional (K : Type u) (V : Type u) [] [] [Module K V] [] [] :