1 (* Title: HOL/Real/HahnBanach/NormedSpace.thy |
1 (* Title: HOL/Real/HahnBanach/NormedSpace.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 {* Normed vector spaces *}; |
|
7 |
6 theory NormedSpace = Subspace:; |
8 theory NormedSpace = Subspace:; |
7 |
9 |
8 |
10 |
9 section {* normed vector spaces *}; |
|
10 |
11 |
11 subsection {* quasinorm *}; |
12 subsection {* Quasinorms *}; |
|
13 |
12 |
14 |
13 constdefs |
15 constdefs |
14 is_quasinorm :: "['a set, 'a => real] => bool" |
16 is_quasinorm :: "['a set, 'a => real] => bool" |
15 "is_quasinorm V norm == ALL x: V. ALL y:V. ALL a. |
17 "is_quasinorm V norm == ALL x: V. ALL y:V. ALL a. |
16 0r <= norm x |
18 0r <= norm x |
17 & norm (a [*] x) = (rabs a) * (norm x) |
19 & norm (a [*] x) = (rabs a) * (norm x) |
18 & norm (x [+] y) <= norm x + norm y"; |
20 & norm (x [+] y) <= norm x + norm y"; |
19 |
21 |
20 lemma is_quasinormI[intro]: |
22 lemma is_quasinormI [intro]: |
21 "[| !! x y a. [| x:V; y:V|] ==> 0r <= norm x; |
23 "[| !! x y a. [| x:V; y:V|] ==> 0r <= norm x; |
22 !! x a. x:V ==> norm (a [*] x) = (rabs a) * (norm x); |
24 !! x a. x:V ==> norm (a [*] x) = (rabs a) * (norm x); |
23 !! x y. [|x:V; y:V |] ==> norm (x [+] y) <= norm x + norm y |] |
25 !! x y. [|x:V; y:V |] ==> norm (x [+] y) <= norm x + norm y |] |
24 ==> is_quasinorm V norm"; |
26 ==> is_quasinorm V norm"; |
25 by (unfold is_quasinorm_def, force); |
27 by (unfold is_quasinorm_def, force); |
27 lemma quasinorm_ge_zero [intro!!]: |
29 lemma quasinorm_ge_zero [intro!!]: |
28 "[| is_quasinorm V norm; x:V |] ==> 0r <= norm x"; |
30 "[| is_quasinorm V norm; x:V |] ==> 0r <= norm x"; |
29 by (unfold is_quasinorm_def, force); |
31 by (unfold is_quasinorm_def, force); |
30 |
32 |
31 lemma quasinorm_mult_distrib: |
33 lemma quasinorm_mult_distrib: |
32 "[| is_quasinorm V norm; x:V |] ==> norm (a [*] x) = (rabs a) * (norm x)"; |
34 "[| is_quasinorm V norm; x:V |] |
|
35 ==> norm (a [*] x) = (rabs a) * (norm x)"; |
33 by (unfold is_quasinorm_def, force); |
36 by (unfold is_quasinorm_def, force); |
34 |
37 |
35 lemma quasinorm_triangle_ineq: |
38 lemma quasinorm_triangle_ineq: |
36 "[| is_quasinorm V norm; x:V; y:V |] ==> norm (x [+] y) <= norm x + norm y"; |
39 "[| is_quasinorm V norm; x:V; y:V |] |
|
40 ==> norm (x [+] y) <= norm x + norm y"; |
37 by (unfold is_quasinorm_def, force); |
41 by (unfold is_quasinorm_def, force); |
38 |
42 |
39 lemma quasinorm_diff_triangle_ineq: |
43 lemma quasinorm_diff_triangle_ineq: |
40 "[| is_quasinorm V norm; x:V; y:V; is_vectorspace V |] ==> norm (x [-] y) <= norm x + norm y"; |
44 "[| is_quasinorm V norm; x:V; y:V; is_vectorspace V |] |
|
45 ==> norm (x [-] y) <= norm x + norm y"; |
41 proof -; |
46 proof -; |
42 assume "is_quasinorm V norm" "x:V" "y:V" "is_vectorspace V"; |
47 assume "is_quasinorm V norm" "x:V" "y:V" "is_vectorspace V"; |
43 have "norm (x [-] y) = norm (x [+] - 1r [*] y)"; by (simp add: diff_def negate_def); |
48 have "norm (x [-] y) = norm (x [+] - 1r [*] y)"; |
44 also; have "... <= norm x + norm (- 1r [*] y)"; by (simp! add: quasinorm_triangle_ineq); |
49 by (simp add: diff_def negate_def); |
45 also; have "norm (- 1r [*] y) = rabs (- 1r) * norm y"; by (rule quasinorm_mult_distrib); |
50 also; have "... <= norm x + norm (- 1r [*] y)"; |
|
51 by (simp! add: quasinorm_triangle_ineq); |
|
52 also; have "norm (- 1r [*] y) = rabs (- 1r) * norm y"; |
|
53 by (rule quasinorm_mult_distrib); |
46 also; have "rabs (- 1r) = 1r"; by (rule rabs_minus_one); |
54 also; have "rabs (- 1r) = 1r"; by (rule rabs_minus_one); |
47 finally; show "norm (x [-] y) <= norm x + norm y"; by simp; |
55 finally; show "norm (x [-] y) <= norm x + norm y"; by simp; |
48 qed; |
56 qed; |
49 |
57 |
50 lemma quasinorm_minus: |
58 lemma quasinorm_minus: |
51 "[| is_quasinorm V norm; x:V; is_vectorspace V |] ==> norm ([-] x) = norm x"; |
59 "[| is_quasinorm V norm; x:V; is_vectorspace V |] |
|
60 ==> norm ([-] x) = norm x"; |
52 proof -; |
61 proof -; |
53 assume "is_quasinorm V norm" "x:V" "is_vectorspace V"; |
62 assume "is_quasinorm V norm" "x:V" "is_vectorspace V"; |
54 have "norm ([-] x) = norm (-1r [*] x)"; by (unfold negate_def) force; |
63 have "norm ([-] x) = norm (-1r [*] x)"; by (unfold negate_def) force; |
55 also; have "... = rabs (-1r) * norm x"; by (rule quasinorm_mult_distrib); |
64 also; have "... = rabs (-1r) * norm x"; |
|
65 by (rule quasinorm_mult_distrib); |
56 also; have "rabs (- 1r) = 1r"; by (rule rabs_minus_one); |
66 also; have "rabs (- 1r) = 1r"; by (rule rabs_minus_one); |
57 finally; show "norm ([-] x) = norm x"; by simp; |
67 finally; show "norm ([-] x) = norm x"; by simp; |
58 qed; |
68 qed; |
59 |
69 |
60 |
70 |
61 subsection {* norm *}; |
71 |
|
72 subsection {* Norms *}; |
|
73 |
62 |
74 |
63 constdefs |
75 constdefs |
64 is_norm :: "['a set, 'a => real] => bool" |
76 is_norm :: "['a set, 'a => real] => bool" |
65 "is_norm V norm == ALL x: V. is_quasinorm V norm |
77 "is_norm V norm == ALL x: V. is_quasinorm V norm |
66 & (norm x = 0r) = (x = <0>)"; |
78 & (norm x = 0r) = (x = <0>)"; |
67 |
79 |
68 lemma is_normI [intro]: |
80 lemma is_normI [intro]: |
69 "ALL x: V. is_quasinorm V norm & (norm x = 0r) = (x = <0>) ==> is_norm V norm"; |
81 "ALL x: V. is_quasinorm V norm & (norm x = 0r) = (x = <0>) |
|
82 ==> is_norm V norm"; |
70 by (unfold is_norm_def, force); |
83 by (unfold is_norm_def, force); |
71 |
84 |
72 lemma norm_is_quasinorm [intro!!]: "[| is_norm V norm; x:V |] ==> is_quasinorm V norm"; |
85 lemma norm_is_quasinorm [intro!!]: |
|
86 "[| is_norm V norm; x:V |] ==> is_quasinorm V norm"; |
73 by (unfold is_norm_def, force); |
87 by (unfold is_norm_def, force); |
74 |
88 |
75 lemma norm_zero_iff: "[| is_norm V norm; x:V |] ==> (norm x = 0r) = (x = <0>)"; |
89 lemma norm_zero_iff: |
|
90 "[| is_norm V norm; x:V |] ==> (norm x = 0r) = (x = <0>)"; |
76 by (unfold is_norm_def, force); |
91 by (unfold is_norm_def, force); |
77 |
92 |
78 lemma norm_ge_zero [intro!!]: |
93 lemma norm_ge_zero [intro!!]: |
79 "[|is_norm V norm; x:V |] ==> 0r <= norm x"; |
94 "[|is_norm V norm; x:V |] ==> 0r <= norm x"; |
80 by (unfold is_norm_def is_quasinorm_def, force); |
95 by (unfold is_norm_def is_quasinorm_def, force); |
81 |
96 |
82 |
97 |
83 subsection {* normed vector space *}; |
98 subsection {* Normed vector spaces *}; |
|
99 |
84 |
100 |
85 constdefs |
101 constdefs |
86 is_normed_vectorspace :: "['a set, 'a => real] => bool" |
102 is_normed_vectorspace :: "['a set, 'a => real] => bool" |
87 "is_normed_vectorspace V norm == |
103 "is_normed_vectorspace V norm == |
88 is_vectorspace V & |
104 is_vectorspace V & |
89 is_norm V norm"; |
105 is_norm V norm"; |
90 |
106 |
91 lemma normed_vsI [intro]: |
107 lemma normed_vsI [intro]: |
92 "[| is_vectorspace V; is_norm V norm |] ==> is_normed_vectorspace V norm"; |
108 "[| is_vectorspace V; is_norm V norm |] |
|
109 ==> is_normed_vectorspace V norm"; |
93 by (unfold is_normed_vectorspace_def) blast; |
110 by (unfold is_normed_vectorspace_def) blast; |
94 |
111 |
95 lemma normed_vs_vs [intro!!]: "is_normed_vectorspace V norm ==> is_vectorspace V"; |
112 lemma normed_vs_vs [intro!!]: |
|
113 "is_normed_vectorspace V norm ==> is_vectorspace V"; |
96 by (unfold is_normed_vectorspace_def) force; |
114 by (unfold is_normed_vectorspace_def) force; |
97 |
115 |
98 lemma normed_vs_norm [intro!!]: "is_normed_vectorspace V norm ==> is_norm V norm"; |
116 lemma normed_vs_norm [intro!!]: |
|
117 "is_normed_vectorspace V norm ==> is_norm V norm"; |
99 by (unfold is_normed_vectorspace_def, elim conjE); |
118 by (unfold is_normed_vectorspace_def, elim conjE); |
100 |
119 |
101 lemma normed_vs_norm_ge_zero [intro!!]: "[| is_normed_vectorspace V norm; x:V |] ==> 0r <= norm x"; |
120 lemma normed_vs_norm_ge_zero [intro!!]: |
|
121 "[| is_normed_vectorspace V norm; x:V |] ==> 0r <= norm x"; |
102 by (unfold is_normed_vectorspace_def, rule, elim conjE); |
122 by (unfold is_normed_vectorspace_def, rule, elim conjE); |
103 |
123 |
104 lemma normed_vs_norm_gt_zero [intro!!]: |
124 lemma normed_vs_norm_gt_zero [intro!!]: |
105 "[| is_normed_vectorspace V norm; x:V; x ~= <0> |] ==> 0r < norm x"; |
125 "[| is_normed_vectorspace V norm; x:V; x ~= <0> |] ==> 0r < norm x"; |
106 proof (unfold is_normed_vectorspace_def, elim conjE); |
126 proof (unfold is_normed_vectorspace_def, elim conjE); |
115 qed (rule sym); |
135 qed (rule sym); |
116 finally; show "0r < norm x"; .; |
136 finally; show "0r < norm x"; .; |
117 qed; |
137 qed; |
118 |
138 |
119 lemma normed_vs_norm_mult_distrib [intro!!]: |
139 lemma normed_vs_norm_mult_distrib [intro!!]: |
120 "[| is_normed_vectorspace V norm; x:V |] ==> norm (a [*] x) = (rabs a) * (norm x)"; |
140 "[| is_normed_vectorspace V norm; x:V |] |
121 by (rule quasinorm_mult_distrib, rule norm_is_quasinorm, rule normed_vs_norm); |
141 ==> norm (a [*] x) = (rabs a) * (norm x)"; |
|
142 by (rule quasinorm_mult_distrib, rule norm_is_quasinorm, |
|
143 rule normed_vs_norm); |
122 |
144 |
123 lemma normed_vs_norm_triangle_ineq [intro!!]: |
145 lemma normed_vs_norm_triangle_ineq [intro!!]: |
124 "[| is_normed_vectorspace V norm; x:V; y:V |] ==> norm (x [+] y) <= norm x + norm y"; |
146 "[| is_normed_vectorspace V norm; x:V; y:V |] |
125 by (rule quasinorm_triangle_ineq, rule norm_is_quasinorm, rule normed_vs_norm); |
147 ==> norm (x [+] y) <= norm x + norm y"; |
|
148 by (rule quasinorm_triangle_ineq, rule norm_is_quasinorm, |
|
149 rule normed_vs_norm); |
126 |
150 |
127 lemma subspace_normed_vs [intro!!]: |
151 lemma subspace_normed_vs [intro!!]: |
128 "[| is_subspace F E; is_vectorspace E; is_normed_vectorspace E norm |] |
152 "[| is_subspace F E; is_vectorspace E; is_normed_vectorspace E norm |] |
129 ==> is_normed_vectorspace F norm"; |
153 ==> is_normed_vectorspace F norm"; |
130 proof (rule normed_vsI); |
154 proof (rule normed_vsI); |
131 assume "is_subspace F E" "is_vectorspace E" "is_normed_vectorspace E norm"; |
155 assume "is_subspace F E" "is_vectorspace E" |
|
156 "is_normed_vectorspace E norm"; |
132 show "is_vectorspace F"; ..; |
157 show "is_vectorspace F"; ..; |
133 show "is_norm F norm"; |
158 show "is_norm F norm"; |
134 proof (intro is_normI ballI conjI); |
159 proof (intro is_normI ballI conjI); |
135 show "is_quasinorm F norm"; |
160 show "is_quasinorm F norm"; |
136 proof; |
161 proof; |