1 (* Title: HOL/Real/HahnBanach/FunctionNorm.thy |
1 (* Title: HOL/Real/HahnBanach/FunctionNorm.thy |
2 ID: $Id$ |
2 ID: $Id$ |
3 Author: Gertrud Bauer, TU Munich |
3 Author: Gertrud Bauer, TU Munich |
4 *) |
4 *) |
5 |
5 |
|
6 header {* The norm of a function *}; |
|
7 |
6 theory FunctionNorm = NormedSpace + FunctionOrder:; |
8 theory FunctionNorm = NormedSpace + FunctionOrder:; |
7 |
9 |
8 |
10 |
9 constdefs |
11 constdefs |
10 is_continous :: "['a set, 'a => real, 'a => real] => bool" |
12 is_continous :: "['a set, 'a => real, 'a => real] => bool" |
11 "is_continous V norm f == (is_linearform V f |
13 "is_continous V norm f == |
12 & (EX c. ALL x:V. rabs (f x) <= c * norm x))"; |
14 (is_linearform V f & (EX c. ALL x:V. rabs (f x) <= c * norm x))"; |
13 |
15 |
14 lemma lipschitz_continousI [intro]: |
16 lemma lipschitz_continousI [intro]: |
15 "[| is_linearform V f; !! x. x:V ==> rabs (f x) <= c * norm x |] |
17 "[| is_linearform V f; !! x. x:V ==> rabs (f x) <= c * norm x |] |
16 ==> is_continous V norm f"; |
18 ==> is_continous V norm f"; |
17 proof (unfold is_continous_def, intro exI conjI ballI); |
19 proof (unfold is_continous_def, intro exI conjI ballI); |
18 assume r: "!! x. x:V ==> rabs (f x) <= c * norm x"; |
20 assume r: "!! x. x:V ==> rabs (f x) <= c * norm x"; |
19 fix x; assume "x:V"; show "rabs (f x) <= c * norm x"; by (rule r); |
21 fix x; assume "x:V"; show "rabs (f x) <= c * norm x"; by (rule r); |
20 qed; |
22 qed; |
21 |
23 |
22 lemma continous_linearform [intro!!]: "is_continous V norm f ==> is_linearform V f"; |
24 lemma continous_linearform [intro!!]: |
|
25 "is_continous V norm f ==> is_linearform V f"; |
23 by (unfold is_continous_def) force; |
26 by (unfold is_continous_def) force; |
24 |
27 |
25 lemma continous_bounded [intro!!]: |
28 lemma continous_bounded [intro!!]: |
26 "is_continous V norm f ==> EX c. ALL x:V. rabs (f x) <= c * norm x"; |
29 "is_continous V norm f ==> EX c. ALL x:V. rabs (f x) <= c * norm x"; |
27 by (unfold is_continous_def) force; |
30 by (unfold is_continous_def) force; |
28 |
31 |
29 constdefs |
32 constdefs |
30 B:: "[ 'a set, 'a => real, 'a => real ] => real set" |
33 B:: "[ 'a set, 'a => real, 'a => real ] => real set" |
31 "B V norm f == {z. z = 0r | (EX x:V. x ~= <0> & z = rabs (f x) * rinv (norm (x)))}"; |
34 "B V norm f == |
|
35 {z. z = 0r | (EX x:V. x ~= <0> & z = rabs (f x) * rinv (norm (x)))}"; |
32 |
36 |
33 constdefs |
37 constdefs |
34 function_norm :: " ['a set, 'a => real, 'a => real] => real" |
38 function_norm :: " ['a set, 'a => real, 'a => real] => real" |
35 "function_norm V norm f == |
39 "function_norm V norm f == |
36 Sup UNIV (B V norm f)"; |
40 Sup UNIV (B V norm f)"; |
44 by (unfold B_def, force); |
48 by (unfold B_def, force); |
45 |
49 |
46 lemma ex_fnorm [intro!!]: |
50 lemma ex_fnorm [intro!!]: |
47 "[| is_normed_vectorspace V norm; is_continous V norm f|] |
51 "[| is_normed_vectorspace V norm; is_continous V norm f|] |
48 ==> is_function_norm V norm f (function_norm V norm f)"; |
52 ==> is_function_norm V norm f (function_norm V norm f)"; |
49 proof (unfold function_norm_def is_function_norm_def is_continous_def Sup_def, elim conjE, |
53 proof (unfold function_norm_def is_function_norm_def is_continous_def |
50 rule selectI2EX); |
54 Sup_def, elim conjE, rule selectI2EX); |
51 assume "is_normed_vectorspace V norm"; |
55 assume "is_normed_vectorspace V norm"; |
52 assume "is_linearform V f" and e: "EX c. ALL x:V. rabs (f x) <= c * norm x"; |
56 assume "is_linearform V f" |
|
57 and e: "EX c. ALL x:V. rabs (f x) <= c * norm x"; |
53 show "EX a. is_Sup UNIV (B V norm f) a"; |
58 show "EX a. is_Sup UNIV (B V norm f) a"; |
54 proof (unfold is_Sup_def, rule reals_complete); |
59 proof (unfold is_Sup_def, rule reals_complete); |
55 show "EX X. X : B V norm f"; |
60 show "EX X. X : B V norm f"; |
56 proof (intro exI); |
61 proof (intro exI); |
57 show "0r : (B V norm f)"; by (unfold B_def, force); |
62 show "0r : (B V norm f)"; by (unfold B_def, force); |
74 proof (rule real_less_imp_le); |
79 proof (rule real_less_imp_le); |
75 show "0r < rinv (norm x)"; |
80 show "0r < rinv (norm x)"; |
76 proof (rule real_rinv_gt_zero); |
81 proof (rule real_rinv_gt_zero); |
77 show "0r < norm x"; ..; |
82 show "0r < norm x"; ..; |
78 qed; |
83 qed; |
79 qed; |
84 qed; (*** or: |
80 (*** or: by (rule real_less_imp_le, rule real_rinv_gt_zero, rule normed_vs_norm_gt_zero); ***) |
85 by (rule real_less_imp_le, rule real_rinv_gt_zero, |
81 qed; |
86 rule normed_vs_norm_gt_zero); ***) |
82 also; have "... = c * (norm x * rinv (norm x))"; by (rule real_mult_assoc); |
87 qed; |
|
88 also; have "... = c * (norm x * rinv (norm x))"; |
|
89 by (rule real_mult_assoc); |
83 also; have "(norm x * rinv (norm x)) = 1r"; |
90 also; have "(norm x * rinv (norm x)) = 1r"; |
84 proof (rule real_mult_inv_right); |
91 proof (rule real_mult_inv_right); |
85 show "norm x ~= 0r"; |
92 show "norm x ~= 0r"; |
86 proof (rule not_sym); |
93 proof (rule not_sym); |
87 show "0r ~= norm x"; |
94 show "0r ~= norm x"; |
88 proof (rule lt_imp_not_eq); |
95 proof (rule lt_imp_not_eq); |
89 show "0r < norm x"; ..; |
96 show "0r < norm x"; ..; |
90 qed; |
97 qed; |
91 qed; |
98 qed; (*** or: |
92 (*** or: by (rule not_sym, rule lt_imp_not_eq, rule normed_vs_norm_gt_zero); ***) |
99 by (rule not_sym, rule lt_imp_not_eq, |
|
100 rule normed_vs_norm_gt_zero); ***) |
93 qed; |
101 qed; |
94 also; have "c * ... = c"; by (simp!); |
102 also; have "c * ... = c"; by (simp!); |
95 also; have "... <= b"; by (simp! add: le_max1); |
103 also; have "... <= b"; by (simp! add: le_max1); |
96 finally; show "y <= b"; .; |
104 finally; show "y <= b"; .; |
97 next; |
105 next; |
99 qed simp; |
107 qed simp; |
100 qed; |
108 qed; |
101 qed; |
109 qed; |
102 qed; |
110 qed; |
103 |
111 |
104 lemma fnorm_ge_zero [intro!!]: "[| is_continous V norm f; is_normed_vectorspace V norm|] |
112 lemma fnorm_ge_zero [intro!!]: |
|
113 "[| is_continous V norm f; is_normed_vectorspace V norm|] |
105 ==> 0r <= function_norm V norm f"; |
114 ==> 0r <= function_norm V norm f"; |
106 proof -; |
115 proof -; |
107 assume c: "is_continous V norm f" and n: "is_normed_vectorspace V norm"; |
116 assume c: "is_continous V norm f" and n: "is_normed_vectorspace V norm"; |
108 have "is_function_norm V norm f (function_norm V norm f)"; ..; |
117 have "is_function_norm V norm f (function_norm V norm f)"; ..; |
109 hence s: "is_Sup UNIV (B V norm f) (function_norm V norm f)"; |
118 hence s: "is_Sup UNIV (B V norm f) (function_norm V norm f)"; |
124 show "0r < norm x"; ..; |
133 show "0r < norm x"; ..; |
125 qed; |
134 qed; |
126 qed; |
135 qed; |
127 qed; |
136 qed; |
128 qed (simp!); |
137 qed (simp!); |
129 from ex_fnorm [OF n c]; show "is_Sup UNIV (B V norm f) (Sup UNIV (B V norm f))"; |
138 from ex_fnorm [OF n c]; |
|
139 show "is_Sup UNIV (B V norm f) (Sup UNIV (B V norm f))"; |
130 by (simp! add: is_function_norm_def function_norm_def); |
140 by (simp! add: is_function_norm_def function_norm_def); |
131 show "0r : B V norm f"; by (rule B_not_empty); |
141 show "0r : B V norm f"; by (rule B_not_empty); |
132 qed; |
142 qed; |
133 qed; |
143 qed; |
134 |
144 |
135 |
|
136 lemma norm_fx_le_norm_f_norm_x: |
145 lemma norm_fx_le_norm_f_norm_x: |
137 "[| is_normed_vectorspace V norm; x:V; is_continous V norm f |] |
146 "[| is_normed_vectorspace V norm; x:V; is_continous V norm f |] |
138 ==> rabs (f x) <= (function_norm V norm f) * norm x"; |
147 ==> rabs (f x) <= (function_norm V norm f) * norm x"; |
139 proof -; |
148 proof -; |
140 assume "is_normed_vectorspace V norm" "x:V" and c: "is_continous V norm f"; |
149 assume "is_normed_vectorspace V norm" "x:V" and c: "is_continous V norm f"; |
196 assume c: "is_continous V norm f"; |
202 assume c: "is_continous V norm f"; |
197 assume fb: "ALL x:V. rabs (f x) <= c * norm x" |
203 assume fb: "ALL x:V. rabs (f x) <= c * norm x" |
198 and "0r <= c"; |
204 and "0r <= c"; |
199 show "Sup UNIV (B V norm f) <= c"; |
205 show "Sup UNIV (B V norm f) <= c"; |
200 proof (rule sup_le_ub); |
206 proof (rule sup_le_ub); |
201 from ex_fnorm [OF _ c]; show "is_Sup UNIV (B V norm f) (Sup UNIV (B V norm f))"; |
207 from ex_fnorm [OF _ c]; |
|
208 show "is_Sup UNIV (B V norm f) (Sup UNIV (B V norm f))"; |
202 by (simp! add: is_function_norm_def function_norm_def); |
209 by (simp! add: is_function_norm_def function_norm_def); |
203 show "isUb UNIV (B V norm f) c"; |
210 show "isUb UNIV (B V norm f) c"; |
204 proof (intro isUbI setleI ballI); |
211 proof (intro isUbI setleI ballI); |
205 fix y; assume "y: B V norm f"; |
212 fix y; assume "y: B V norm f"; |
206 thus le: "y <= c"; |
213 thus le: "y <= c"; |
215 by (simp! add: order_less_imp_not_eq); |
222 by (simp! add: order_less_imp_not_eq); |
216 qed; |
223 qed; |
217 |
224 |
218 from lt; have "0r < rinv (norm x)"; |
225 from lt; have "0r < rinv (norm x)"; |
219 by (simp! add: real_rinv_gt_zero); |
226 by (simp! add: real_rinv_gt_zero); |
220 then; have inv_leq: "0r <= rinv (norm x)"; by (rule real_less_imp_le); |
227 then; have inv_leq: "0r <= rinv (norm x)"; |
|
228 by (rule real_less_imp_le); |
221 |
229 |
222 from Px; have "y = rabs (f x) * rinv (norm x)"; ..; |
230 from Px; have "y = rabs (f x) * rinv (norm x)"; ..; |
223 also; from inv_leq; have "... <= c * norm x * rinv (norm x)"; |
231 also; from inv_leq; have "... <= c * norm x * rinv (norm x)"; |
224 proof (rule real_mult_le_le_mono2); |
232 proof (rule real_mult_le_le_mono2); |
225 from fb x; show "rabs (f x) <= c * norm x"; ..; |
233 from fb x; show "rabs (f x) <= c * norm x"; ..; |