| author | paulson <lp15@cam.ac.uk> | 
| Thu, 11 Apr 2019 22:37:49 +0100 | |
| changeset 70131 | c6e1a4806f49 | 
| 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 |