|
1 | 1 | /-
|
2 | 2 | Copyright (c) 2019 Zhouhang Zhou. All rights reserved.
|
3 | 3 | Released under Apache 2.0 license as described in the file LICENSE.
|
4 |
| -Authors: Zhouhang Zhou, Sébastien Gouëzel, Frédéric Dupuis |
| 4 | +Authors: Zhouhang Zhou, Sébastien Gouëzel, Frédéric Dupuis, Heather Macbeth |
5 | 5 | -/
|
6 | 6 |
|
7 | 7 | import linear_algebra.bilinear_form
|
@@ -1854,12 +1854,62 @@ end
|
1854 | 1854 | @[simp] lemma orthogonal_projection_mem_subspace_eq_self (v : K) : orthogonal_projection K v = v :=
|
1855 | 1855 | by { ext, apply eq_orthogonal_projection_of_mem_of_inner_eq_zero; simp }
|
1856 | 1856 |
|
| 1857 | +local attribute [instance] finite_dimensional_bot |
| 1858 | + |
| 1859 | +/-- The orthogonal projection onto the trivial submodule is the zero map. -/ |
| 1860 | +@[simp] lemma orthogonal_projection_bot : orthogonal_projection (⊥ : submodule 𝕜 E) = 0 := |
| 1861 | +begin |
| 1862 | + ext u, |
| 1863 | + apply eq_orthogonal_projection_of_mem_of_inner_eq_zero, |
| 1864 | + { simp }, |
| 1865 | + { intros w hw, |
| 1866 | + simp [(submodule.mem_bot 𝕜).mp hw] } |
| 1867 | +end |
| 1868 | + |
1857 | 1869 | variables (K)
|
1858 | 1870 |
|
1859 | 1871 | /-- The orthogonal projection has norm `≤ 1`. -/
|
1860 | 1872 | lemma orthogonal_projection_norm_le : ∥orthogonal_projection K∥ ≤ 1 :=
|
1861 | 1873 | linear_map.mk_continuous_norm_le _ (by norm_num) _
|
1862 | 1874 |
|
| 1875 | +variables (𝕜) |
| 1876 | + |
| 1877 | +lemma smul_orthogonal_projection_singleton {v : E} (w : E) : |
| 1878 | + (∥v∥ ^ 2 : 𝕜) • (orthogonal_projection (𝕜 ∙ v) w : E) = ⟪v, w⟫ • v := |
| 1879 | +begin |
| 1880 | + suffices : ↑(orthogonal_projection (𝕜 ∙ v) ((∥v∥ ^ 2 : 𝕜) • w)) = ⟪v, w⟫ • v, |
| 1881 | + { simpa using this }, |
| 1882 | + apply eq_orthogonal_projection_of_mem_of_inner_eq_zero, |
| 1883 | + { rw submodule.mem_span_singleton, |
| 1884 | + use ⟪v, w⟫ }, |
| 1885 | + { intros x hx, |
| 1886 | + obtain ⟨c, rfl⟩ := submodule.mem_span_singleton.mp hx, |
| 1887 | + have hv : ↑∥v∥ ^ 2 = ⟪v, v⟫ := by { norm_cast, simp [norm_sq_eq_inner] }, |
| 1888 | + simp [inner_sub_left, inner_smul_left, inner_smul_right, is_R_or_C.conj_div, mul_comm, hv, |
| 1889 | + inner_product_space.conj_sym, hv] } |
| 1890 | +end |
| 1891 | + |
| 1892 | +/-- Formula for orthogonal projection onto a single vector. -/ |
| 1893 | +lemma orthogonal_projection_singleton {v : E} (w : E) : |
| 1894 | + (orthogonal_projection (𝕜 ∙ v) w : E) = (⟪v, w⟫ / ∥v∥ ^ 2) • v := |
| 1895 | +begin |
| 1896 | + by_cases hv : v = 0, |
| 1897 | + { rw [hv, eq_orthogonal_projection_of_eq_submodule submodule.span_zero_singleton], |
| 1898 | + { simp }, |
| 1899 | + { apply_instance } }, |
| 1900 | + have hv' : ∥v∥ ≠ 0 := ne_of_gt (norm_pos_iff.mpr hv), |
| 1901 | + have key : ((∥v∥ ^ 2 : 𝕜)⁻¹ * ∥v∥ ^ 2) • ↑(orthogonal_projection (𝕜 ∙ v) w) |
| 1902 | + = ((∥v∥ ^ 2 : 𝕜)⁻¹ * ⟪v, w⟫) • v, |
| 1903 | + { simp [mul_smul, smul_orthogonal_projection_singleton 𝕜 w] }, |
| 1904 | + convert key; |
| 1905 | + field_simp [hv'] |
| 1906 | +end |
| 1907 | + |
| 1908 | +/-- Formula for orthogonal projection onto a single unit vector. -/ |
| 1909 | +lemma orthogonal_projection_unit_singleton {v : E} (hv : ∥v∥ = 1) (w : E) : |
| 1910 | + (orthogonal_projection (𝕜 ∙ v) w : E) = ⟪v, w⟫ • v := |
| 1911 | +by { rw ← smul_orthogonal_projection_singleton 𝕜 w, simp [hv] } |
| 1912 | + |
1863 | 1913 | end orthogonal_projection
|
1864 | 1914 |
|
1865 | 1915 | /-- The subspace of vectors orthogonal to a given subspace. -/
|
@@ -1889,6 +1939,14 @@ lemma submodule.inner_right_of_mem_orthogonal {u v : E} (hu : u ∈ K) (hv : v
|
1889 | 1939 | lemma submodule.inner_left_of_mem_orthogonal {u v : E} (hu : u ∈ K) (hv : v ∈ Kᗮ) : ⟪v, u⟫ = 0 :=
|
1890 | 1940 | by rw [inner_eq_zero_sym]; exact submodule.inner_right_of_mem_orthogonal hu hv
|
1891 | 1941 |
|
| 1942 | +/-- A vector in `(𝕜 ∙ u)ᗮ` is orthogonal to `u`. -/ |
| 1943 | +lemma inner_right_of_mem_orthogonal_singleton (u : E) {v : E} (hv : v ∈ (𝕜 ∙ u)ᗮ) : ⟪u, v⟫ = 0 := |
| 1944 | +submodule.inner_right_of_mem_orthogonal (submodule.mem_span_singleton_self u) hv |
| 1945 | + |
| 1946 | +/-- A vector in `(𝕜 ∙ u)ᗮ` is orthogonal to `u`. -/ |
| 1947 | +lemma inner_left_of_mem_orthogonal_singleton (u : E) {v : E} (hv : v ∈ (𝕜 ∙ u)ᗮ) : ⟪v, u⟫ = 0 := |
| 1948 | +submodule.inner_left_of_mem_orthogonal (submodule.mem_span_singleton_self u) hv |
| 1949 | + |
1892 | 1950 | variables (K)
|
1893 | 1951 |
|
1894 | 1952 | /-- `K` and `Kᗮ` have trivial intersection. -/
|
@@ -2073,6 +2131,12 @@ lemma orthogonal_projection_mem_subspace_orthogonal_precomplement_eq_zero
|
2073 | 2131 | orthogonal_projection Kᗮ v = 0 :=
|
2074 | 2132 | orthogonal_projection_mem_subspace_orthogonal_complement_eq_zero (K.le_orthogonal_orthogonal hv)
|
2075 | 2133 |
|
| 2134 | +/-- The orthogonal projection onto `(𝕜 ∙ v)ᗮ` of `v` is zero. -/ |
| 2135 | +lemma orthogonal_projection_orthogonal_complement_singleton_eq_zero [complete_space E] (v : E) : |
| 2136 | + orthogonal_projection (𝕜 ∙ v)ᗮ v = 0 := |
| 2137 | +orthogonal_projection_mem_subspace_orthogonal_precomplement_eq_zero |
| 2138 | + (submodule.mem_span_singleton_self v) |
| 2139 | + |
2076 | 2140 | variables (K)
|
2077 | 2141 |
|
2078 | 2142 | /-- In a complete space `E`, a vector splits as the sum of its orthogonal projections onto a
|
@@ -2141,4 +2205,14 @@ lemma submodule.findim_add_findim_orthogonal' [finite_dimensional 𝕜 E] {K : s
|
2141 | 2205 | findim 𝕜 Kᗮ = n :=
|
2142 | 2206 | by { rw ← add_right_inj (findim 𝕜 K), simp [submodule.findim_add_findim_orthogonal, h_dim] }
|
2143 | 2207 |
|
| 2208 | +/-- In a finite-dimensional inner product space, the dimension of the orthogonal complement of the |
| 2209 | +span of a nonzero vector is one less than the dimension of the space. -/ |
| 2210 | +lemma findim_orthogonal_span_singleton [finite_dimensional 𝕜 E] {v : E} (hv : v ≠ 0) : |
| 2211 | + findim 𝕜 (𝕜 ∙ v)ᗮ = findim 𝕜 E - 1 := |
| 2212 | +begin |
| 2213 | + haveI : nontrivial E := ⟨⟨v, 0, hv⟩⟩, |
| 2214 | + apply submodule.findim_add_findim_orthogonal', |
| 2215 | + simp only [findim_span_singleton hv, findim_euclidean_space, fintype.card_fin], |
| 2216 | + exact nat.add_sub_cancel' (nat.succ_le_iff.mpr findim_pos) |
| 2217 | +end |
2144 | 2218 | end orthogonal
|
0 commit comments