Dual vector spaces #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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.dual_pairing 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
.linear_map.dual_map
ismodule.dual.transpose
of a given linear map, for dot notation.linear_equiv.dual_map
is for the dual of an equivalence.
- Bases:
basis.to_dual
produces the mapM →ₗ[R] dual R M
associated to a basis for anR
-moduleM
.basis.to_dual_equiv
is the equivalenceM ≃ₗ[R] dual R M
associated to a finite basis.basis.dual_basis
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.dual_restrict W
is the transposedual R M →ₗ[R] dual R W
of the inclusion map.submodule.dual_annihilator W
is the kernel ofW.dual_restrict
. That is, it is the submodule ofdual R M
whose elements all annihilateW
.submodule.dual_restrict_comap W'
is the dual annihilator ofW' : submodule R (dual R M)
, pulled back alongmodule.dual.eval R M
.submodule.dual_copairing W
is the canonical pairing betweenW.dual_annihilator
andM ⧸ W
. It is nondegenerate for vector spaces (subspace.dual_copairing_nondegenerate
).submodule.dual_pairing W
is the canonical pairing betweendual R M ⧸ W.dual_annihilator
andW
. It is nondegenerate for vector spaces (subspace.dual_pairing_nondegenerate
).
- Vector spaces:
subspace.dual_lift W
is an arbitrary section (using choice) ofsubmodule.dual_restrict W
.
Main results #
- Bases:
module.dual_basis.basis
andmodule.dual_basis.coe_basis
: ife
andε
form a dual pair, thene
is a basis.module.dual_basis.coe_dual_basis
: ife
andε
form a dual pair, thenε
is a basis.
- Annihilators:
module.dual_annihilator_gc R M
is the antitone Galois correspondence betweensubmodule.dual_annihilator
andsubmodule.dual_coannihilator
.linear_map.ker_dual_map_eq_dual_annihilator_range
says thatf.dual_map.ker = f.range.dual_annihilator
linear_map.range_dual_map_eq_dual_annihilator_ker_of_subtype_range_surjective
says thatf.dual_map.range = f.ker.dual_annihilator
; this is specialized to vector spaces inlinear_map.range_dual_map_eq_dual_annihilator_ker
.submodule.dual_quot_equiv_dual_annihilator
is the equivalencedual R (M ⧸ W) ≃ₗ[R] W.dual_annihilator
- Vector spaces:
subspace.dual_annihilator_dual_coannihilator_eq
says that the double dual annihilator, pulled back groundmodule.dual.eval
, is the original submodule.subspace.dual_annihilator_gci
says thatmodule.dual_annihilator_gc R M
is an antitone Galois coinsertion.subspace.quot_annihilator_equiv
is the equivalencedual K V ⧸ W.dual_annihilator ≃ₗ[K] dual K W
.linear_map.dual_pairing_nondegenerate
says thatmodule.dual_pairing
is nondegenerate.subspace.is_compl_dual_annihilator
says that the dual annihilator carries complementary subspaces to complementary subspaces.
- Finite-dimensional vector spaces:
module.eval_equiv
is the equivalenceV ≃ₗ[K] dual K (dual K V)
module.map_eval_equiv
is the order isomorphism between subspaces ofV
and subspaces ofdual K (dual K V)
.subspace.quot_dual_equiv_annihilator W
is the equivalence(dual K V ⧸ W.dual_lift.range) ≃ₗ[K] W.dual_annihilator
, whereW.dual_lift.range
is a copy ofdual K W
insidedual K V
.subspace.quot_equiv_annihilator W
is the equivalence(V ⧸ W) ≃ₗ[K] W.dual_annihilator
subspace.dual_quot_distrib W
is an equivalencedual K (V₁ ⧸ W) ≃ₗ[K] dual K V₁ ⧸ W.dual_lift.range
from an arbitrary choice of splitting ofV₁
.
TODO #
Erdös-Kaplansky theorem about the dimension of a dual vector space in case of infinite dimension.
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)
The canonical pairing of a vector space and its algebraic dual.
Equations
Equations
Equations
Maps a module M to the dual of the dual of M. See module.erange_coe
and
module.eval_equiv
.
Equations
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 = (linear_map.llcomp R M M' R).flip
Taking duals distributes over products.
Equations
Given a linear map f : M₁ →ₗ[R] M₂
, f.dual_map
is the linear map between the dual of
M₂
and M₁
such that it maps the functional φ
to φ ∘ f
.
Equations
If a linear map is surjective, then its dual is injective.
The linear_equiv
version of linear_map.dual_map
.
The linear map from a vector space equipped with basis to its dual vector space, taking basis elements to corresponding dual basis elements.
h.to_dual_flip v
is the linear map sending w
to h.to_dual w v
.
Equations
- b.to_dual_flip m = ⇑(b.to_dual.flip) m
A vector space is linearly equivalent to its dual space.
Equations
Maps a basis for V
to a basis for the dual space.
Equations
- b.dual_basis = b.map b.to_dual_equiv
A module with a basis is linearly equivalent to the dual of its dual space.
Equations
- b.eval_equiv = linear_equiv.of_bijective (module.dual.eval R M) _
simp
normal form version of total_dual_basis
A vector space is linearly equivalent to the dual of its dual space.
Equations
- module.eval_equiv K V = linear_equiv.of_bijective (module.dual.eval K V) _
The isomorphism module.eval_equiv
induces an order isomorphism on subspaces.
Equations
- eval : ∀ (i j : ι), ⇑(ε i) (e j) = ite (i = j) 1 0
- total : ∀ {m : M}, (∀ (i : ι), ⇑(ε i) m = 0) → m = 0
- finite : (∀ (m : M), {i : ι | ⇑(ε i) m ≠ 0}.finite) . "use_finite_instance"
e
and ε
have characteristic properties of a basis and its dual
The coefficients of v
on the basis e
linear combinations of elements of e
.
This is a convenient abbreviation for finsupp.total _ M R e l
Equations
- module.dual_bases.lc e l = l.sum (λ (i : ι) (a : R), a • e i)
For any m : M n, \sum_{p ∈ Q n} (ε p m) • e p = m
(h : dual_bases e ε).basis
shows the family of vectors e
forms a basis.
The dual_restrict
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
The dual_annihilator
of a submodule W
is the set of linear maps φ
such
that φ w = 0
for all w ∈ W
.
Equations
That $\operatorname{ker}(\iota^* : V^* \to W^*) = \operatorname{ann}(W)$. This is the definition of the dual annihilator of the submodule $W$.
The dual_annihilator
of a submodule of the dual space pulled back along the evaluation map
module.dual.eval
.
Equations
See also subspace.dual_annihilator_inf_eq
for vector subspaces.
See also subspace.dual_annihilator_infi_eq
for vector subspaces when ι
is finite.
submodule.dual_annihilator
and submodule.dual_coannihilator
form a Galois coinsertion.
Equations
- subspace.dual_annihilator_gci K V = {choice := λ (W : (submodule K (module.dual K V))ᵒᵈ) (h : W ≤ (⇑order_dual.to_dual ∘ submodule.dual_annihilator) ((submodule.dual_coannihilator ∘ ⇑order_dual.of_dual) W)), submodule.dual_coannihilator W, gc := _, u_l_le := _, choice_eq := _}
Given a subspace W
of V
and an element of its dual φ
, dual_lift W φ
is
an arbitrary extension of φ
to an element of the dual of V
.
That is, dual_lift W φ
sends w ∈ W
to φ x
and x
in a chosen complement of W
to 0
.
Equations
- W.dual_lift = let h : {x // is_compl W x} := classical.indefinite_description (λ (x : submodule K V), is_compl W x) _ in (linear_map.of_is_compl_prod _).comp (linear_map.inl K (module.dual K ↥W) (↥(h.val) →ₗ[K] K))
The quotient by the dual_annihilator
of a subspace is isomorphic to the
dual of that subspace.
The natural isomorphism from the dual of a subspace W
to W.dual_lift.range
.
The quotient by the dual is isomorphic to its dual annihilator.
The quotient by a subspace is isomorphic to its dual annihilator.
Given a submodule, corestrict to the pairing on M ⧸ W
by
simultaneously restricting to W.dual_annihilator
.
See subspace.dual_copairing_nondegenerate
.
Equations
- W.dual_copairing = (W.liftq ((module.dual_pairing R M).dom_restrict W.dual_annihilator).flip _).flip
Given a submodule, restrict to the pairing on W
by
simultaneously corestricting to module.dual R M ⧸ W.dual_annihilator
.
This is submodule.dual_restrict
factored through the quotient by its kernel (which
is W.dual_annihilator
by definition).
See subspace.dual_pairing_nondegenerate
.
Equations
- W.dual_pairing = W.dual_annihilator.liftq W.dual_restrict _
That $\operatorname{im}(q^* : (V/W)^* \to V^*) = \operatorname{ann}(W)$.
Equivalence $(M/W)^* \approx \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.dual_copairing
.
Equations
For vector spaces, f.dual_map
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.dual_lift.range
with W
. Note that this depends on a choice of splitting of V₁
.
f.dual_map
is injective if and only if f
is surjective
f.dual_map
is bijective if and only if f
is
The canonical linear map from dual M ⊗ dual N
to dual (M ⊗ N)
,
sending f ⊗ g
to the composition of tensor_product.map f g
with
the natural isomorphism R ⊗ R ≃ R
.
Equations
- tensor_product.dual_distrib R M N = ↑(tensor_product.lid R R).comp_right.comp (tensor_product.hom_tensor_hom_map R M N R R)
An inverse to dual_tensor_dual_map
given bases.
Equations
- tensor_product.dual_distrib_inv_of_basis b c = finset.univ.sum (λ (i : ι), finset.univ.sum (λ (j : κ), (⇑((linear_map.ring_lmap_equiv_self R ℕ (tensor_product R (module.dual R M) (module.dual R N))).symm) (⇑(b.dual_basis) i ⊗ₜ[R] ⇑(c.dual_basis) j)).comp ((⇑linear_map.applyₗ (⇑c j)).comp ((⇑linear_map.applyₗ (⇑b i)).comp (tensor_product.lcurry R M N R)))))
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 tensor_product.map f g
with the natural
isomorphism R ⊗ R ≃ R
.
Equations
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 tensor_product.map f g
with the natural
isomorphism R ⊗ R ≃ R
.