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

Commit 45477c8

Browse files
committed
feat(analysis/normed_space/real_inner_product): orthogonal subspaces (#3369)
Define the subspace of vectors orthogonal to a given subspace and prove some basic properties of it, building on the existing results about minimizers. This is in preparation for doing similar things in Euclidean geometry (working with the affine subspace through a given point and orthogonal to a given affine subspace, for example).
1 parent 2ae7ad8 commit 45477c8

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

src/analysis/normed_space/real_inner_product.lean

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,4 +921,66 @@ begin
921921
exacts [submodule.convex _, hv]
922922
end
923923

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+
924986
end orthogonal

0 commit comments

Comments
 (0)