@@ -921,4 +921,66 @@ begin
921
921
exacts [submodule.convex _, hv]
922
922
end
923
923
924
+ /-- The subspace of vectors orthogonal to a given subspace. -/
925
+ def submodule.orthogonal (K : submodule ℝ α) : submodule ℝ α :=
926
+ { carrier := {v | ∀ u ∈ K, inner u v = 0 },
927
+ zero_mem' := λ _ _, inner_zero_right,
928
+ add_mem' := λ x y hx hy u hu, by rw [inner_add_right, hx u hu, hy u hu, add_zero],
929
+ smul_mem' := λ c x hx u hu, by rw [inner_smul_right, hx u hu, mul_zero] }
930
+
931
+ /-- When a vector is in `K.orthogonal`. -/
932
+ lemma submodule.mem_orthogonal (K : submodule ℝ α) (v : α) :
933
+ v ∈ K.orthogonal ↔ ∀ u ∈ K, inner u v = 0 :=
934
+ iff.rfl
935
+
936
+ /-- When a vector is in `K.orthogonal`, with the inner product the
937
+ other way round. -/
938
+ lemma submodule.mem_orthogonal' (K : submodule ℝ α) (v : α) :
939
+ v ∈ K.orthogonal ↔ ∀ u ∈ K, inner v u = 0 :=
940
+ by simp_rw [submodule.mem_orthogonal, inner_comm]
941
+
942
+ /-- A vector in `K` is orthogonal to one in `K.orthogonal`. -/
943
+ lemma submodule.inner_right_of_mem_orthogonal {u v : α} {K : submodule ℝ α} (hu : u ∈ K)
944
+ (hv : v ∈ K.orthogonal) : inner u v = 0 :=
945
+ (K.mem_orthogonal v).1 hv u hu
946
+
947
+ /-- A vector in `K.orthogonal` is orthogonal to one in `K`. -/
948
+ lemma submodule.inner_left_of_mem_orthogonal {u v : α} {K : submodule ℝ α} (hu : u ∈ K)
949
+ (hv : v ∈ K.orthogonal) : inner v u = 0 :=
950
+ inner_comm u v ▸ submodule.inner_right_of_mem_orthogonal hu hv
951
+
952
+ /-- `K` and `K.orthogonal` have trivial intersection. -/
953
+ lemma submodule.orthogonal_disjoint (K : submodule ℝ α) : disjoint K K.orthogonal :=
954
+ begin
955
+ simp_rw [submodule.disjoint_def, submodule.mem_orthogonal],
956
+ exact λ x hx ho, inner_self_eq_zero.1 (ho x hx)
957
+ end
958
+
959
+ /-- `K` is contained in `K.orthogonal.orthogonal`. -/
960
+ lemma submodule.le_orthogonal_orthogonal (K : submodule ℝ α) : K ≤ K.orthogonal.orthogonal :=
961
+ λ u hu v hv, submodule.inner_left_of_mem_orthogonal hu hv
962
+
963
+ /-- If `K` is complete, `K` and `K.orthogonal` span the whole
964
+ space. -/
965
+ lemma submodule.sup_orthogonal_of_is_complete {K : submodule ℝ α} (h : is_complete (K : set α)) :
966
+ K ⊔ K.orthogonal = ⊤ :=
967
+ begin
968
+ rw submodule.eq_top_iff',
969
+ intro x,
970
+ rw submodule.mem_sup,
971
+ rcases exists_norm_eq_infi_of_complete_subspace K h x with ⟨v, hv, hvm⟩,
972
+ rw norm_eq_infi_iff_inner_eq_zero K hv at hvm,
973
+ use [v, hv, x - v],
974
+ split,
975
+ { rw submodule.mem_orthogonal',
976
+ exact hvm },
977
+ { exact add_sub_cancel'_right _ _ }
978
+ end
979
+
980
+ /-- If `K` is complete, `K` and `K.orthogonal` are complements of each
981
+ other. -/
982
+ lemma submodule.is_compl_orthogonal_of_is_complete {K : submodule ℝ α}
983
+ (h : is_complete (K : set α)) : is_compl K K.orthogonal :=
984
+ ⟨K.orthogonal_disjoint, le_of_eq (submodule.sup_orthogonal_of_is_complete h).symm⟩
985
+
924
986
end orthogonal
0 commit comments