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.instInhabited 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.id.flip
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.llcomp R M M' R).flip
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
- f.dualMap = 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
- f.dualMap = { toLinearMap := (↑f).dualMap, invFun := ⇑(↑f.symm).dualMap, left_inv := ⋯, right_inv := ⋯ }
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.
Instances For
Alias of Basis.toDual_linearCombination_left
.
Alias of Basis.toDual_linearCombination_right
.
h.toDual_flip v
is the linear map sending w
to h.toDual w v
.
Equations
- b.toDualFlip m = b.toDual.flip m
Instances For
A vector space is linearly equivalent to its dual space.
Equations
- b.toDualEquiv = LinearEquiv.ofBijective b.toDual ⋯
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
- b.dualBasis = b.map b.toDualEquiv
Instances For
Alias of Basis.linearCombination_dualBasis
.
simp
normal form version of linearCombination_dualBasis
Alias of Basis.linearCombination_coord
.
simp
normal form version of linearCombination_dualBasis
A reflexive module is one for which the natural map to its double dual is a bijection.
Any finitely-generated projective module (and thus any finite-dimensional vector space)
is reflexive. See Module.instIsReflexiveOfFiniteOfProjective
.
- 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
See also Module.instFiniteDimensionalOfIsReflexive
for the converse over a field.
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) ⋯
Instances For
The dual of a reflexive module is reflexive.
A direct summand of a reflexive module is reflexive.
The isomorphism Module.evalEquiv
induces an order isomorphism on subspaces.
Equations
Instances For
Consider a reflexive module and a set s
of linear forms. If for any z ≠ 0
there exists
f ∈ s
such that f z ≠ 0
, then s
spans the whole dual space.
Given some linear forms $L_1, ..., L_n, K$ over a vector space $E$, if $\bigcap_{i=1}^n \mathrm{ker}(L_i) \subseteq \mathrm{ker}(K)$, then $K$ is in the space generated by $L_1, ..., L_n$.
Try using Set.toFinite
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
Instances For
The coefficients of v
on the basis e
Equations
- h.coeffs m = { support := ⋯.toFinset, toFun := fun (i : ι) => (ε i) m, mem_support_toFun := ⋯ }
Instances For
linear combinations of elements of e
.
This is a convenient abbreviation for Finsupp.linearCombination R e l
Equations
- Module.DualBases.lc e l = l.sum 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
- h.basis = { repr := { toFun := h.coeffs, map_add' := ⋯, map_smul' := ⋯, invFun := Module.DualBases.lc e, left_inv := ⋯, right_inv := ⋯ } }
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
- W.dualRestrict = LinearMap.domRestrict' W
Instances For
The dualAnnihilator
of a submodule W
is the set of linear maps φ
such
that φ w = 0
for all w ∈ W
.
Equations
- W.dualAnnihilator = LinearMap.ker W.dualRestrict
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
- Φ.dualCoannihilator = Submodule.comap (Module.Dual.eval R M) Φ.dualAnnihilator
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
- W.dualLift = (Classical.choose ⋯).dualMap
Instances For
The quotient by the dualAnnihilator
of a subspace is isomorphic to the
dual of that subspace.
Equations
- W.quotAnnihilatorEquiv = ((LinearMap.ker (Submodule.dualRestrict W)).quotEquivOfEq (Submodule.dualAnnihilator W) ⋯).symm.trans ((Submodule.dualRestrict W).quotKerEquivOfSurjective ⋯)
Instances For
The natural isomorphism from the dual of a subspace W
to W.dualLift.range
.
Equations
- W.dualEquivDual = LinearEquiv.ofInjective W.dualLift ⋯
Instances For
The quotient by the dual is isomorphic to its dual annihilator.
Equations
- W.quotDualEquivAnnihilator = FiniteDimensional.LinearEquiv.quotEquivOfQuotEquiv (W.quotAnnihilatorEquiv.trans W.dualEquivDual)
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
- W.dualCopairing = (W.liftQ ((Module.dualPairing R M).domRestrict W.dualAnnihilator).flip ⋯).flip
Instances For
Equations
- W.instFunLikeSubtypeDualMemDualAnnihilator = { coe := fun (φ : ↥W.dualAnnihilator) => ⇑↑φ, coe_injective' := ⋯ }
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
- W.dualPairing = W.dualAnnihilator.liftQ W.dualRestrict ⋯
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
- W.dualQuotEquivDualAnnihilator = LinearEquiv.ofLinear (LinearMap.codRestrict W.dualAnnihilator W.mkQ.dualMap ⋯) W.dualCopairing ⋯ ⋯
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
- W.quotDualCoannihilatorToDual = W.dualCoannihilator.liftQ W.subtype.flip ⋯
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
- W.dualQuotDistrib = (Submodule.dualQuotEquivDualAnnihilator W).trans W.quotDualEquivAnnihilator.symm
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 = (↑(TensorProduct.lid R R)).compRight ∘ₗ TensorProduct.homTensorHomMap R M N R R
Instances For
Heterobasic version of TensorProduct.dualDistrib
Equations
- TensorProduct.AlgebraTensorModule.dualDistrib R A M N = (Algebra.TensorProduct.rid R A A).toLinearMap.compRight ∘ₗ TensorProduct.AlgebraTensorModule.homTensorHomMap R A A M N A R
Instances For
An inverse to TensorProduct.dualDistrib
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
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
.