Dual vector spaces #
The dual space of an $R$-module $M$ is the $R$-module of $R$-linear maps $M \to R$.
Main definitions #
- Duals and transposes:
Module.Dual R M
defines the dual space of theR
-moduleM
, asM →ₗ[R] R
.Module.dualPairing R M
is the canonical pairing betweenDual R M
andM
.Module.Dual.eval R M : M →ₗ[R] Dual R (Dual R)
is the canonical map to the double dual.Module.Dual.transpose
is the linear map fromM →ₗ[R] M'
toDual R M' →ₗ[R] Dual R M
.LinearMap.dualMap
isModule.Dual.transpose
of a given linear map, for dot notation.LinearEquiv.dualMap
is for the dual of an equivalence.
- Bases:
Basis.toDual
produces the mapM →ₗ[R] Dual R M
associated to a basis for anR
-moduleM
.Basis.toDual_equiv
is the equivalenceM ≃ₗ[R] Dual R M
associated to a finite basis.Basis.dualBasis
is a basis forDual R M
given a finite basis forM
.Module.dual_bases e ε
is the proposition that the familiese
of vectors andε
of dual vectors have the characteristic properties of a basis and a dual.
- Submodules:
Submodule.dualRestrict W
is the transposeDual R M →ₗ[R] Dual R W
of the inclusion map.Submodule.dualAnnihilator W
is the kernel ofW.dualRestrict
. That is, it is the submodule ofdual R M
whose elements all annihilateW
.Submodule.dualRestrict_comap W'
is the dual annihilator ofW' : Submodule R (Dual R M)
, pulled back alongModule.Dual.eval R M
.Submodule.dualCopairing W
is the canonical pairing betweenW.dualAnnihilator
andM ⧸ W
. It is nondegenerate for vector spaces (subspace.dualCopairing_nondegenerate
).Submodule.dualPairing W
is the canonical pairing betweenDual R M ⧸ W.dualAnnihilator
andW
. It is nondegenerate for vector spaces (Subspace.dualPairing_nondegenerate
).
- Vector spaces:
Subspace.dualLift W
is an arbitrary section (using choice) ofSubmodule.dualRestrict W
.
Main results #
- Bases:
Module.dualBasis.basis
andModule.dualBasis.coe_basis
: ife
andε
form a dual pair, thene
is a basis.Module.dualBasis.coe_dualBasis
: ife
andε
form a dual pair, thenε
is a basis.
- Annihilators:
Module.dualAnnihilator_gc R M
is the antitone Galois correspondence betweenSubmodule.dualAnnihilator
andSubmodule.dualConnihilator
.LinearMap.ker_dual_map_eq_dualAnnihilator_range
says thatf.dual_map.ker = f.range.dualAnnihilator
LinearMap.range_dual_map_eq_dualAnnihilator_ker_of_subtype_range_surjective
says thatf.dual_map.range = f.ker.dualAnnihilator
; this is specialized to vector spaces inLinearMap.range_dual_map_eq_dualAnnihilator_ker
.Submodule.dualQuotEquivDualAnnihilator
is the equivalenceDual R (M ⧸ W) ≃ₗ[R] W.dualAnnihilator
Submodule.quotDualCoannihilatorToDual
is the nondegenerate pairingM ⧸ W.dualCoannihilator →ₗ[R] Dual R W
. It is an perfect pairing whenR
is a field andW
is finite-dimensional.
- Vector spaces:
Subspace.dualAnnihilator_dualConnihilator_eq
says that the double dual annihilator, pulled back groundModule.Dual.eval
, is the original submodule.Subspace.dualAnnihilator_gci
says thatmodule.dualAnnihilator_gc R M
is an antitone Galois coinsertion.Subspace.quotAnnihilatorEquiv
is the equivalenceDual K V ⧸ W.dualAnnihilator ≃ₗ[K] Dual K W
.LinearMap.dualPairing_nondegenerate
says thatModule.dualPairing
is nondegenerate.Subspace.is_compl_dualAnnihilator
says that the dual annihilator carries complementary subspaces to complementary subspaces.
- Finite-dimensional vector spaces:
Module.evalEquiv
is the equivalenceV ≃ₗ[K] Dual K (Dual K V)
Module.mapEvalEquiv
is the order isomorphism between subspaces ofV
and subspaces ofDual K (Dual K V)
.Subspace.orderIsoFiniteCodimDim
is the antitone order isomorphism between finite-codimensional subspaces ofV
and finite-dimensional subspaces ofDual K V
.Subspace.orderIsoFiniteDimensional
is the antitone order isomorphism between subspaces of a finite-dimensional vector spaceV
and subspaces of its dual.Subspace.quotDualEquivAnnihilator W
is the equivalence(Dual K V ⧸ W.dualLift.range) ≃ₗ[K] W.dualAnnihilator
, whereW.dualLift.range
is a copy ofDual K W
insideDual K V
.Subspace.quotEquivAnnihilator W
is the equivalence(V ⧸ W) ≃ₗ[K] W.dualAnnihilator
Subspace.dualQuotDistrib W
is an equivalenceDual K (V₁ ⧸ W) ≃ₗ[K] Dual K V₁ ⧸ W.dualLift.range
from an arbitrary choice of splitting ofV₁
.
The dual space of an R-module M is the R-module of linear maps M → R
.
Equations
- Module.Dual R M = (M →ₗ[R] R)
Instances For
The canonical pairing of a vector space and its algebraic dual.
Equations
- Module.dualPairing R M = LinearMap.id
Instances For
Equations
- Module.Dual.instInhabitedDual R M = { default := 0 }
Maps a module M to the dual of the dual of M. See Module.erange_coe
and
Module.evalEquiv
.
Equations
- Module.Dual.eval R M = LinearMap.flip LinearMap.id
Instances For
The transposition of linear maps, as a linear map from M →ₗ[R] M'
to
Dual R M' →ₗ[R] Dual R M
.
Equations
- Module.Dual.transpose = LinearMap.flip (LinearMap.llcomp R M M' R)
Instances For
Taking duals distributes over products.
Equations
Instances For
Given a linear map f : M₁ →ₗ[R] M₂
, f.dualMap
is the linear map between the dual of
M₂
and M₁
such that it maps the functional φ
to φ ∘ f
.
Equations
- LinearMap.dualMap f = Module.Dual.transpose f
Instances For
If a linear map is surjective, then its dual is injective.
The Linear_equiv
version of LinearMap.dualMap
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The linear map from a vector space equipped with basis to its dual vector space, taking basis elements to corresponding dual basis elements.
Equations
- Basis.toDual b = (Basis.constr b ℕ) fun (v : ι) => (Basis.constr b ℕ) fun (w : ι) => if w = v then 1 else 0
Instances For
h.toDual_flip v
is the linear map sending w
to h.toDual w v
.
Equations
- Basis.toDualFlip b m = (LinearMap.flip (Basis.toDual b)) m
Instances For
A vector space is linearly equivalent to its dual space.
Equations
- Basis.toDualEquiv b = LinearEquiv.ofBijective (Basis.toDual b) (_ : Function.Injective ⇑(Basis.toDual b) ∧ Function.Surjective ⇑(Basis.toDual b))
Instances For
A vector space over a field is isomorphic to its dual if and only if it is finite-dimensional: a consequence of the Erdős-Kaplansky theorem.
Maps a basis for V
to a basis for the dual space.
Equations
- Basis.dualBasis b = Basis.map b (Basis.toDualEquiv b)
Instances For
Equations
- (_ : Module.Free R (Module.Dual R M)) = (_ : Module.Free R (Module.Dual R M))
Equations
- (_ : Module.Finite R (Module.Dual R M)) = (_ : Module.Finite R (Module.Dual R M))
simp
normal form version of total_dualBasis
Equations
- (_ : Subsingleton (Module.Dual K V)) = (_ : Subsingleton (Module.Dual K V))
Equations
- (_ : Nontrivial (Module.Dual K V)) = (_ : Nontrivial (Module.Dual K V))
A reflexive module is one for which the natural map to its double dual is a bijection.
Any finitely-generated free module (and thus any finite-dimensional vector space) is reflexive.
See Module.IsReflexive.of_finite_of_free
.
- bijective_dual_eval' : Function.Bijective ⇑(Module.Dual.eval R M)
A reflexive module is one for which the natural map to its double dual is a bijection.
Instances
Equations
- (_ : Module.IsReflexive R M) = (_ : Module.IsReflexive R M)
The bijection between a reflexive module and its double dual, bundled as a LinearEquiv
.
Equations
- Module.evalEquiv R M = LinearEquiv.ofBijective (Module.Dual.eval R M) (_ : Function.Bijective ⇑(Module.Dual.eval R M))
Instances For
The dual of a reflexive module is reflexive.
Equations
- (_ : Module.IsReflexive R (Module.Dual R M)) = (_ : Module.IsReflexive R (Module.Dual R M))
The isomorphism Module.evalEquiv
induces an order isomorphism on subspaces.
Equations
Instances For
Equations
- (_ : Module.IsReflexive R (M × N)) = (_ : Module.IsReflexive R (M × N))
Equations
- (_ : Module.IsReflexive R Mᵐᵒᵖ) = (_ : Module.IsReflexive R Mᵐᵒᵖ)
Equations
- (_ : Module.IsReflexive R (ULift.{w, u_2} M)) = (_ : Module.IsReflexive R (ULift.{w, u_2} M))
Try using Set.to_finite
to dispatch a Set.finite
goal.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- tacticUse_finite_instance = Lean.ParserDescr.node `tacticUse_finite_instance 1024 (Lean.ParserDescr.nonReservedSymbol "use_finite_instance" false)
Instances For
e
and ε
have characteristic properties of a basis and its dual
- finite : ∀ (m : M), Set.Finite {i : ι | (ε i) m ≠ 0}
Instances For
The coefficients of v
on the basis e
Equations
- One or more equations did not get rendered due to their size.
Instances For
linear combinations of elements of e
.
This is a convenient abbreviation for Finsupp.total _ M R e l
Equations
- Module.DualBases.lc e l = Finsupp.sum l fun (i : ι) (a : R) => a • e i
Instances For
For any m : M n, \sum_{p ∈ Q n} (ε p m) • e p = m
(h : DualBases e ε).basis
shows the family of vectors e
forms a basis.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The dualRestrict
of a submodule W
of M
is the linear map from the
dual of M
to the dual of W
such that the domain of each linear map is
restricted to W
.
Equations
Instances For
The dualAnnihilator
of a submodule W
is the set of linear maps φ
such
that φ w = 0
for all w ∈ W
.
Equations
Instances For
That $\operatorname{ker}(\iota^* : V^* \to W^*) = \operatorname{ann}(W)$. This is the definition of the dual annihilator of the submodule $W$.
The dualAnnihilator
of a submodule of the dual space pulled back along the evaluation map
Module.Dual.eval
.
Equations
Instances For
See also Subspace.dualAnnihilator_inf_eq
for vector subspaces.
See also Subspace.dualAnnihilator_iInf_eq
for vector subspaces when ι
is finite.
Submodule.dualAnnihilator
and Submodule.dualCoannihilator
form a Galois coinsertion.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given a subspace W
of V
and an element of its dual φ
, dualLift W φ
is
an arbitrary extension of φ
to an element of the dual of V
.
That is, dualLift W φ
sends w ∈ W
to φ x
and x
in a chosen complement of W
to 0
.
Equations
- Subspace.dualLift W = LinearMap.dualMap (Classical.choose (_ : ∃ (g : V →ₗ[K] ↥W), g ∘ₗ Submodule.subtype W = LinearMap.id))
Instances For
The quotient by the dualAnnihilator
of a subspace is isomorphic to the
dual of that subspace.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The natural isomorphism from the dual of a subspace W
to W.dualLift.range
.
Equations
Instances For
Equations
- (_ : FiniteDimensional K (Module.Dual K V)) = (_ : FiniteDimensional K (Module.Dual K V))
The quotient by the dual is isomorphic to its dual annihilator.
Equations
Instances For
The quotient by a subspace is isomorphic to its dual annihilator.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given a submodule, corestrict to the pairing on M ⧸ W
by
simultaneously restricting to W.dualAnnihilator
.
See Subspace.dualCopairing_nondegenerate
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Given a submodule, restrict to the pairing on W
by
simultaneously corestricting to Module.Dual R M ⧸ W.dualAnnihilator
.
This is Submodule.dualRestrict
factored through the quotient by its kernel (which
is W.dualAnnihilator
by definition).
See Subspace.dualPairing_nondegenerate
.
Equations
Instances For
That $\operatorname{im}(q^* : (V/W)^* \to V^*) = \operatorname{ann}(W)$.
Equivalence $(M/W)^* \cong \operatorname{ann}(W)$. That is, there is a one-to-one
correspondence between the dual of M ⧸ W
and those elements of the dual of M
that
vanish on W
.
The inverse of this is Submodule.dualCopairing
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The pairing between a submodule W
of a dual module Dual R M
and the quotient of
M
by the coannihilator of W
, which is always nondegenerate.
Equations
- One or more equations did not get rendered due to their size.
Instances For
For vector spaces, f.dualMap
is surjective if and only if f
is injective
For vector spaces, dual annihilators carry direct sum decompositions to direct sum decompositions.
For finite-dimensional vector spaces, one can distribute duals over quotients by identifying
W.dualLift.range
with W
. Note that this depends on a choice of splitting of V₁
.
Equations
Instances For
f.dualMap
is injective if and only if f
is surjective
f.dualMap
is bijective if and only if f
is
For any vector space, dualAnnihilator
and dualCoannihilator
gives an antitone order
isomorphism between the finite-codimensional subspaces in the vector space and the
finite-dimensional subspaces in its dual.
Equations
- One or more equations did not get rendered due to their size.
Instances For
For any finite-dimensional vector space, dualAnnihilator
and dualCoannihilator
give
an antitone order isomorphism between the subspaces in the vector space and the subspaces
in its dual.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The canonical linear map from Dual M ⊗ Dual N
to Dual (M ⊗ N)
,
sending f ⊗ g
to the composition of TensorProduct.map f g
with
the natural isomorphism R ⊗ R ≃ R
.
Equations
- TensorProduct.dualDistrib R M N = LinearMap.comp (LinearMap.compRight ↑(TensorProduct.lid R R)) (TensorProduct.homTensorHomMap R M N R R)
Instances For
Heterobasic version of TensorProduct.dualDistrib
Equations
- One or more equations did not get rendered due to their size.
Instances For
An inverse to dual_tensor_dual_map
given bases.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A linear equivalence between Dual M ⊗ Dual N
and Dual (M ⊗ N)
given bases for M
and N
.
It sends f ⊗ g
to the composition of TensorProduct.map f g
with the natural
isomorphism R ⊗ R ≃ R
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A linear equivalence between Dual M ⊗ Dual N
and Dual (M ⊗ N)
when M
and N
are finite free
modules. It sends f ⊗ g
to the composition of TensorProduct.map f g
with the natural
isomorphism R ⊗ R ≃ R
.