From 53756f0e34b003a412e060294f500f0cd76939be Mon Sep 17 00:00:00 2001 From: Yakov Pechersky Date: Mon, 15 Mar 2021 21:56:52 -0400 Subject: [PATCH 1/3] feat(normed_space/inner_product): euclidean_space.norm_eq --- src/analysis/normed_space/inner_product.lean | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/analysis/normed_space/inner_product.lean b/src/analysis/normed_space/inner_product.lean index 86bb5e233c09e..ec163a06dcfeb 100644 --- a/src/analysis/normed_space/inner_product.lean +++ b/src/analysis/normed_space/inner_product.lean @@ -1430,6 +1430,15 @@ space use `euclidean_space π•œ (fin n)`. -/ def euclidean_space (π•œ : Type*) [is_R_or_C π•œ] (n : Type*) [fintype n] : Type* := pi_Lp 2 one_le_two (Ξ» (i : n), π•œ) +lemma euclidean_space.norm_eq {π•œ : Type*} [is_R_or_C π•œ] {n : Type*} [fintype n] + (x : euclidean_space π•œ n) : βˆ₯ x βˆ₯ = real.sqrt (βˆ‘ (i : n), βˆ₯x iβˆ₯ ^ 2) := +begin + have : (2 : ℝ) = (2 : β„•) := by norm_num, + have h : βˆ€ (x : ℝ) (n : β„•), real.rpow x n = monoid.pow x n := by simp, + simp_rw [pi_Lp.norm_eq, real.sqrt_eq_rpow, this, ←real.rpow_eq_pow, h], + simp +end + /-! ### Inner product space structure on subspaces -/ /-- Induced inner product on a submodule. -/ From f0c564c90387f80f8c916d3de23cef309e1d7ecb Mon Sep 17 00:00:00 2001 From: Yakov Pechersky Date: Tue, 16 Mar 2021 00:37:29 -0400 Subject: [PATCH 2/3] add pi_Lp norm of nat and L2 norm lemmas --- src/analysis/normed_space/inner_product.lean | 12 ++++++------ src/topology/metric_space/pi_Lp.lean | 5 +++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/analysis/normed_space/inner_product.lean b/src/analysis/normed_space/inner_product.lean index ec163a06dcfeb..410e3ce8bc211 100644 --- a/src/analysis/normed_space/inner_product.lean +++ b/src/analysis/normed_space/inner_product.lean @@ -1413,6 +1413,11 @@ instance pi_Lp.inner_product_space {ΞΉ : Type*} [fintype ΞΉ] (f : ΞΉ β†’ Type*) βŸͺx, y⟫ = βˆ‘ i, βŸͺx i, y i⟫ := rfl +lemma pi_Lp.norm_eq_of_L2 {ΞΉ : Type*} [fintype ΞΉ] {f : ΞΉ β†’ Type*} + [Ξ  i, inner_product_space π•œ (f i)] (x : pi_Lp 2 one_le_two f) : + βˆ₯ x βˆ₯ = sqrt (βˆ‘ (i : ΞΉ), βˆ₯x iβˆ₯ ^ 2) := +by { rw [pi_Lp.norm_eq_of_nat 2]; simp [sqrt_eq_rpow] } + /-- A field `π•œ` satisfying `is_R_or_C` is itself a `π•œ`-inner product space. -/ instance is_R_or_C.inner_product_space : inner_product_space π•œ π•œ := { inner := (Ξ» x y, (conj x) * y), @@ -1432,12 +1437,7 @@ def euclidean_space (π•œ : Type*) [is_R_or_C π•œ] lemma euclidean_space.norm_eq {π•œ : Type*} [is_R_or_C π•œ] {n : Type*} [fintype n] (x : euclidean_space π•œ n) : βˆ₯ x βˆ₯ = real.sqrt (βˆ‘ (i : n), βˆ₯x iβˆ₯ ^ 2) := -begin - have : (2 : ℝ) = (2 : β„•) := by norm_num, - have h : βˆ€ (x : ℝ) (n : β„•), real.rpow x n = monoid.pow x n := by simp, - simp_rw [pi_Lp.norm_eq, real.sqrt_eq_rpow, this, ←real.rpow_eq_pow, h], - simp -end +pi_Lp.norm_eq_of_L2 x /-! ### Inner product space structure on subspaces -/ diff --git a/src/topology/metric_space/pi_Lp.lean b/src/topology/metric_space/pi_Lp.lean index cb20e8185a424..91d2f9bc46b74 100644 --- a/src/topology/metric_space/pi_Lp.lean +++ b/src/topology/metric_space/pi_Lp.lean @@ -229,6 +229,11 @@ lemma norm_eq {p : ℝ} {hp : 1 ≀ p} {Ξ± : ΞΉ β†’ Type*} [βˆ€i, normed_group (Ξ± i)] (f : pi_Lp p hp Ξ±) : βˆ₯fβˆ₯ = (βˆ‘ (i : ΞΉ), βˆ₯f iβˆ₯ ^ p) ^ (1/p) := rfl +lemma norm_eq_of_nat {p : ℝ} {hp : 1 ≀ p} {Ξ± : ΞΉ β†’ Type*} + [βˆ€i, normed_group (Ξ± i)] (n : β„•) (h : p = n) (f : pi_Lp p hp Ξ±) : + βˆ₯fβˆ₯ = (βˆ‘ (i : ΞΉ), βˆ₯f iβˆ₯ ^ n) ^ (1/(n : ℝ)) := +by simp [norm_eq, h, real.sqrt_eq_rpow, ←real.rpow_nat_cast] + variables (π•œ : Type*) [normed_field π•œ] /-- The product of finitely many normed spaces is a normed space, with the `L^p` norm. -/ From 05ba1e0d47196d1ce06ba3ce6d80842eaf21c9fa Mon Sep 17 00:00:00 2001 From: Yakov Pechersky Date: Wed, 17 Mar 2021 23:29:08 -0400 Subject: [PATCH 3/3] Apply suggestions from code review Co-authored-by: hrmacbeth <25316162+hrmacbeth@users.noreply.github.com> --- src/analysis/normed_space/inner_product.lean | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/analysis/normed_space/inner_product.lean b/src/analysis/normed_space/inner_product.lean index 410e3ce8bc211..dab2715f8b04b 100644 --- a/src/analysis/normed_space/inner_product.lean +++ b/src/analysis/normed_space/inner_product.lean @@ -1415,7 +1415,7 @@ rfl lemma pi_Lp.norm_eq_of_L2 {ΞΉ : Type*} [fintype ΞΉ] {f : ΞΉ β†’ Type*} [Ξ  i, inner_product_space π•œ (f i)] (x : pi_Lp 2 one_le_two f) : - βˆ₯ x βˆ₯ = sqrt (βˆ‘ (i : ΞΉ), βˆ₯x iβˆ₯ ^ 2) := + βˆ₯xβˆ₯ = sqrt (βˆ‘ (i : ΞΉ), βˆ₯x iβˆ₯ ^ 2) := by { rw [pi_Lp.norm_eq_of_nat 2]; simp [sqrt_eq_rpow] } /-- A field `π•œ` satisfying `is_R_or_C` is itself a `π•œ`-inner product space. -/ @@ -1436,7 +1436,7 @@ def euclidean_space (π•œ : Type*) [is_R_or_C π•œ] (n : Type*) [fintype n] : Type* := pi_Lp 2 one_le_two (Ξ» (i : n), π•œ) lemma euclidean_space.norm_eq {π•œ : Type*} [is_R_or_C π•œ] {n : Type*} [fintype n] - (x : euclidean_space π•œ n) : βˆ₯ x βˆ₯ = real.sqrt (βˆ‘ (i : n), βˆ₯x iβˆ₯ ^ 2) := + (x : euclidean_space π•œ n) : βˆ₯xβˆ₯ = real.sqrt (βˆ‘ (i : n), βˆ₯x iβˆ₯ ^ 2) := pi_Lp.norm_eq_of_L2 x /-! ### Inner product space structure on subspaces -/