author | paulson <lp15@cam.ac.uk> |
Sat, 12 Apr 2025 22:42:32 +0100 (2 weeks ago) | |
changeset 82489 | d35d355f7330 |
parent 70136 | f03a01a18c6e |
child 82522 | 62afd98e3f3e |
permissions | -rw-r--r-- |
63627 | 1 |
(* Title: HOL/Analysis/L2_Norm.thy |
36333 | 2 |
Author: Brian Huffman, Portland State University |
3 |
*) |
|
4 |
||
69676 | 5 |
chapter \<open>Linear Algebra\<close> |
36333 | 6 |
|
7 |
theory L2_Norm |
|
67006 | 8 |
imports Complex_Main |
36333 | 9 |
begin |
10 |
||
69676 | 11 |
section \<open>L2 Norm\<close> |
12 |
||
70136 | 13 |
definition\<^marker>\<open>tag important\<close> L2_set :: "('a \<Rightarrow> real) \<Rightarrow> 'a set \<Rightarrow> real" where |
69600 | 14 |
"L2_set f A = sqrt (\<Sum>i\<in>A. (f i)\<^sup>2)" |
36333 | 15 |
|
67155 | 16 |
lemma L2_set_cong: |
17 |
"\<lbrakk>A = B; \<And>x. x \<in> B \<Longrightarrow> f x = g x\<rbrakk> \<Longrightarrow> L2_set f A = L2_set g B" |
|
18 |
unfolding L2_set_def by simp |
|
36333 | 19 |
|
69546
27dae626822b
prefer naming convention from datatype package for strong congruence rules
haftmann
parents:
69164
diff
changeset
|
20 |
lemma L2_set_cong_simp: |
67155 | 21 |
"\<lbrakk>A = B; \<And>x. x \<in> B =simp=> f x = g x\<rbrakk> \<Longrightarrow> L2_set f A = L2_set g B" |
22 |
unfolding L2_set_def simp_implies_def by simp |
|
36333 | 23 |
|
67155 | 24 |
lemma L2_set_infinite [simp]: "\<not> finite A \<Longrightarrow> L2_set f A = 0" |
25 |
unfolding L2_set_def by simp |
|
26 |
||
27 |
lemma L2_set_empty [simp]: "L2_set f {} = 0" |
|
28 |
unfolding L2_set_def by simp |
|
36333 | 29 |
|
67155 | 30 |
lemma L2_set_insert [simp]: |
31 |
"\<lbrakk>finite F; a \<notin> F\<rbrakk> \<Longrightarrow> |
|
32 |
L2_set f (insert a F) = sqrt ((f a)\<^sup>2 + (L2_set f F)\<^sup>2)" |
|
33 |
unfolding L2_set_def by (simp add: sum_nonneg) |
|
36333 | 34 |
|
67155 | 35 |
lemma L2_set_nonneg [simp]: "0 \<le> L2_set f A" |
36 |
unfolding L2_set_def by (simp add: sum_nonneg) |
|
36333 | 37 |
|
67155 | 38 |
lemma L2_set_0': "\<forall>a\<in>A. f a = 0 \<Longrightarrow> L2_set f A = 0" |
39 |
unfolding L2_set_def by simp |
|
36333 | 40 |
|
67155 | 41 |
lemma L2_set_constant: "L2_set (\<lambda>x. y) A = sqrt (of_nat (card A)) * \<bar>y\<bar>" |
42 |
unfolding L2_set_def by (simp add: real_sqrt_mult) |
|
36333 | 43 |
|
67155 | 44 |
lemma L2_set_mono: |
36333 | 45 |
assumes "\<And>i. i \<in> K \<Longrightarrow> f i \<le> g i" |
46 |
assumes "\<And>i. i \<in> K \<Longrightarrow> 0 \<le> f i" |
|
67155 | 47 |
shows "L2_set f K \<le> L2_set g K" |
48 |
unfolding L2_set_def |
|
64267 | 49 |
by (simp add: sum_nonneg sum_mono power_mono assms) |
36333 | 50 |
|
67155 | 51 |
lemma L2_set_strict_mono: |
36333 | 52 |
assumes "finite K" and "K \<noteq> {}" |
53 |
assumes "\<And>i. i \<in> K \<Longrightarrow> f i < g i" |
|
54 |
assumes "\<And>i. i \<in> K \<Longrightarrow> 0 \<le> f i" |
|
67155 | 55 |
shows "L2_set f K < L2_set g K" |
56 |
unfolding L2_set_def |
|
64267 | 57 |
by (simp add: sum_strict_mono power_strict_mono assms) |
36333 | 58 |
|
67155 | 59 |
lemma L2_set_right_distrib: |
60 |
"0 \<le> r \<Longrightarrow> r * L2_set f A = L2_set (\<lambda>x. r * f x) A" |
|
61 |
unfolding L2_set_def |
|
36333 | 62 |
apply (simp add: power_mult_distrib) |
64267 | 63 |
apply (simp add: sum_distrib_left [symmetric]) |
64 |
apply (simp add: real_sqrt_mult sum_nonneg) |
|
36333 | 65 |
done |
66 |
||
67155 | 67 |
lemma L2_set_left_distrib: |
68 |
"0 \<le> r \<Longrightarrow> L2_set f A * r = L2_set (\<lambda>x. f x * r) A" |
|
82489 | 69 |
unfolding L2_set_def power_mult_distrib |
70 |
by (simp add: real_sqrt_mult sum_nonneg flip: sum_distrib_right) |
|
36333 | 71 |
|
67155 | 72 |
lemma L2_set_eq_0_iff: "finite A \<Longrightarrow> L2_set f A = 0 \<longleftrightarrow> (\<forall>x\<in>A. f x = 0)" |
73 |
unfolding L2_set_def |
|
64267 | 74 |
by (simp add: sum_nonneg sum_nonneg_eq_0_iff) |
36333 | 75 |
|
68607
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
immler
parents:
68465
diff
changeset
|
76 |
proposition L2_set_triangle_ineq: |
67156 | 77 |
"L2_set (\<lambda>i. f i + g i) A \<le> L2_set f A + L2_set g A" |
68607
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
immler
parents:
68465
diff
changeset
|
78 |
proof (cases "finite A") |
36333 | 79 |
case False |
80 |
thus ?thesis by simp |
|
81 |
next |
|
82 |
case True |
|
83 |
thus ?thesis |
|
84 |
proof (induct set: finite) |
|
85 |
case empty |
|
86 |
show ?case by simp |
|
87 |
next |
|
88 |
case (insert x F) |
|
67155 | 89 |
hence "sqrt ((f x + g x)\<^sup>2 + (L2_set (\<lambda>i. f i + g i) F)\<^sup>2) \<le> |
90 |
sqrt ((f x + g x)\<^sup>2 + (L2_set f F + L2_set g F)\<^sup>2)" |
|
36333 | 91 |
by (intro real_sqrt_le_mono add_left_mono power_mono insert |
67155 | 92 |
L2_set_nonneg add_increasing zero_le_power2) |
36333 | 93 |
also have |
67155 | 94 |
"\<dots> \<le> sqrt ((f x)\<^sup>2 + (L2_set f F)\<^sup>2) + sqrt ((g x)\<^sup>2 + (L2_set g F)\<^sup>2)" |
36333 | 95 |
by (rule real_sqrt_sum_squares_triangle_ineq) |
96 |
finally show ?case |
|
97 |
using insert by simp |
|
98 |
qed |
|
99 |
qed |
|
100 |
||
82489 | 101 |
lemma L2_set_le_sum: |
102 |
"(\<And>i. i \<in> A \<Longrightarrow> 0 \<le> f i) \<Longrightarrow> L2_set f A \<le> sum f A" |
|
103 |
proof (induction A rule: infinite_finite_induct) |
|
104 |
case (insert a A) |
|
105 |
with order_trans [OF sqrt_sum_squares_le_sum] show ?case by force |
|
106 |
qed auto |
|
36333 | 107 |
|
67155 | 108 |
lemma L2_set_le_sum_abs: "L2_set f A \<le> (\<Sum>i\<in>A. \<bar>f i\<bar>)" |
82489 | 109 |
proof (induction A rule: infinite_finite_induct) |
110 |
case (insert a A) |
|
111 |
with order_trans [OF sqrt_sum_squares_le_sum_abs] show ?case by force |
|
112 |
qed auto |
|
36333 | 113 |
|
67155 | 114 |
lemma L2_set_mult_ineq: "(\<Sum>i\<in>A. \<bar>f i\<bar> * \<bar>g i\<bar>) \<le> L2_set f A * L2_set g A" |
82489 | 115 |
proof (induction A rule: infinite_finite_induct) |
116 |
case (insert a A) |
|
117 |
have "(\<bar>f a\<bar> * \<bar>g a\<bar> + (\<Sum>i\<in>A. \<bar>f i\<bar> * \<bar>g i\<bar>))\<^sup>2 |
|
118 |
\<le> (\<bar>f a\<bar> * \<bar>g a\<bar> + L2_set f A * L2_set g A)\<^sup>2" |
|
119 |
by (simp add: insert.IH sum_nonneg) |
|
120 |
also have "... \<le> ((f a)\<^sup>2 + (L2_set f A)\<^sup>2) * ((g a)\<^sup>2 + (L2_set g A)\<^sup>2)" |
|
121 |
using L2_set_mult_ineq_lemma [of "L2_set f A" "L2_set g A" "\<bar>f a\<bar>" "\<bar>g a\<bar>"] |
|
122 |
by (simp add: power2_eq_square algebra_simps) |
|
123 |
also have "... = (sqrt ((f a)\<^sup>2 + (L2_set f A)\<^sup>2) * sqrt ((g a)\<^sup>2 + (L2_set g A)\<^sup>2))\<^sup>2" |
|
124 |
using real_sqrt_mult real_sqrt_sum_squares_mult_squared_eq by presburger |
|
125 |
finally have "(\<bar>f a\<bar> * \<bar>g a\<bar> + (\<Sum>i\<in>A. \<bar>f i\<bar> * \<bar>g i\<bar>))\<^sup>2 |
|
126 |
\<le> (sqrt ((f a)\<^sup>2 + (L2_set f A)\<^sup>2) * sqrt ((g a)\<^sup>2 + (L2_set g A)\<^sup>2))\<^sup>2" . |
|
127 |
then |
|
128 |
show ?case |
|
129 |
using power2_le_imp_le insert.hyps by fastforce |
|
130 |
qed auto |
|
36333 | 131 |
|
67155 | 132 |
lemma member_le_L2_set: "\<lbrakk>finite A; i \<in> A\<rbrakk> \<Longrightarrow> f i \<le> L2_set f A" |
133 |
unfolding L2_set_def |
|
64267 | 134 |
by (auto intro!: member_le_sum real_le_rsqrt) |
36333 | 135 |
|
136 |
end |