author | blanchet |
Mon, 31 Jan 2022 16:09:23 +0100 | |
changeset 75020 | b087610592b4 |
parent 70125 | b601c2c87076 |
permissions | -rw-r--r-- |
70125
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
1 |
section\<open>Poly Mappings as a Real Normed Vector\<close> |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
2 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
3 |
(* Author: LC Paulson |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
4 |
*) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
5 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
6 |
theory Finite_Function_Topology |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
7 |
imports Function_Topology "HOL-Library.Poly_Mapping" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
8 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
9 |
begin |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
10 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
11 |
instantiation "poly_mapping" :: (type, real_vector) real_vector |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
12 |
begin |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
13 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
14 |
definition scaleR_poly_mapping_def: |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
15 |
"scaleR r x \<equiv> Abs_poly_mapping (\<lambda>i. (scaleR r (Poly_Mapping.lookup x i)))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
16 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
17 |
instance |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
18 |
proof |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
19 |
qed (simp_all add: scaleR_poly_mapping_def plus_poly_mapping.abs_eq eq_onp_def lookup_add scaleR_add_left scaleR_add_right) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
20 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
21 |
end |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
22 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
23 |
instantiation "poly_mapping" :: (type, real_normed_vector) metric_space |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
24 |
begin |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
25 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
26 |
definition dist_poly_mapping :: "['a \<Rightarrow>\<^sub>0 'b,'a \<Rightarrow>\<^sub>0 'b] \<Rightarrow> real" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
27 |
where dist_poly_mapping_def: |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
28 |
"dist_poly_mapping \<equiv> \<lambda>x y. (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y. dist (Poly_Mapping.lookup x n) (Poly_Mapping.lookup y n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
29 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
30 |
definition uniformity_poly_mapping:: "(('a \<Rightarrow>\<^sub>0 'b) \<times> ('a \<Rightarrow>\<^sub>0 'b)) filter" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
31 |
where uniformity_poly_mapping_def: |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
32 |
"uniformity_poly_mapping \<equiv> INF e\<in>{0<..}. principal {(x, y). dist (x::'a\<Rightarrow>\<^sub>0'b) y < e}" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
33 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
34 |
definition open_poly_mapping:: "('a \<Rightarrow>\<^sub>0 'b)set \<Rightarrow> bool" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
35 |
where open_poly_mapping_def: |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
36 |
"open_poly_mapping U \<equiv> (\<forall>x\<in>U. \<forall>\<^sub>F (x', y) in uniformity. x' = x \<longrightarrow> y \<in> U)" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
37 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
38 |
instance |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
39 |
proof |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
40 |
show "uniformity = (INF e\<in>{0<..}. principal {(x, y::'a \<Rightarrow>\<^sub>0 'b). dist x y < e})" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
41 |
by (simp add: uniformity_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
42 |
next |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
43 |
fix U :: "('a \<Rightarrow>\<^sub>0 'b) set" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
44 |
show "open U = (\<forall>x\<in>U. \<forall>\<^sub>F (x', y) in uniformity. x' = x \<longrightarrow> y \<in> U)" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
45 |
by (simp add: open_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
46 |
next |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
47 |
fix x :: "'a \<Rightarrow>\<^sub>0 'b" and y :: "'a \<Rightarrow>\<^sub>0 'b" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
48 |
show "dist x y = 0 \<longleftrightarrow> x = y" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
49 |
proof |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
50 |
assume "dist x y = 0" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
51 |
then have "(\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y. dist (poly_mapping.lookup x n) (poly_mapping.lookup y n)) = 0" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
52 |
by (simp add: dist_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
53 |
then have "poly_mapping.lookup x n = poly_mapping.lookup y n" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
54 |
if "n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y" for n |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
55 |
using that by (simp add: ordered_comm_monoid_add_class.sum_nonneg_eq_0_iff) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
56 |
then show "x = y" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
57 |
by (metis Un_iff in_keys_iff poly_mapping_eqI) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
58 |
qed (simp add: dist_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
59 |
next |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
60 |
fix x :: "'a \<Rightarrow>\<^sub>0 'b" and y :: "'a \<Rightarrow>\<^sub>0 'b" and z :: "'a \<Rightarrow>\<^sub>0 'b" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
61 |
have "dist x y = (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y \<union> Poly_Mapping.keys z. dist (Poly_Mapping.lookup x n) (Poly_Mapping.lookup y n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
62 |
by (force simp add: dist_poly_mapping_def in_keys_iff intro: sum.mono_neutral_left) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
63 |
also have "... \<le> (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y \<union> Poly_Mapping.keys z. |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
64 |
dist (Poly_Mapping.lookup x n) (Poly_Mapping.lookup z n) + dist (Poly_Mapping.lookup y n) (Poly_Mapping.lookup z n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
65 |
by (simp add: ordered_comm_monoid_add_class.sum_mono dist_triangle2) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
66 |
also have "... = (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y \<union> Poly_Mapping.keys z. dist (Poly_Mapping.lookup x n) (Poly_Mapping.lookup z n)) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
67 |
+ (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y \<union> Poly_Mapping.keys z. dist (Poly_Mapping.lookup y n) (Poly_Mapping.lookup z n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
68 |
by (simp add: sum.distrib) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
69 |
also have "... = (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys z. dist (Poly_Mapping.lookup x n) (Poly_Mapping.lookup z n)) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
70 |
+ (\<Sum>n \<in> Poly_Mapping.keys y \<union> Poly_Mapping.keys z. dist (Poly_Mapping.lookup y n) (Poly_Mapping.lookup z n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
71 |
by (force simp add: dist_poly_mapping_def in_keys_iff intro: sum.mono_neutral_right arg_cong2 [where f = "(+)"]) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
72 |
also have "... = dist x z + dist y z" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
73 |
by (simp add: dist_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
74 |
finally show "dist x y \<le> dist x z + dist y z" . |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
75 |
qed |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
76 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
77 |
end |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
78 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
79 |
instantiation "poly_mapping" :: (type, real_normed_vector) real_normed_vector |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
80 |
begin |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
81 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
82 |
definition norm_poly_mapping :: "('a \<Rightarrow>\<^sub>0 'b) \<Rightarrow> real" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
83 |
where norm_poly_mapping_def: |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
84 |
"norm_poly_mapping \<equiv> \<lambda>x. dist x 0" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
85 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
86 |
definition sgn_poly_mapping :: "('a \<Rightarrow>\<^sub>0 'b) \<Rightarrow> ('a \<Rightarrow>\<^sub>0 'b)" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
87 |
where sgn_poly_mapping_def: |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
88 |
"sgn_poly_mapping \<equiv> \<lambda>x. x /\<^sub>R norm x" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
89 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
90 |
instance |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
91 |
proof |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
92 |
fix x :: "'a \<Rightarrow>\<^sub>0 'b" and y :: "'a \<Rightarrow>\<^sub>0 'b" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
93 |
have 0: "\<forall>i\<in>Poly_Mapping.keys x \<union> Poly_Mapping.keys y - Poly_Mapping.keys (x - y). norm (poly_mapping.lookup (x - y) i) = 0" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
94 |
by (force simp add: dist_poly_mapping_def in_keys_iff intro: sum.mono_neutral_left) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
95 |
have "dist x y = (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y. dist (poly_mapping.lookup x n) (poly_mapping.lookup y n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
96 |
by (simp add: dist_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
97 |
also have "... = (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y. norm (poly_mapping.lookup x n - poly_mapping.lookup y n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
98 |
by (simp add: dist_norm) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
99 |
also have "... = (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y. norm (poly_mapping.lookup (x-y) n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
100 |
by (simp add: lookup_minus) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
101 |
also have "... = (\<Sum>n \<in> Poly_Mapping.keys (x-y). norm (poly_mapping.lookup (x-y) n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
102 |
by (simp add: "0" sum.mono_neutral_cong_right keys_diff) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
103 |
also have "... = norm (x - y)" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
104 |
by (simp add: norm_poly_mapping_def dist_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
105 |
finally show "dist x y = norm (x - y)" . |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
106 |
next |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
107 |
fix x :: "'a \<Rightarrow>\<^sub>0 'b" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
108 |
show "sgn x = x /\<^sub>R norm x" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
109 |
by (simp add: sgn_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
110 |
next |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
111 |
fix x :: "'a \<Rightarrow>\<^sub>0 'b" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
112 |
show "norm x = 0 \<longleftrightarrow> x = 0" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
113 |
by (simp add: norm_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
114 |
next |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
115 |
fix x :: "'a \<Rightarrow>\<^sub>0 'b" and y :: "'a \<Rightarrow>\<^sub>0 'b" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
116 |
have "norm (x + y) = (\<Sum>n \<in> Poly_Mapping.keys (x + y). norm (poly_mapping.lookup x n + poly_mapping.lookup y n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
117 |
by (simp add: norm_poly_mapping_def dist_poly_mapping_def lookup_add) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
118 |
also have "... = (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y. norm (poly_mapping.lookup x n + poly_mapping.lookup y n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
119 |
by (auto simp: simp add: plus_poly_mapping.rep_eq in_keys_iff intro: sum.mono_neutral_left) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
120 |
also have "... \<le> (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y. norm (poly_mapping.lookup x n) + norm (poly_mapping.lookup y n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
121 |
by (simp add: norm_triangle_ineq sum_mono) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
122 |
also have "... = (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y. norm (poly_mapping.lookup x n)) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
123 |
+ (\<Sum>n \<in> Poly_Mapping.keys x \<union> Poly_Mapping.keys y. norm (poly_mapping.lookup y n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
124 |
by (simp add: sum.distrib) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
125 |
also have "... = (\<Sum>n \<in> Poly_Mapping.keys x. norm (poly_mapping.lookup x n)) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
126 |
+ (\<Sum>n \<in> Poly_Mapping.keys y. norm (poly_mapping.lookup y n))" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
127 |
by (force simp add: in_keys_iff intro: arg_cong2 [where f = "(+)"] sum.mono_neutral_right) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
128 |
also have "... = norm x + norm y" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
129 |
by (simp add: norm_poly_mapping_def dist_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
130 |
finally show "norm (x + y) \<le> norm x + norm y" . |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
131 |
next |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
132 |
fix a :: "real" and x :: "'a \<Rightarrow>\<^sub>0 'b" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
133 |
show "norm (a *\<^sub>R x) = \<bar>a\<bar> * norm x" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
134 |
proof (cases "a = 0") |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
135 |
case False |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
136 |
then have [simp]: "Poly_Mapping.keys (a *\<^sub>R x) = Poly_Mapping.keys x" |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
137 |
by (auto simp add: scaleR_poly_mapping_def in_keys_iff) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
138 |
then show ?thesis |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
139 |
by (simp add: norm_poly_mapping_def dist_poly_mapping_def scaleR_poly_mapping_def sum_distrib_left) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
140 |
qed (simp add: norm_poly_mapping_def) |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
141 |
qed |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
142 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
143 |
end |
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
144 |
|
b601c2c87076
type instantiations for poly_mapping as a real_normed_vector
paulson <lp15@cam.ac.uk>
parents:
diff
changeset
|
145 |
end |