Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit d28a163

Browse files
committed
feat(linear_algebra/dual): define the algebraic dual pairing (#12827)
We define the pairing of algebraic dual and show that it is nondegenerate. Co-authored-by: Kevin Buzzard <k.buzzard@imperial.ac.uk>
1 parent c594e2b commit d28a163

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/linear_algebra/dual.lean

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Johan Commelin, Fabian Glöckle
55
-/
66
import linear_algebra.finite_dimensional
77
import linear_algebra.projection
8+
import linear_algebra.sesquilinear_form
89

910
/-!
1011
# Dual vector spaces
@@ -52,6 +53,12 @@ instance {S : Type*} [comm_ring S] {N : Type*} [add_comm_group N] [module S N] :
5253
instance : add_monoid_hom_class (dual R M) M R :=
5354
linear_map.add_monoid_hom_class
5455

56+
/-- The canonical pairing of a vector space and its algebraic dual. -/
57+
def dual_pairing (R M) [comm_semiring R] [add_comm_monoid M] [module R M] :
58+
module.dual R M →ₗ[R] M →ₗ[R] R := linear_map.id
59+
60+
@[simp] lemma dual_pairing_apply (v x) : dual_pairing R M v x = v x := rfl
61+
5562
namespace dual
5663

5764
instance : inhabited (dual R M) := by dunfold dual; apply_instance
@@ -705,4 +712,28 @@ end
705712

706713
end finite_dimensional
707714

715+
section field
716+
717+
variables {K V : Type*}
718+
variables [field K] [add_comm_group V] [module K V]
719+
720+
lemma dual_pairing_nondegenerate : (dual_pairing K V).nondegenerate :=
721+
begin
722+
refine ⟨separating_left_iff_ker_eq_bot.mpr ker_id, _⟩,
723+
intros x,
724+
contrapose,
725+
rintros hx : x ≠ 0,
726+
rw [not_forall],
727+
let f : V →ₗ[K] K := classical.some (linear_pmap.mk_span_singleton x 1 hx).to_fun.exists_extend,
728+
use [f],
729+
refine ne_zero_of_eq_one _,
730+
have h : f.comp (K ∙ x).subtype = (linear_pmap.mk_span_singleton x 1 hx).to_fun :=
731+
classical.some_spec (linear_pmap.mk_span_singleton x (1 : K) hx).to_fun.exists_extend,
732+
rw linear_map.ext_iff at h,
733+
convert h ⟨x, submodule.mem_span_singleton_self x⟩,
734+
exact (linear_pmap.mk_span_singleton_apply' K hx 1).symm,
735+
end
736+
737+
end field
738+
708739
end linear_map

src/linear_algebra/sesquilinear_form.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ Authors: Andreas Swerdlow
66
import algebra.module.linear_map
77
import linear_algebra.bilinear_map
88
import linear_algebra.matrix.basis
9-
import linear_algebra.dual
109
import linear_algebra.linear_pmap
1110

1211
/-!

0 commit comments

Comments
 (0)