@@ -5,6 +5,7 @@ Authors: Johan Commelin, Fabian Glöckle
5
5
-/
6
6
import linear_algebra.finite_dimensional
7
7
import linear_algebra.projection
8
+ import linear_algebra.sesquilinear_form
8
9
9
10
/-!
10
11
# Dual vector spaces
@@ -52,6 +53,12 @@ instance {S : Type*} [comm_ring S] {N : Type*} [add_comm_group N] [module S N] :
52
53
instance : add_monoid_hom_class (dual R M) M R :=
53
54
linear_map.add_monoid_hom_class
54
55
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
+
55
62
namespace dual
56
63
57
64
instance : inhabited (dual R M) := by dunfold dual; apply_instance
705
712
706
713
end finite_dimensional
707
714
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
+
708
739
end linear_map
0 commit comments