| author | wenzelm | 
| Sat, 24 Feb 2024 11:27:04 +0100 | |
| changeset 79718 | fba02e281b44 | 
| parent 78698 | 1b9388e6eb75 | 
| child 80052 | 35b2143aeec6 | 
| permissions | -rw-r--r-- | 
| 63627 | 1 | (* Title: HOL/Analysis/Path_Connected.thy | 
| 61806 
d2e62ae01cd8
Cauchy's integral formula for circles.  Starting to fix eventually_mono.
 paulson <lp15@cam.ac.uk> parents: 
61762diff
changeset | 2 | Authors: LC Paulson and Robert Himmelmann (TU Muenchen), based on material from HOL Light | 
| 36583 | 3 | *) | 
| 4 | ||
| 69620 | 5 | section \<open>Path-Connectedness\<close> | 
| 36583 | 6 | |
| 7 | theory Path_Connected | |
| 71236 | 8 | imports | 
| 9 | Starlike | |
| 10 | T1_Spaces | |
| 36583 | 11 | begin | 
| 12 | ||
| 60420 | 13 | subsection \<open>Paths and Arcs\<close> | 
| 36583 | 14 | |
| 70136 | 15 | definition\<^marker>\<open>tag important\<close> path :: "(real \<Rightarrow> 'a::topological_space) \<Rightarrow> bool" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 16 |   where "path g \<equiv> continuous_on {0..1} g"
 | 
| 36583 | 17 | |
| 70136 | 18 | definition\<^marker>\<open>tag important\<close> pathstart :: "(real \<Rightarrow> 'a::topological_space) \<Rightarrow> 'a" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 19 | where "pathstart g \<equiv> g 0" | 
| 36583 | 20 | |
| 70136 | 21 | definition\<^marker>\<open>tag important\<close> pathfinish :: "(real \<Rightarrow> 'a::topological_space) \<Rightarrow> 'a" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 22 | where "pathfinish g \<equiv> g 1" | 
| 36583 | 23 | |
| 70136 | 24 | definition\<^marker>\<open>tag important\<close> path_image :: "(real \<Rightarrow> 'a::topological_space) \<Rightarrow> 'a set" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 25 |   where "path_image g \<equiv> g ` {0 .. 1}"
 | 
| 36583 | 26 | |
| 70136 | 27 | definition\<^marker>\<open>tag important\<close> reversepath :: "(real \<Rightarrow> 'a::topological_space) \<Rightarrow> real \<Rightarrow> 'a" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 28 | where "reversepath g \<equiv> (\<lambda>x. g(1 - x))" | 
| 36583 | 29 | |
| 70136 | 30 | definition\<^marker>\<open>tag important\<close> joinpaths :: "(real \<Rightarrow> 'a::topological_space) \<Rightarrow> (real \<Rightarrow> 'a) \<Rightarrow> real \<Rightarrow> 'a" | 
| 36583 | 31 | (infixr "+++" 75) | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 32 | where "g1 +++ g2 \<equiv> (\<lambda>x. if x \<le> 1/2 then g1 (2 * x) else g2 (2 * x - 1))" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 33 | |
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 34 | definition\<^marker>\<open>tag important\<close> loop_free :: "(real \<Rightarrow> 'a::topological_space) \<Rightarrow> bool" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 35 |   where "loop_free g \<equiv> \<forall>x\<in>{0..1}. \<forall>y\<in>{0..1}. g x = g y \<longrightarrow> x = y \<or> x = 0 \<and> y = 1 \<or> x = 1 \<and> y = 0"
 | 
| 36583 | 36 | |
| 70136 | 37 | definition\<^marker>\<open>tag important\<close> simple_path :: "(real \<Rightarrow> 'a::topological_space) \<Rightarrow> bool" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 38 | where "simple_path g \<equiv> path g \<and> loop_free g" | 
| 36583 | 39 | |
| 70136 | 40 | definition\<^marker>\<open>tag important\<close> arc :: "(real \<Rightarrow> 'a :: topological_space) \<Rightarrow> bool" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 41 |   where "arc g \<equiv> path g \<and> inj_on g {0..1}"
 | 
| 36583 | 42 | |
| 49653 | 43 | |
| 70136 | 44 | subsection\<^marker>\<open>tag unimportant\<close>\<open>Invariance theorems\<close> | 
| 60303 | 45 | |
| 46 | lemma path_eq: "path p \<Longrightarrow> (\<And>t. t \<in> {0..1} \<Longrightarrow> p t = q t) \<Longrightarrow> path q"
 | |
| 47 | using continuous_on_eq path_def by blast | |
| 48 | ||
| 68096 | 49 | lemma path_continuous_image: "path g \<Longrightarrow> continuous_on (path_image g) f \<Longrightarrow> path(f \<circ> g)" | 
| 60303 | 50 | unfolding path_def path_image_def | 
| 51 | using continuous_on_compose by blast | |
| 52 | ||
| 72256 | 53 | lemma path_translation_eq: | 
| 54 | fixes g :: "real \<Rightarrow> 'a :: real_normed_vector" | |
| 55 | shows "path((\<lambda>x. a + x) \<circ> g) = path g" | |
| 56 | using continuous_on_translation_eq path_def by blast | |
| 57 | ||
| 60303 | 58 | lemma path_linear_image_eq: | 
| 59 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | |
| 60 | assumes "linear f" "inj f" | |
| 68096 | 61 | shows "path(f \<circ> g) = path g" | 
| 60303 | 62 | proof - | 
| 63 | from linear_injective_left_inverse [OF assms] | |
| 64 | obtain h where h: "linear h" "h \<circ> f = id" | |
| 65 | by blast | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 66 | with assms show ?thesis | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 67 | by (metis comp_assoc id_comp linear_continuous_on linear_linear path_continuous_image) | 
| 60303 | 68 | qed | 
| 69 | ||
| 68096 | 70 | lemma pathstart_translation: "pathstart((\<lambda>x. a + x) \<circ> g) = a + pathstart g" | 
| 60303 | 71 | by (simp add: pathstart_def) | 
| 72 | ||
| 68096 | 73 | lemma pathstart_linear_image_eq: "linear f \<Longrightarrow> pathstart(f \<circ> g) = f(pathstart g)" | 
| 60303 | 74 | by (simp add: pathstart_def) | 
| 75 | ||
| 68096 | 76 | lemma pathfinish_translation: "pathfinish((\<lambda>x. a + x) \<circ> g) = a + pathfinish g" | 
| 60303 | 77 | by (simp add: pathfinish_def) | 
| 78 | ||
| 68096 | 79 | lemma pathfinish_linear_image: "linear f \<Longrightarrow> pathfinish(f \<circ> g) = f(pathfinish g)" | 
| 60303 | 80 | by (simp add: pathfinish_def) | 
| 81 | ||
| 68096 | 82 | lemma path_image_translation: "path_image((\<lambda>x. a + x) \<circ> g) = (\<lambda>x. a + x) ` (path_image g)" | 
| 60303 | 83 | by (simp add: image_comp path_image_def) | 
| 84 | ||
| 68096 | 85 | lemma path_image_linear_image: "linear f \<Longrightarrow> path_image(f \<circ> g) = f ` (path_image g)" | 
| 60303 | 86 | by (simp add: image_comp path_image_def) | 
| 87 | ||
| 68096 | 88 | lemma reversepath_translation: "reversepath((\<lambda>x. a + x) \<circ> g) = (\<lambda>x. a + x) \<circ> reversepath g" | 
| 60303 | 89 | by (rule ext) (simp add: reversepath_def) | 
| 36583 | 90 | |
| 68096 | 91 | lemma reversepath_linear_image: "linear f \<Longrightarrow> reversepath(f \<circ> g) = f \<circ> reversepath g" | 
| 60303 | 92 | by (rule ext) (simp add: reversepath_def) | 
| 93 | ||
| 94 | lemma joinpaths_translation: | |
| 68096 | 95 | "((\<lambda>x. a + x) \<circ> g1) +++ ((\<lambda>x. a + x) \<circ> g2) = (\<lambda>x. a + x) \<circ> (g1 +++ g2)" | 
| 60303 | 96 | by (rule ext) (simp add: joinpaths_def) | 
| 97 | ||
| 68096 | 98 | lemma joinpaths_linear_image: "linear f \<Longrightarrow> (f \<circ> g1) +++ (f \<circ> g2) = f \<circ> (g1 +++ g2)" | 
| 60303 | 99 | by (rule ext) (simp add: joinpaths_def) | 
| 100 | ||
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 101 | lemma loop_free_translation_eq: | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 102 | fixes g :: "real \<Rightarrow> 'a::euclidean_space" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 103 | shows "loop_free((\<lambda>x. a + x) \<circ> g) = loop_free g" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 104 | by (simp add: loop_free_def) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 105 | |
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 106 | lemma simple_path_translation_eq: | 
| 60303 | 107 | fixes g :: "real \<Rightarrow> 'a::euclidean_space" | 
| 68096 | 108 | shows "simple_path((\<lambda>x. a + x) \<circ> g) = simple_path g" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 109 | by (simp add: simple_path_def loop_free_translation_eq path_translation_eq) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 110 | |
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 111 | lemma loop_free_linear_image_eq: | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 112 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 113 | assumes "linear f" "inj f" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 114 | shows "loop_free(f \<circ> g) = loop_free g" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 115 | using assms inj_on_eq_iff [of f] by (auto simp: loop_free_def) | 
| 60303 | 116 | |
| 117 | lemma simple_path_linear_image_eq: | |
| 118 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | |
| 119 | assumes "linear f" "inj f" | |
| 68096 | 120 | shows "simple_path(f \<circ> g) = simple_path g" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 121 | using assms | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 122 | by (simp add: loop_free_linear_image_eq path_linear_image_eq simple_path_def) | 
| 60303 | 123 | |
| 124 | lemma arc_translation_eq: | |
| 125 | fixes g :: "real \<Rightarrow> 'a::euclidean_space" | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 126 | shows "arc((\<lambda>x. a + x) \<circ> g) \<longleftrightarrow> arc g" | 
| 60303 | 127 | by (auto simp: arc_def inj_on_def path_translation_eq) | 
| 128 | ||
| 129 | lemma arc_linear_image_eq: | |
| 130 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | |
| 131 | assumes "linear f" "inj f" | |
| 68096 | 132 | shows "arc(f \<circ> g) = arc g" | 
| 60303 | 133 | using assms inj_on_eq_iff [of f] | 
| 134 | by (auto simp: arc_def inj_on_def path_linear_image_eq) | |
| 135 | ||
| 69514 | 136 | |
| 70136 | 137 | subsection\<^marker>\<open>tag unimportant\<close>\<open>Basic lemmas about paths\<close> | 
| 60303 | 138 | |
| 74007 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 139 | lemma path_of_real: "path complex_of_real" | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 140 | unfolding path_def by (intro continuous_intros) | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 141 | |
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 142 | lemma path_const: "path (\<lambda>t. a)" for a::"'a::real_normed_vector" | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 143 | unfolding path_def by (intro continuous_intros) | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 144 | |
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 145 | lemma path_minus: "path g \<Longrightarrow> path (\<lambda>t. - g t)" for g::"real\<Rightarrow>'a::real_normed_vector" | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 146 | unfolding path_def by (intro continuous_intros) | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 147 | |
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 148 | lemma path_add: "\<lbrakk>path f; path g\<rbrakk> \<Longrightarrow> path (\<lambda>t. f t + g t)" for f::"real\<Rightarrow>'a::real_normed_vector" | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 149 | unfolding path_def by (intro continuous_intros) | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 150 | |
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 151 | lemma path_diff: "\<lbrakk>path f; path g\<rbrakk> \<Longrightarrow> path (\<lambda>t. f t - g t)" for f::"real\<Rightarrow>'a::real_normed_vector" | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 152 | unfolding path_def by (intro continuous_intros) | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 153 | |
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 154 | lemma path_mult: "\<lbrakk>path f; path g\<rbrakk> \<Longrightarrow> path (\<lambda>t. f t * g t)" for f::"real\<Rightarrow>'a::real_normed_field" | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 155 | unfolding path_def by (intro continuous_intros) | 
| 
df976eefcba0
A few new lemmas and simplifications
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 156 | |
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 157 | lemma pathin_iff_path_real [simp]: "pathin euclideanreal g \<longleftrightarrow> path g" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 158 | by (simp add: pathin_def path_def) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 159 | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 160 | lemma continuous_on_path: "path f \<Longrightarrow> t \<subseteq> {0..1} \<Longrightarrow> continuous_on t f"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 161 | using continuous_on_subset path_def by blast | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 162 | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 163 | lemma inj_on_imp_loop_free: "inj_on g {0..1} \<Longrightarrow> loop_free g"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 164 | by (simp add: inj_onD loop_free_def) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 165 | |
| 60303 | 166 | lemma arc_imp_simple_path: "arc g \<Longrightarrow> simple_path g" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 167 | by (simp add: arc_def inj_on_imp_loop_free simple_path_def) | 
| 60303 | 168 | |
| 169 | lemma arc_imp_path: "arc g \<Longrightarrow> path g" | |
| 170 | using arc_def by blast | |
| 171 | ||
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 172 | lemma arc_imp_inj_on: "arc g \<Longrightarrow> inj_on g {0..1}"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 173 | by (auto simp: arc_def) | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 174 | |
| 60303 | 175 | lemma simple_path_imp_path: "simple_path g \<Longrightarrow> path g" | 
| 176 | using simple_path_def by blast | |
| 177 | ||
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 178 | lemma loop_free_cases: "loop_free g \<Longrightarrow> inj_on g {0..1} \<or> pathfinish g = pathstart g"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 179 | by (force simp: inj_on_def loop_free_def pathfinish_def pathstart_def) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 180 | |
| 60303 | 181 | lemma simple_path_cases: "simple_path g \<Longrightarrow> arc g \<or> pathfinish g = pathstart g" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 182 | using arc_def loop_free_cases simple_path_def by blast | 
| 60303 | 183 | |
| 184 | lemma simple_path_imp_arc: "simple_path g \<Longrightarrow> pathfinish g \<noteq> pathstart g \<Longrightarrow> arc g" | |
| 185 | using simple_path_cases by auto | |
| 186 | ||
| 187 | lemma arc_distinct_ends: "arc g \<Longrightarrow> pathfinish g \<noteq> pathstart g" | |
| 188 | unfolding arc_def inj_on_def pathfinish_def pathstart_def | |
| 189 | by fastforce | |
| 190 | ||
| 191 | lemma arc_simple_path: "arc g \<longleftrightarrow> simple_path g \<and> pathfinish g \<noteq> pathstart g" | |
| 192 | using arc_distinct_ends arc_imp_simple_path simple_path_cases by blast | |
| 193 | ||
| 194 | lemma simple_path_eq_arc: "pathfinish g \<noteq> pathstart g \<Longrightarrow> (simple_path g = arc g)" | |
| 195 | by (simp add: arc_simple_path) | |
| 36583 | 196 | |
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 197 | lemma path_image_const [simp]: "path_image (\<lambda>t. a) = {a}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 198 | by (force simp: path_image_def) | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 199 | |
| 60974 
6a6f15d8fbc4
New material and fixes related to the forthcoming Stone-Weierstrass development
 paulson <lp15@cam.ac.uk> parents: 
60809diff
changeset | 200 | lemma path_image_nonempty [simp]: "path_image g \<noteq> {}"
 | 
| 56188 | 201 | unfolding path_image_def image_is_empty box_eq_empty | 
| 53640 | 202 | by auto | 
| 36583 | 203 | |
| 53640 | 204 | lemma pathstart_in_path_image[intro]: "pathstart g \<in> path_image g" | 
| 205 | unfolding pathstart_def path_image_def | |
| 206 | by auto | |
| 36583 | 207 | |
| 53640 | 208 | lemma pathfinish_in_path_image[intro]: "pathfinish g \<in> path_image g" | 
| 209 | unfolding pathfinish_def path_image_def | |
| 210 | by auto | |
| 211 | ||
| 212 | lemma connected_path_image[intro]: "path g \<Longrightarrow> connected (path_image g)" | |
| 36583 | 213 | unfolding path_def path_image_def | 
| 60303 | 214 | using connected_continuous_image connected_Icc by blast | 
| 36583 | 215 | |
| 53640 | 216 | lemma compact_path_image[intro]: "path g \<Longrightarrow> compact (path_image g)" | 
| 36583 | 217 | unfolding path_def path_image_def | 
| 60303 | 218 | using compact_continuous_image connected_Icc by blast | 
| 36583 | 219 | |
| 53640 | 220 | lemma reversepath_reversepath[simp]: "reversepath (reversepath g) = g" | 
| 221 | unfolding reversepath_def | |
| 222 | by auto | |
| 36583 | 223 | |
| 53640 | 224 | lemma pathstart_reversepath[simp]: "pathstart (reversepath g) = pathfinish g" | 
| 225 | unfolding pathstart_def reversepath_def pathfinish_def | |
| 226 | by auto | |
| 36583 | 227 | |
| 53640 | 228 | lemma pathfinish_reversepath[simp]: "pathfinish (reversepath g) = pathstart g" | 
| 229 | unfolding pathstart_def reversepath_def pathfinish_def | |
| 230 | by auto | |
| 36583 | 231 | |
| 73795 | 232 | lemma reversepath_o: "reversepath g = g \<circ> (-)1" | 
| 233 | by (auto simp: reversepath_def) | |
| 234 | ||
| 49653 | 235 | lemma pathstart_join[simp]: "pathstart (g1 +++ g2) = pathstart g1" | 
| 53640 | 236 | unfolding pathstart_def joinpaths_def pathfinish_def | 
| 237 | by auto | |
| 36583 | 238 | |
| 49653 | 239 | lemma pathfinish_join[simp]: "pathfinish (g1 +++ g2) = pathfinish g2" | 
| 53640 | 240 | unfolding pathstart_def joinpaths_def pathfinish_def | 
| 241 | by auto | |
| 36583 | 242 | |
| 53640 | 243 | lemma path_image_reversepath[simp]: "path_image (reversepath g) = path_image g" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 244 | by (metis cancel_comm_monoid_add_class.diff_cancel diff_zero image_comp | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 245 | image_diff_atLeastAtMost path_image_def reversepath_o) | 
| 36583 | 246 | |
| 53640 | 247 | lemma path_reversepath [simp]: "path (reversepath g) \<longleftrightarrow> path g" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 248 | by (metis continuous_on_compose continuous_on_op_minus image_comp image_ident path_def path_image_def path_image_reversepath reversepath_o reversepath_reversepath) | 
| 49653 | 249 | |
| 60303 | 250 | lemma arc_reversepath: | 
| 251 | assumes "arc g" shows "arc(reversepath g)" | |
| 252 | proof - | |
| 253 |   have injg: "inj_on g {0..1}"
 | |
| 254 | using assms | |
| 255 | by (simp add: arc_def) | |
| 256 | have **: "\<And>x y::real. 1-x = 1-y \<Longrightarrow> x = y" | |
| 257 | by simp | |
| 258 | show ?thesis | |
| 68096 | 259 | using assms by (clarsimp simp: arc_def intro!: inj_onI) (simp add: inj_onD reversepath_def **) | 
| 60303 | 260 | qed | 
| 261 | ||
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 262 | lemma loop_free_reversepath: | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 263 | assumes "loop_free g" shows "loop_free(reversepath g)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 264 | using assms by (simp add: reversepath_def loop_free_def Ball_def) (smt (verit)) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 265 | |
| 60303 | 266 | lemma simple_path_reversepath: "simple_path g \<Longrightarrow> simple_path (reversepath g)" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 267 | by (simp add: loop_free_reversepath simple_path_def) | 
| 60303 | 268 | |
| 49653 | 269 | lemmas reversepath_simps = | 
| 270 | path_reversepath path_image_reversepath pathstart_reversepath pathfinish_reversepath | |
| 36583 | 271 | |
| 49653 | 272 | lemma path_join[simp]: | 
| 273 | assumes "pathfinish g1 = pathstart g2" | |
| 274 | shows "path (g1 +++ g2) \<longleftrightarrow> path g1 \<and> path g2" | |
| 275 | unfolding path_def pathfinish_def pathstart_def | |
| 51478 
270b21f3ae0a
move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
 hoelzl parents: 
50935diff
changeset | 276 | proof safe | 
| 
270b21f3ae0a
move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
 hoelzl parents: 
50935diff
changeset | 277 |   assume cont: "continuous_on {0..1} (g1 +++ g2)"
 | 
| 
270b21f3ae0a
move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
 hoelzl parents: 
50935diff
changeset | 278 |   have g1: "continuous_on {0..1} g1 \<longleftrightarrow> continuous_on {0..1} ((g1 +++ g2) \<circ> (\<lambda>x. x / 2))"
 | 
| 
270b21f3ae0a
move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
 hoelzl parents: 
50935diff
changeset | 279 | by (intro continuous_on_cong refl) (auto simp: joinpaths_def) | 
| 
270b21f3ae0a
move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
 hoelzl parents: 
50935diff
changeset | 280 |   have g2: "continuous_on {0..1} g2 \<longleftrightarrow> continuous_on {0..1} ((g1 +++ g2) \<circ> (\<lambda>x. x / 2 + 1/2))"
 | 
| 53640 | 281 | using assms | 
| 282 | by (intro continuous_on_cong refl) (auto simp: joinpaths_def pathfinish_def pathstart_def) | |
| 283 |   show "continuous_on {0..1} g1" and "continuous_on {0..1} g2"
 | |
| 51481 
ef949192e5d6
move continuous_on_inv to HOL image (simplifies isCont_inverse_function)
 hoelzl parents: 
51478diff
changeset | 284 | unfolding g1 g2 | 
| 56371 
fb9ae0727548
extend continuous_intros; remove continuous_on_intros and isCont_intros
 hoelzl parents: 
56188diff
changeset | 285 | by (auto intro!: continuous_intros continuous_on_subset[OF cont] simp del: o_apply) | 
| 51478 
270b21f3ae0a
move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
 hoelzl parents: 
50935diff
changeset | 286 | next | 
| 
270b21f3ae0a
move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
 hoelzl parents: 
50935diff
changeset | 287 |   assume g1g2: "continuous_on {0..1} g1" "continuous_on {0..1} g2"
 | 
| 
270b21f3ae0a
move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
 hoelzl parents: 
50935diff
changeset | 288 |   have 01: "{0 .. 1} = {0..1/2} \<union> {1/2 .. 1::real}"
 | 
| 36583 | 289 | by auto | 
| 53640 | 290 |   {
 | 
| 291 | fix x :: real | |
| 292 | assume "0 \<le> x" and "x \<le> 1" | |
| 293 |     then have "x \<in> (\<lambda>x. x * 2) ` {0..1 / 2}"
 | |
| 294 | by (intro image_eqI[where x="x/2"]) auto | |
| 295 | } | |
| 51478 
270b21f3ae0a
move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
 hoelzl parents: 
50935diff
changeset | 296 | note 1 = this | 
| 53640 | 297 |   {
 | 
| 298 | fix x :: real | |
| 299 | assume "0 \<le> x" and "x \<le> 1" | |
| 300 |     then have "x \<in> (\<lambda>x. x * 2 - 1) ` {1 / 2..1}"
 | |
| 301 | by (intro image_eqI[where x="x/2 + 1/2"]) auto | |
| 302 | } | |
| 51478 
270b21f3ae0a
move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
 hoelzl parents: 
50935diff
changeset | 303 | note 2 = this | 
| 49653 | 304 |   show "continuous_on {0..1} (g1 +++ g2)"
 | 
| 53640 | 305 | using assms | 
| 306 | unfolding joinpaths_def 01 | |
| 56371 
fb9ae0727548
extend continuous_intros; remove continuous_on_intros and isCont_intros
 hoelzl parents: 
56188diff
changeset | 307 | apply (intro continuous_on_cases closed_atLeastAtMost g1g2[THEN continuous_on_compose2] continuous_intros) | 
| 53640 | 308 | apply (auto simp: field_simps pathfinish_def pathstart_def intro!: 1 2) | 
| 309 | done | |
| 49653 | 310 | qed | 
| 36583 | 311 | |
| 69514 | 312 | |
| 70136 | 313 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Path Images\<close> | 
| 60303 | 314 | |
| 315 | lemma bounded_path_image: "path g \<Longrightarrow> bounded(path_image g)" | |
| 316 | by (simp add: compact_imp_bounded compact_path_image) | |
| 317 | ||
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 318 | lemma closed_path_image: | 
| 60303 | 319 | fixes g :: "real \<Rightarrow> 'a::t2_space" | 
| 320 | shows "path g \<Longrightarrow> closed(path_image g)" | |
| 321 | by (metis compact_path_image compact_imp_closed) | |
| 322 | ||
| 323 | lemma connected_simple_path_image: "simple_path g \<Longrightarrow> connected(path_image g)" | |
| 324 | by (metis connected_path_image simple_path_imp_path) | |
| 325 | ||
| 326 | lemma compact_simple_path_image: "simple_path g \<Longrightarrow> compact(path_image g)" | |
| 327 | by (metis compact_path_image simple_path_imp_path) | |
| 328 | ||
| 329 | lemma bounded_simple_path_image: "simple_path g \<Longrightarrow> bounded(path_image g)" | |
| 330 | by (metis bounded_path_image simple_path_imp_path) | |
| 331 | ||
| 332 | lemma closed_simple_path_image: | |
| 333 | fixes g :: "real \<Rightarrow> 'a::t2_space" | |
| 334 | shows "simple_path g \<Longrightarrow> closed(path_image g)" | |
| 335 | by (metis closed_path_image simple_path_imp_path) | |
| 336 | ||
| 337 | lemma connected_arc_image: "arc g \<Longrightarrow> connected(path_image g)" | |
| 338 | by (metis connected_path_image arc_imp_path) | |
| 339 | ||
| 340 | lemma compact_arc_image: "arc g \<Longrightarrow> compact(path_image g)" | |
| 341 | by (metis compact_path_image arc_imp_path) | |
| 342 | ||
| 343 | lemma bounded_arc_image: "arc g \<Longrightarrow> bounded(path_image g)" | |
| 344 | by (metis bounded_path_image arc_imp_path) | |
| 345 | ||
| 346 | lemma closed_arc_image: | |
| 347 | fixes g :: "real \<Rightarrow> 'a::t2_space" | |
| 348 | shows "arc g \<Longrightarrow> closed(path_image g)" | |
| 349 | by (metis closed_path_image arc_imp_path) | |
| 350 | ||
| 53640 | 351 | lemma path_image_join_subset: "path_image (g1 +++ g2) \<subseteq> path_image g1 \<union> path_image g2" | 
| 352 | unfolding path_image_def joinpaths_def | |
| 353 | by auto | |
| 36583 | 354 | |
| 355 | lemma subset_path_image_join: | |
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 356 | assumes "path_image g1 \<subseteq> S" and "path_image g2 \<subseteq> S" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 357 | shows "path_image (g1 +++ g2) \<subseteq> S" | 
| 53640 | 358 | using path_image_join_subset[of g1 g2] and assms | 
| 359 | by auto | |
| 36583 | 360 | |
| 361 | lemma path_image_join: | |
| 72256 | 362 | assumes "pathfinish g1 = pathstart g2" | 
| 363 | shows "path_image(g1 +++ g2) = path_image g1 \<union> path_image g2" | |
| 364 | proof - | |
| 365 | have "path_image g1 \<subseteq> path_image (g1 +++ g2)" | |
| 366 | proof (clarsimp simp: path_image_def joinpaths_def) | |
| 367 | fix u::real | |
| 368 | assume "0 \<le> u" "u \<le> 1" | |
| 369 |     then show "g1 u \<in> (\<lambda>x. g1 (2 * x)) ` ({0..1} \<inter> {x. x * 2 \<le> 1})"
 | |
| 370 | by (rule_tac x="u/2" in image_eqI) auto | |
| 371 | qed | |
| 372 | moreover | |
| 373 |   have \<section>: "g2 u \<in> (\<lambda>x. g2 (2 * x - 1)) ` ({0..1} \<inter> {x. \<not> x * 2 \<le> 1})" 
 | |
| 374 | if "0 < u" "u \<le> 1" for u | |
| 375 | using that assms | |
| 376 | by (rule_tac x="(u+1)/2" in image_eqI) (auto simp: field_simps pathfinish_def pathstart_def) | |
| 377 |   have "g2 0 \<in> (\<lambda>x. g1 (2 * x)) ` ({0..1} \<inter> {x. x * 2 \<le> 1})"
 | |
| 378 | using assms | |
| 379 | by (rule_tac x="1/2" in image_eqI) (auto simp: pathfinish_def pathstart_def) | |
| 380 | then have "path_image g2 \<subseteq> path_image (g1 +++ g2)" | |
| 381 | by (auto simp: path_image_def joinpaths_def intro!: \<section>) | |
| 382 | ultimately show ?thesis | |
| 383 | using path_image_join_subset by blast | |
| 384 | qed | |
| 36583 | 385 | |
| 386 | lemma not_in_path_image_join: | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 387 | assumes "x \<notin> path_image g1" and "x \<notin> path_image g2" | 
| 53640 | 388 | shows "x \<notin> path_image (g1 +++ g2)" | 
| 389 | using assms and path_image_join_subset[of g1 g2] | |
| 390 | by auto | |
| 36583 | 391 | |
| 68096 | 392 | lemma pathstart_compose: "pathstart(f \<circ> p) = f(pathstart p)" | 
| 60303 | 393 | by (simp add: pathstart_def) | 
| 394 | ||
| 68096 | 395 | lemma pathfinish_compose: "pathfinish(f \<circ> p) = f(pathfinish p)" | 
| 60303 | 396 | by (simp add: pathfinish_def) | 
| 397 | ||
| 68096 | 398 | lemma path_image_compose: "path_image (f \<circ> p) = f ` (path_image p)" | 
| 60303 | 399 | by (simp add: image_comp path_image_def) | 
| 400 | ||
| 68096 | 401 | lemma path_compose_join: "f \<circ> (p +++ q) = (f \<circ> p) +++ (f \<circ> q)" | 
| 60303 | 402 | by (rule ext) (simp add: joinpaths_def) | 
| 403 | ||
| 68096 | 404 | lemma path_compose_reversepath: "f \<circ> reversepath p = reversepath(f \<circ> p)" | 
| 60303 | 405 | by (rule ext) (simp add: reversepath_def) | 
| 406 | ||
| 61762 
d50b993b4fb9
Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
 paulson <lp15@cam.ac.uk> parents: 
61738diff
changeset | 407 | lemma joinpaths_eq: | 
| 60303 | 408 |   "(\<And>t. t \<in> {0..1} \<Longrightarrow> p t = p' t) \<Longrightarrow>
 | 
| 409 |    (\<And>t. t \<in> {0..1} \<Longrightarrow> q t = q' t)
 | |
| 410 |    \<Longrightarrow>  t \<in> {0..1} \<Longrightarrow> (p +++ q) t = (p' +++ q') t"
 | |
| 411 | by (auto simp: joinpaths_def) | |
| 412 | ||
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 413 | lemma loop_free_inj_on: "loop_free g \<Longrightarrow> inj_on g {0<..<1}"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 414 | by (force simp: inj_on_def loop_free_def) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 415 | |
| 60303 | 416 | lemma simple_path_inj_on: "simple_path g \<Longrightarrow> inj_on g {0<..<1}"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 417 | using loop_free_inj_on simple_path_def by auto | 
| 60303 | 418 | |
| 419 | ||
| 70136 | 420 | subsection\<^marker>\<open>tag unimportant\<close>\<open>Simple paths with the endpoints removed\<close> | 
| 60303 | 421 | |
| 422 | lemma simple_path_endless: | |
| 72256 | 423 | assumes "simple_path c" | 
| 424 |   shows "path_image c - {pathstart c,pathfinish c} = c ` {0<..<1}" (is "?lhs = ?rhs")
 | |
| 425 | proof | |
| 426 | show "?lhs \<subseteq> ?rhs" | |
| 427 | using less_eq_real_def by (auto simp: path_image_def pathstart_def pathfinish_def) | |
| 428 | show "?rhs \<subseteq> ?lhs" | |
| 429 | using assms | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 430 | apply (simp add: image_subset_iff path_image_def pathstart_def pathfinish_def simple_path_def loop_free_def Ball_def) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 431 | by (smt (verit)) | 
| 72256 | 432 | qed | 
| 36583 | 433 | |
| 60303 | 434 | lemma connected_simple_path_endless: | 
| 72256 | 435 | assumes "simple_path c" | 
| 436 |   shows "connected(path_image c - {pathstart c,pathfinish c})"
 | |
| 437 | proof - | |
| 438 |   have "continuous_on {0<..<1} c"
 | |
| 439 | using assms by (simp add: simple_path_def continuous_on_path path_def subset_iff) | |
| 440 |   then have "connected (c ` {0<..<1})"
 | |
| 441 | using connected_Ioo connected_continuous_image by blast | |
| 442 | then show ?thesis | |
| 443 | using assms by (simp add: simple_path_endless) | |
| 444 | qed | |
| 60303 | 445 | |
| 446 | lemma nonempty_simple_path_endless: | |
| 447 |     "simple_path c \<Longrightarrow> path_image c - {pathstart c,pathfinish c} \<noteq> {}"
 | |
| 448 | by (simp add: simple_path_endless) | |
| 449 | ||
| 78698 | 450 | lemma simple_path_continuous_image: | 
| 451 | assumes "simple_path f" "continuous_on (path_image f) g" "inj_on g (path_image f)" | |
| 452 | shows "simple_path (g \<circ> f)" | |
| 453 | unfolding simple_path_def | |
| 454 | proof | |
| 455 | show "path (g \<circ> f)" | |
| 456 | using assms unfolding simple_path_def by (intro path_continuous_image) auto | |
| 457 |   from assms have [simp]: "g (f x) = g (f y) \<longleftrightarrow> f x = f y" if "x \<in> {0..1}" "y \<in> {0..1}" for x y
 | |
| 458 | unfolding inj_on_def path_image_def using that by fastforce | |
| 459 | show "loop_free (g \<circ> f)" | |
| 460 | using assms(1) by (auto simp: loop_free_def simple_path_def) | |
| 461 | qed | |
| 60303 | 462 | |
| 70136 | 463 | subsection\<^marker>\<open>tag unimportant\<close>\<open>The operations on paths\<close> | 
| 60303 | 464 | |
| 465 | lemma path_image_subset_reversepath: "path_image(reversepath g) \<le> path_image g" | |
| 72256 | 466 | by simp | 
| 60303 | 467 | |
| 468 | lemma path_imp_reversepath: "path g \<Longrightarrow> path(reversepath g)" | |
| 72256 | 469 | by simp | 
| 60303 | 470 | |
| 61204 | 471 | lemma half_bounded_equal: "1 \<le> x * 2 \<Longrightarrow> x * 2 \<le> 1 \<longleftrightarrow> x = (1/2::real)" | 
| 472 | by simp | |
| 60303 | 473 | |
| 474 | lemma continuous_on_joinpaths: | |
| 475 |   assumes "continuous_on {0..1} g1" "continuous_on {0..1} g2" "pathfinish g1 = pathstart g2"
 | |
| 476 |     shows "continuous_on {0..1} (g1 +++ g2)"
 | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 477 | using assms path_def path_join by blast | 
| 60303 | 478 | |
| 479 | lemma path_join_imp: "\<lbrakk>path g1; path g2; pathfinish g1 = pathstart g2\<rbrakk> \<Longrightarrow> path(g1 +++ g2)" | |
| 72256 | 480 | by simp | 
| 60303 | 481 | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 482 | lemma arc_join: | 
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 483 | assumes "arc g1" "arc g2" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 484 | "pathfinish g1 = pathstart g2" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 485 |           "path_image g1 \<inter> path_image g2 \<subseteq> {pathstart g2}"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 486 | shows "arc(g1 +++ g2)" | 
| 60303 | 487 | proof - | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 488 |   have injg1: "inj_on g1 {0..1}" and injg2: "inj_on g2 {0..1}" 
 | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 489 |      and g11: "g1 1 = g2 0" and sb: "g1 ` {0..1} \<inter> g2 ` {0..1} \<subseteq> {g2 0}"
 | 
| 60303 | 490 | using assms | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 491 | by (auto simp: arc_def pathfinish_def pathstart_def path_image_def) | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 492 |   { fix x and y::real
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 493 | assume xy: "g2 (2 * x - 1) = g1 (2 * y)" "x \<le> 1" "0 \<le> y" " y * 2 \<le> 1" "\<not> x * 2 \<le> 1" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 494 | then have "g1 (2 * y) = g2 0" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 495 | using sb by force | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 496 | then have False | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 497 | using xy inj_onD injg2 by fastforce | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 498 | } note * = this | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 499 |   have "inj_on (g1 +++ g2) {0..1}"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 500 | using inj_onD [OF injg1] inj_onD [OF injg2] * | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 501 | by (simp add: inj_on_def joinpaths_def Ball_def) (smt (verit)) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 502 | then show ?thesis | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 503 | using arc_def assms path_join_imp by blast | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 504 | qed | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 505 | |
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 506 | lemma simple_path_join_loop: | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 507 | assumes "arc g1" "arc g2" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 508 | "pathfinish g1 = pathstart g2" "pathfinish g2 = pathstart g1" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 509 |           "path_image g1 \<inter> path_image g2 \<subseteq> {pathstart g1, pathstart g2}"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 510 | shows "simple_path(g1 +++ g2)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 511 | proof - | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 512 |   have injg1: "inj_on g1 {0..1}" and injg2: "inj_on g2 {0..1}"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 513 | using assms by (auto simp add: arc_def) | 
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 514 | have g12: "g1 1 = g2 0" | 
| 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 515 | and g21: "g2 1 = g1 0" | 
| 60303 | 516 |    and sb:  "g1 ` {0..1} \<inter> g2 ` {0..1} \<subseteq> {g1 0, g2 0}"
 | 
| 517 | using assms | |
| 518 | by (simp_all add: arc_def pathfinish_def pathstart_def path_image_def) | |
| 519 |   { fix x and y::real
 | |
| 72256 | 520 | assume g2_eq: "g2 (2 * x - 1) = g1 (2 * y)" | 
| 521 | and xyI: "x \<noteq> 1 \<or> y \<noteq> 0" | |
| 522 | and xy: "x \<le> 1" "0 \<le> y" " y * 2 \<le> 1" "\<not> x * 2 \<le> 1" | |
| 523 | then consider "g1 (2 * y) = g1 0" | "g1 (2 * y) = g2 0" | |
| 524 | using sb by force | |
| 525 | then have False | |
| 526 | proof cases | |
| 527 | case 1 | |
| 528 | then have "y = 0" | |
| 529 | using xy g2_eq by (auto dest!: inj_onD [OF injg1]) | |
| 530 | then show ?thesis | |
| 531 | using xy g2_eq xyI by (auto dest: inj_onD [OF injg2] simp flip: g21) | |
| 532 | next | |
| 533 | case 2 | |
| 534 | then have "2*x = 1" | |
| 535 | using g2_eq g12 inj_onD [OF injg2] atLeastAtMost_iff xy(1) xy(4) by fastforce | |
| 536 | with xy show False by auto | |
| 537 | qed | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 538 | } note * = this | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 539 | have "loop_free(g1 +++ g2)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 540 | using inj_onD [OF injg1] inj_onD [OF injg2] * | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 541 | by (simp add: loop_free_def joinpaths_def Ball_def) (smt (verit)) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 542 | then show ?thesis | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 543 | by (simp add: arc_imp_path assms simple_path_def) | 
| 60303 | 544 | qed | 
| 545 | ||
| 546 | lemma reversepath_joinpaths: | |
| 547 | "pathfinish g1 = pathstart g2 \<Longrightarrow> reversepath(g1 +++ g2) = reversepath g2 +++ reversepath g1" | |
| 548 | unfolding reversepath_def pathfinish_def pathstart_def joinpaths_def | |
| 549 | by (rule ext) (auto simp: mult.commute) | |
| 550 | ||
| 551 | ||
| 70136 | 552 | subsection\<^marker>\<open>tag unimportant\<close>\<open>Some reversed and "if and only if" versions of joining theorems\<close> | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 553 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 554 | lemma path_join_path_ends: | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 555 | fixes g1 :: "real \<Rightarrow> 'a::metric_space" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 556 | assumes "path(g1 +++ g2)" "path g2" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 557 | shows "pathfinish g1 = pathstart g2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 558 | proof (rule ccontr) | 
| 63040 | 559 | define e where "e = dist (g1 1) (g2 0)" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 560 | assume Neg: "pathfinish g1 \<noteq> pathstart g2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 561 | then have "0 < dist (pathfinish g1) (pathstart g2)" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 562 | by auto | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 563 | then have "e > 0" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 564 | by (metis e_def pathfinish_def pathstart_def) | 
| 72256 | 565 |   then have "\<forall>e>0. \<exists>d>0. \<forall>x'\<in>{0..1}. dist x' 0 < d \<longrightarrow> dist (g2 x') (g2 0) < e"
 | 
| 566 | using \<open>path g2\<close> atLeastAtMost_iff zero_le_one unfolding path_def continuous_on_iff | |
| 567 | by blast | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 568 | then obtain d1 where "d1 > 0" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 569 |        and d1: "\<And>x'. \<lbrakk>x'\<in>{0..1}; norm x' < d1\<rbrakk> \<Longrightarrow> dist (g2 x') (g2 0) < e/2"
 | 
| 72256 | 570 | by (metis \<open>0 < e\<close> half_gt_zero_iff norm_conv_dist) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 571 | obtain d2 where "d2 > 0" | 
| 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 572 |        and d2: "\<And>x'. \<lbrakk>x'\<in>{0..1}; dist x' (1/2) < d2\<rbrakk>
 | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 573 | \<Longrightarrow> dist ((g1 +++ g2) x') (g1 1) < e/2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 574 | using assms(1) \<open>e > 0\<close> unfolding path_def continuous_on_iff | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 575 | apply (drule_tac x="1/2" in bspec, simp) | 
| 72256 | 576 | apply (drule_tac x="e/2" in spec, force simp: joinpaths_def) | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 577 | done | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 578 |   have int01_1: "min (1/2) (min d1 d2) / 2 \<in> {0..1}"
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 579 | using \<open>d1 > 0\<close> \<open>d2 > 0\<close> by (simp add: min_def) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 580 | have dist1: "norm (min (1 / 2) (min d1 d2) / 2) < d1" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 581 | using \<open>d1 > 0\<close> \<open>d2 > 0\<close> by (simp add: min_def dist_norm) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 582 |   have int01_2: "1/2 + min (1/2) (min d1 d2) / 4 \<in> {0..1}"
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 583 | using \<open>d1 > 0\<close> \<open>d2 > 0\<close> by (simp add: min_def) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 584 | have dist2: "dist (1 / 2 + min (1 / 2) (min d1 d2) / 4) (1 / 2) < d2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 585 | using \<open>d1 > 0\<close> \<open>d2 > 0\<close> by (simp add: min_def dist_norm) | 
| 69508 | 586 | have [simp]: "\<not> min (1 / 2) (min d1 d2) \<le> 0" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 587 | using \<open>d1 > 0\<close> \<open>d2 > 0\<close> by (simp add: min_def) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 588 | have "dist (g2 (min (1 / 2) (min d1 d2) / 2)) (g1 1) < e/2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 589 | "dist (g2 (min (1 / 2) (min d1 d2) / 2)) (g2 0) < e/2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 590 | using d1 [OF int01_1 dist1] d2 [OF int01_2 dist2] by (simp_all add: joinpaths_def) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 591 | then have "dist (g1 1) (g2 0) < e/2 + e/2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 592 | using dist_triangle_half_r e_def by blast | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 593 | then show False | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 594 | by (simp add: e_def [symmetric]) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 595 | qed | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 596 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 597 | lemma path_join_eq [simp]: | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 598 | fixes g1 :: "real \<Rightarrow> 'a::metric_space" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 599 | assumes "path g1" "path g2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 600 | shows "path(g1 +++ g2) \<longleftrightarrow> pathfinish g1 = pathstart g2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 601 | using assms by (metis path_join_path_ends path_join_imp) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 602 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 603 | lemma simple_path_joinE: | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 604 | assumes "simple_path(g1 +++ g2)" and "pathfinish g1 = pathstart g2" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 605 | obtains "arc g1" "arc g2" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 606 |           "path_image g1 \<inter> path_image g2 \<subseteq> {pathstart g1, pathstart g2}"
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 607 | proof - | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 608 | have *: "\<And>x y. \<lbrakk>0 \<le> x; x \<le> 1; 0 \<le> y; y \<le> 1; (g1 +++ g2) x = (g1 +++ g2) y\<rbrakk> | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 609 | \<Longrightarrow> x = y \<or> x = 0 \<and> y = 1 \<or> x = 1 \<and> y = 0" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 610 | using assms by (simp add: simple_path_def loop_free_def) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 611 | have "path g1" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 612 | using assms path_join simple_path_imp_path by blast | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 613 |   moreover have "inj_on g1 {0..1}"
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 614 | proof (clarsimp simp: inj_on_def) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 615 | fix x y | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 616 | assume "g1 x = g1 y" "0 \<le> x" "x \<le> 1" "0 \<le> y" "y \<le> 1" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 617 | then show "x = y" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 618 | using * [of "x/2" "y/2"] by (simp add: joinpaths_def split_ifs) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 619 | qed | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 620 | ultimately have "arc g1" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 621 | using assms by (simp add: arc_def) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 622 | have [simp]: "g2 0 = g1 1" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 623 | using assms by (metis pathfinish_def pathstart_def) | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 624 | have "path g2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 625 | using assms path_join simple_path_imp_path by blast | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 626 |   moreover have "inj_on g2 {0..1}"
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 627 | proof (clarsimp simp: inj_on_def) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 628 | fix x y | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 629 | assume "g2 x = g2 y" "0 \<le> x" "x \<le> 1" "0 \<le> y" "y \<le> 1" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 630 | then show "x = y" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 631 | using * [of "(x+1) / 2" "(y+1) / 2"] | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 632 | by (force simp: joinpaths_def split_ifs field_split_simps) | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 633 | qed | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 634 | ultimately have "arc g2" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 635 | using assms by (simp add: arc_def) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 636 | have "g2 y = g1 0 \<or> g2 y = g1 1" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 637 | if "g1 x = g2 y" "0 \<le> x" "x \<le> 1" "0 \<le> y" "y \<le> 1" for x y | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 638 | using * [of "x / 2" "(y + 1) / 2"] that | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 639 | by (auto simp: joinpaths_def split_ifs field_split_simps) | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 640 |   then have "path_image g1 \<inter> path_image g2 \<subseteq> {pathstart g1, pathstart g2}"
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 641 | by (fastforce simp: pathstart_def pathfinish_def path_image_def) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 642 | with \<open>arc g1\<close> \<open>arc g2\<close> show ?thesis using that by blast | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 643 | qed | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 644 | |
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 645 | lemma simple_path_join_loop_eq: | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 646 | assumes "pathfinish g2 = pathstart g1" "pathfinish g1 = pathstart g2" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 647 | shows "simple_path(g1 +++ g2) \<longleftrightarrow> | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 648 |              arc g1 \<and> arc g2 \<and> path_image g1 \<inter> path_image g2 \<subseteq> {pathstart g1, pathstart g2}"
 | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 649 | by (metis assms simple_path_joinE simple_path_join_loop) | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 650 | |
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 651 | lemma arc_join_eq: | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 652 | assumes "pathfinish g1 = pathstart g2" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 653 | shows "arc(g1 +++ g2) \<longleftrightarrow> | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 654 |            arc g1 \<and> arc g2 \<and> path_image g1 \<inter> path_image g2 \<subseteq> {pathstart g2}"
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 655 | (is "?lhs = ?rhs") | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 656 | proof | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 657 | assume ?lhs then show ?rhs | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 658 | using reversepath_simps assms | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 659 | by (smt (verit, best) Int_commute arc_reversepath arc_simple_path in_mono insertE pathstart_join | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 660 | reversepath_joinpaths simple_path_joinE subsetI) | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 661 | next | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 662 | assume ?rhs then show ?lhs | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 663 | using assms | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 664 | by (fastforce simp: pathfinish_def pathstart_def intro!: arc_join) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 665 | qed | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 666 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 667 | lemma arc_join_eq_alt: | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 668 | "pathfinish g1 = pathstart g2 | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 669 |    \<Longrightarrow> arc(g1 +++ g2) \<longleftrightarrow> arc g1 \<and> arc g2 \<and> path_image g1 \<inter> path_image g2 = {pathstart g2}"
 | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 670 | using pathfinish_in_path_image by (fastforce simp: arc_join_eq) | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 671 | |
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 672 | |
| 70136 | 673 | subsection\<^marker>\<open>tag unimportant\<close>\<open>The joining of paths is associative\<close> | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 674 | |
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 675 | lemma path_assoc: | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 676 | "\<lbrakk>pathfinish p = pathstart q; pathfinish q = pathstart r\<rbrakk> | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 677 | \<Longrightarrow> path(p +++ (q +++ r)) \<longleftrightarrow> path((p +++ q) +++ r)" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 678 | by simp | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 679 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 680 | lemma simple_path_assoc: | 
| 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 681 | assumes "pathfinish p = pathstart q" "pathfinish q = pathstart r" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 682 | shows "simple_path (p +++ (q +++ r)) \<longleftrightarrow> simple_path ((p +++ q) +++ r)" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 683 | proof (cases "pathstart p = pathfinish r") | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 684 | case True show ?thesis | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 685 | proof | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 686 | assume "simple_path (p +++ q +++ r)" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 687 | with assms True show "simple_path ((p +++ q) +++ r)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 688 | by (fastforce simp add: simple_path_join_loop_eq arc_join_eq path_image_join | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 689 | dest: arc_distinct_ends [of r]) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 690 | next | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 691 | assume 0: "simple_path ((p +++ q) +++ r)" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 692 | with assms True have q: "pathfinish r \<notin> path_image q" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 693 | using arc_distinct_ends | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 694 | by (fastforce simp add: simple_path_join_loop_eq arc_join_eq path_image_join) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 695 | have "pathstart r \<notin> path_image p" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 696 | using assms | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 697 | by (metis 0 IntI arc_distinct_ends arc_join_eq_alt empty_iff insert_iff | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 698 | pathfinish_in_path_image pathfinish_join simple_path_joinE) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 699 | with assms 0 q True show "simple_path (p +++ q +++ r)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 700 | by (auto simp: simple_path_join_loop_eq arc_join_eq path_image_join | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 701 | dest!: subsetD [OF _ IntI]) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 702 | qed | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 703 | next | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 704 | case False | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 705 |   { fix x :: 'a
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 706 |     assume a: "path_image p \<inter> path_image q \<subseteq> {pathstart q}"
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 707 |               "(path_image p \<union> path_image q) \<inter> path_image r \<subseteq> {pathstart r}"
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 708 | "x \<in> path_image p" "x \<in> path_image r" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 709 | have "pathstart r \<in> path_image q" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 710 | by (metis assms(2) pathfinish_in_path_image) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 711 | with a have "x = pathstart q" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 712 | by blast | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 713 | } | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 714 | with False assms show ?thesis | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 715 | by (auto simp: simple_path_eq_arc simple_path_join_loop_eq arc_join_eq path_image_join) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 716 | qed | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 717 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 718 | lemma arc_assoc: | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 719 | "\<lbrakk>pathfinish p = pathstart q; pathfinish q = pathstart r\<rbrakk> | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 720 | \<Longrightarrow> arc(p +++ (q +++ r)) \<longleftrightarrow> arc((p +++ q) +++ r)" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 721 | by (simp add: arc_simple_path simple_path_assoc) | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 722 | |
| 70136 | 723 | subsubsection\<^marker>\<open>tag unimportant\<close>\<open>Symmetry and loops\<close> | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 724 | |
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 725 | lemma path_sym: | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 726 | "\<lbrakk>pathfinish p = pathstart q; pathfinish q = pathstart p\<rbrakk> \<Longrightarrow> path(p +++ q) \<longleftrightarrow> path(q +++ p)" | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 727 | by auto | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 728 | |
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 729 | lemma simple_path_sym: | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 730 | "\<lbrakk>pathfinish p = pathstart q; pathfinish q = pathstart p\<rbrakk> | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 731 | \<Longrightarrow> simple_path(p +++ q) \<longleftrightarrow> simple_path(q +++ p)" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 732 | by (metis (full_types) inf_commute insert_commute simple_path_joinE simple_path_join_loop) | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 733 | |
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 734 | lemma path_image_sym: | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 735 | "\<lbrakk>pathfinish p = pathstart q; pathfinish q = pathstart p\<rbrakk> | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 736 | \<Longrightarrow> path_image(p +++ q) = path_image(q +++ p)" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 737 | by (simp add: path_image_join sup_commute) | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 738 | |
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 739 | |
| 69518 | 740 | subsection\<open>Subpath\<close> | 
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 741 | |
| 70136 | 742 | definition\<^marker>\<open>tag important\<close> subpath :: "real \<Rightarrow> real \<Rightarrow> (real \<Rightarrow> 'a) \<Rightarrow> real \<Rightarrow> 'a::real_normed_vector" | 
| 60303 | 743 | where "subpath a b g \<equiv> \<lambda>x. g((b - a) * x + a)" | 
| 744 | ||
| 61762 
d50b993b4fb9
Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
 paulson <lp15@cam.ac.uk> parents: 
61738diff
changeset | 745 | lemma path_image_subpath_gen: | 
| 
d50b993b4fb9
Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
 paulson <lp15@cam.ac.uk> parents: 
61738diff
changeset | 746 | fixes g :: "_ \<Rightarrow> 'a::real_normed_vector" | 
| 60303 | 747 | shows "path_image(subpath u v g) = g ` (closed_segment u v)" | 
| 69661 | 748 | by (auto simp add: closed_segment_real_eq path_image_def subpath_def) | 
| 60303 | 749 | |
| 61762 
d50b993b4fb9
Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
 paulson <lp15@cam.ac.uk> parents: 
61738diff
changeset | 750 | lemma path_image_subpath: | 
| 60303 | 751 | fixes g :: "real \<Rightarrow> 'a::real_normed_vector" | 
| 752 |   shows "path_image(subpath u v g) = (if u \<le> v then g ` {u..v} else g ` {v..u})"
 | |
| 61762 
d50b993b4fb9
Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
 paulson <lp15@cam.ac.uk> parents: 
61738diff
changeset | 753 | by (simp add: path_image_subpath_gen closed_segment_eq_real_ivl) | 
| 60303 | 754 | |
| 65038 
9391ea7daa17
new lemmas about segments, etc. Also recast some theorems to use Union rather than general set comprehensions
 paulson <lp15@cam.ac.uk> parents: 
64911diff
changeset | 755 | lemma path_image_subpath_commute: | 
| 
9391ea7daa17
new lemmas about segments, etc. Also recast some theorems to use Union rather than general set comprehensions
 paulson <lp15@cam.ac.uk> parents: 
64911diff
changeset | 756 | fixes g :: "real \<Rightarrow> 'a::real_normed_vector" | 
| 
9391ea7daa17
new lemmas about segments, etc. Also recast some theorems to use Union rather than general set comprehensions
 paulson <lp15@cam.ac.uk> parents: 
64911diff
changeset | 757 | shows "path_image(subpath u v g) = path_image(subpath v u g)" | 
| 
9391ea7daa17
new lemmas about segments, etc. Also recast some theorems to use Union rather than general set comprehensions
 paulson <lp15@cam.ac.uk> parents: 
64911diff
changeset | 758 | by (simp add: path_image_subpath_gen closed_segment_eq_real_ivl) | 
| 
9391ea7daa17
new lemmas about segments, etc. Also recast some theorems to use Union rather than general set comprehensions
 paulson <lp15@cam.ac.uk> parents: 
64911diff
changeset | 759 | |
| 60303 | 760 | lemma path_subpath [simp]: | 
| 761 | fixes g :: "real \<Rightarrow> 'a::real_normed_vector" | |
| 762 |   assumes "path g" "u \<in> {0..1}" "v \<in> {0..1}"
 | |
| 763 | shows "path(subpath u v g)" | |
| 764 | proof - | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 765 |   have "continuous_on {u..v} g" "continuous_on {v..u} g"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 766 | using assms continuous_on_path by fastforce+ | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 767 |   then have "continuous_on {0..1} (g \<circ> (\<lambda>x. ((v-u) * x+ u)))"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 768 | by (intro continuous_intros; simp add: image_affinity_atLeastAtMost [where c=u]) | 
| 60303 | 769 | then show ?thesis | 
| 770 | by (simp add: path_def subpath_def) | |
| 49653 | 771 | qed | 
| 36583 | 772 | |
| 60303 | 773 | lemma pathstart_subpath [simp]: "pathstart(subpath u v g) = g(u)" | 
| 774 | by (simp add: pathstart_def subpath_def) | |
| 775 | ||
| 776 | lemma pathfinish_subpath [simp]: "pathfinish(subpath u v g) = g(v)" | |
| 777 | by (simp add: pathfinish_def subpath_def) | |
| 778 | ||
| 779 | lemma subpath_trivial [simp]: "subpath 0 1 g = g" | |
| 780 | by (simp add: subpath_def) | |
| 781 | ||
| 782 | lemma subpath_reversepath: "subpath 1 0 g = reversepath g" | |
| 783 | by (simp add: reversepath_def subpath_def) | |
| 784 | ||
| 785 | lemma reversepath_subpath: "reversepath(subpath u v g) = subpath v u g" | |
| 786 | by (simp add: reversepath_def subpath_def algebra_simps) | |
| 787 | ||
| 68096 | 788 | lemma subpath_translation: "subpath u v ((\<lambda>x. a + x) \<circ> g) = (\<lambda>x. a + x) \<circ> subpath u v g" | 
| 60303 | 789 | by (rule ext) (simp add: subpath_def) | 
| 790 | ||
| 70971 | 791 | lemma subpath_image: "subpath u v (f \<circ> g) = f \<circ> subpath u v g" | 
| 60303 | 792 | by (rule ext) (simp add: subpath_def) | 
| 793 | ||
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 794 | lemma affine_ineq: | 
| 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 795 | fixes x :: "'a::linordered_idom" | 
| 61762 
d50b993b4fb9
Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
 paulson <lp15@cam.ac.uk> parents: 
61738diff
changeset | 796 | assumes "x \<le> 1" "v \<le> u" | 
| 60303 | 797 | shows "v + x * u \<le> u + x * v" | 
| 798 | proof - | |
| 799 | have "(1-x)*(u-v) \<ge> 0" | |
| 800 | using assms by auto | |
| 801 | then show ?thesis | |
| 802 | by (simp add: algebra_simps) | |
| 49653 | 803 | qed | 
| 36583 | 804 | |
| 61711 
21d7910d6816
Theory of homotopic paths (from HOL Light), plus comments and minor refinements
 paulson <lp15@cam.ac.uk> parents: 
61699diff
changeset | 805 | lemma sum_le_prod1: | 
| 
21d7910d6816
Theory of homotopic paths (from HOL Light), plus comments and minor refinements
 paulson <lp15@cam.ac.uk> parents: 
61699diff
changeset | 806 | fixes a::real shows "\<lbrakk>a \<le> 1; b \<le> 1\<rbrakk> \<Longrightarrow> a + b \<le> 1 + a * b" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 807 | by (metis add.commute affine_ineq mult.right_neutral) | 
| 61711 
21d7910d6816
Theory of homotopic paths (from HOL Light), plus comments and minor refinements
 paulson <lp15@cam.ac.uk> parents: 
61699diff
changeset | 808 | |
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 809 | lemma simple_path_subpath_eq: | 
| 60303 | 810 | "simple_path(subpath u v g) \<longleftrightarrow> | 
| 811 | path(subpath u v g) \<and> u\<noteq>v \<and> | |
| 812 | (\<forall>x y. x \<in> closed_segment u v \<and> y \<in> closed_segment u v \<and> g x = g y | |
| 813 | \<longrightarrow> x = y \<or> x = u \<and> y = v \<or> x = v \<and> y = u)" | |
| 814 | (is "?lhs = ?rhs") | |
| 72256 | 815 | proof | 
| 60303 | 816 | assume ?lhs | 
| 817 | then have p: "path (\<lambda>x. g ((v - u) * x + u))" | |
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 818 |         and sim: "(\<And>x y. \<lbrakk>x\<in>{0..1}; y\<in>{0..1}; g ((v - u) * x + u) = g ((v - u) * y + u)\<rbrakk>
 | 
| 60303 | 819 | \<Longrightarrow> x = y \<or> x = 0 \<and> y = 1 \<or> x = 1 \<and> y = 0)" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 820 | by (auto simp: simple_path_def loop_free_def subpath_def) | 
| 60303 | 821 |   { fix x y
 | 
| 822 | assume "x \<in> closed_segment u v" "y \<in> closed_segment u v" "g x = g y" | |
| 823 | then have "x = y \<or> x = u \<and> y = v \<or> x = v \<and> y = u" | |
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 824 | using sim [of "(x-u)/(v-u)" "(y-u)/(v-u)"] p | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 825 | by (auto split: if_split_asm simp add: closed_segment_real_eq image_affinity_atLeastAtMost) | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 826 | (simp_all add: field_split_simps) | 
| 60303 | 827 | } moreover | 
| 828 | have "path(subpath u v g) \<and> u\<noteq>v" | |
| 829 | using sim [of "1/3" "2/3"] p | |
| 830 | by (auto simp: subpath_def) | |
| 831 | ultimately show ?rhs | |
| 832 | by metis | |
| 833 | next | |
| 834 | assume ?rhs | |
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 835 | then | 
| 60303 | 836 | have d1: "\<And>x y. \<lbrakk>g x = g y; u \<le> x; x \<le> v; u \<le> y; y \<le> v\<rbrakk> \<Longrightarrow> x = y \<or> x = u \<and> y = v \<or> x = v \<and> y = u" | 
| 837 | and d2: "\<And>x y. \<lbrakk>g x = g y; v \<le> x; x \<le> u; v \<le> y; y \<le> u\<rbrakk> \<Longrightarrow> x = y \<or> x = u \<and> y = v \<or> x = v \<and> y = u" | |
| 838 | and ne: "u < v \<or> v < u" | |
| 839 | and psp: "path (subpath u v g)" | |
| 840 | by (auto simp: closed_segment_real_eq image_affinity_atLeastAtMost) | |
| 841 | have [simp]: "\<And>x. u + x * v = v + x * u \<longleftrightarrow> u=v \<or> x=1" | |
| 842 | by algebra | |
| 843 | show ?lhs using psp ne | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 844 | unfolding simple_path_def loop_free_def subpath_def | 
| 60303 | 845 | by (fastforce simp add: algebra_simps affine_ineq mult_left_mono crossproduct_eq dest: d1 d2) | 
| 846 | qed | |
| 847 | ||
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 848 | lemma arc_subpath_eq: | 
| 60303 | 849 | "arc(subpath u v g) \<longleftrightarrow> path(subpath u v g) \<and> u\<noteq>v \<and> inj_on g (closed_segment u v)" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 850 | by (smt (verit, best) arc_simple_path closed_segment_commute ends_in_segment(2) inj_on_def pathfinish_subpath pathstart_subpath simple_path_subpath_eq) | 
| 60303 | 851 | |
| 852 | ||
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 853 | lemma simple_path_subpath: | 
| 60303 | 854 |   assumes "simple_path g" "u \<in> {0..1}" "v \<in> {0..1}" "u \<noteq> v"
 | 
| 855 | shows "simple_path(subpath u v g)" | |
| 856 | using assms | |
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 857 | unfolding simple_path_subpath_eq | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 858 | by (force simp: simple_path_def loop_free_def closed_segment_real_eq image_affinity_atLeastAtMost) | 
| 60303 | 859 | |
| 860 | lemma arc_simple_path_subpath: | |
| 861 |     "\<lbrakk>simple_path g; u \<in> {0..1}; v \<in> {0..1}; g u \<noteq> g v\<rbrakk> \<Longrightarrow> arc(subpath u v g)"
 | |
| 862 | by (force intro: simple_path_subpath simple_path_imp_arc) | |
| 863 | ||
| 864 | lemma arc_subpath_arc: | |
| 865 |     "\<lbrakk>arc g; u \<in> {0..1}; v \<in> {0..1}; u \<noteq> v\<rbrakk> \<Longrightarrow> arc(subpath u v g)"
 | |
| 866 | by (meson arc_def arc_imp_simple_path arc_simple_path_subpath inj_onD) | |
| 867 | ||
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 868 | lemma arc_simple_path_subpath_interior: | 
| 60303 | 869 |     "\<lbrakk>simple_path g; u \<in> {0..1}; v \<in> {0..1}; u \<noteq> v; \<bar>u-v\<bar> < 1\<rbrakk> \<Longrightarrow> arc(subpath u v g)"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 870 | by (force simp: simple_path_def loop_free_def intro: arc_simple_path_subpath) | 
| 60303 | 871 | |
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 872 | lemma path_image_subpath_subset: | 
| 68532 
f8b98d31ad45
Incorporating new/strengthened proofs from Library and AFP entries
 paulson <lp15@cam.ac.uk> parents: 
68310diff
changeset | 873 |     "\<lbrakk>u \<in> {0..1}; v \<in> {0..1}\<rbrakk> \<Longrightarrow> path_image(subpath u v g) \<subseteq> path_image g"
 | 
| 72256 | 874 | by (metis atLeastAtMost_iff atLeastatMost_subset_iff path_image_def path_image_subpath subset_image_iff) | 
| 60303 | 875 | |
| 876 | lemma join_subpaths_middle: "subpath (0) ((1 / 2)) p +++ subpath ((1 / 2)) 1 p = p" | |
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 877 | by (rule ext) (simp add: joinpaths_def subpath_def field_split_simps) | 
| 53640 | 878 | |
| 69514 | 879 | |
| 70136 | 880 | subsection\<^marker>\<open>tag unimportant\<close>\<open>There is a subpath to the frontier\<close> | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 881 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 882 | lemma subpath_to_frontier_explicit: | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 883 | fixes S :: "'a::metric_space set" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 884 | assumes g: "path g" and "pathfinish g \<notin> S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 885 | obtains u where "0 \<le> u" "u \<le> 1" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 886 | "\<And>x. 0 \<le> x \<and> x < u \<Longrightarrow> g x \<in> interior S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 887 | "(g u \<notin> interior S)" "(u = 0 \<or> g u \<in> closure S)" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 888 | proof - | 
| 72256 | 889 |   have gcon: "continuous_on {0..1} g"     
 | 
| 890 | using g by (simp add: path_def) | |
| 891 |   moreover have "bounded ({u. g u \<in> closure (- S)} \<inter> {0..1})"
 | |
| 892 | using compact_eq_bounded_closed by fastforce | |
| 893 |   ultimately have com: "compact ({0..1} \<inter> {u. g u \<in> closure (- S)})"
 | |
| 894 | using closed_vimage_Int | |
| 895 | by (metis (full_types) Int_commute closed_atLeastAtMost closed_closure compact_eq_bounded_closed vimage_def) | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 896 |   have "1 \<in> {u. g u \<in> closure (- S)}"
 | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 897 | using assms by (simp add: pathfinish_def closure_def) | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 898 |   then have dis: "{0..1} \<inter> {u. g u \<in> closure (- S)} \<noteq> {}"
 | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 899 | using atLeastAtMost_iff zero_le_one by blast | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 900 | then obtain u where "0 \<le> u" "u \<le> 1" and gu: "g u \<in> closure (- S)" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 901 | and umin: "\<And>t. \<lbrakk>0 \<le> t; t \<le> 1; g t \<in> closure (- S)\<rbrakk> \<Longrightarrow> u \<le> t" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 902 | using compact_attains_inf [OF com dis] by fastforce | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 903 | then have umin': "\<And>t. \<lbrakk>0 \<le> t; t \<le> 1; t < u\<rbrakk> \<Longrightarrow> g t \<in> S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 904 | using closure_def by fastforce | 
| 72256 | 905 | have \<section>: "g u \<in> closure S" if "u \<noteq> 0" | 
| 906 | proof - | |
| 907 | have "u > 0" using that \<open>0 \<le> u\<close> by auto | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 908 |     { fix e::real assume "e > 0"
 | 
| 62397 
5ae24f33d343
Substantial new material for multivariate analysis. Also removal of some duplicates.
 paulson <lp15@cam.ac.uk> parents: 
62381diff
changeset | 909 |       obtain d where "d>0" and d: "\<And>x'. \<lbrakk>x' \<in> {0..1}; dist x' u \<le> d\<rbrakk> \<Longrightarrow> dist (g x') (g u) < e"
 | 
| 
5ae24f33d343
Substantial new material for multivariate analysis. Also removal of some duplicates.
 paulson <lp15@cam.ac.uk> parents: 
62381diff
changeset | 910 | using continuous_onE [OF gcon _ \<open>e > 0\<close>] \<open>0 \<le> _\<close> \<open>_ \<le> 1\<close> atLeastAtMost_iff by auto | 
| 
5ae24f33d343
Substantial new material for multivariate analysis. Also removal of some duplicates.
 paulson <lp15@cam.ac.uk> parents: 
62381diff
changeset | 911 | have *: "dist (max 0 (u - d / 2)) u \<le> d" | 
| 61808 | 912 | using \<open>0 \<le> u\<close> \<open>u \<le> 1\<close> \<open>d > 0\<close> by (simp add: dist_real_def) | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 913 | have "\<exists>y\<in>S. dist y (g u) < e" | 
| 61808 | 914 | using \<open>0 < u\<close> \<open>u \<le> 1\<close> \<open>d > 0\<close> | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 915 | by (force intro: d [OF _ *] umin') | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 916 | } | 
| 72256 | 917 | then show ?thesis | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 918 | by (simp add: frontier_def closure_approachable) | 
| 72256 | 919 | qed | 
| 920 | show ?thesis | |
| 921 | proof | |
| 922 | show "\<And>x. 0 \<le> x \<and> x < u \<Longrightarrow> g x \<in> interior S" | |
| 923 | using \<open>u \<le> 1\<close> interior_closure umin by fastforce | |
| 924 | show "g u \<notin> interior S" | |
| 925 | by (simp add: gu interior_closure) | |
| 926 | qed (use \<open>0 \<le> u\<close> \<open>u \<le> 1\<close> \<section> in auto) | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 927 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 928 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 929 | lemma subpath_to_frontier_strong: | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 930 | assumes g: "path g" and "pathfinish g \<notin> S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 931 | obtains u where "0 \<le> u" "u \<le> 1" "g u \<notin> interior S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 932 | "u = 0 \<or> (\<forall>x. 0 \<le> x \<and> x < 1 \<longrightarrow> subpath 0 u g x \<in> interior S) \<and> g u \<in> closure S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 933 | proof - | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 934 | obtain u where "0 \<le> u" "u \<le> 1" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 935 | and gxin: "\<And>x. 0 \<le> x \<and> x < u \<Longrightarrow> g x \<in> interior S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 936 | and gunot: "(g u \<notin> interior S)" and u0: "(u = 0 \<or> g u \<in> closure S)" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 937 | using subpath_to_frontier_explicit [OF assms] by blast | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 938 | show ?thesis | 
| 72256 | 939 | proof | 
| 940 | show "g u \<notin> interior S" | |
| 941 | using gunot by blast | |
| 942 | qed (use \<open>0 \<le> u\<close> \<open>u \<le> 1\<close> u0 in \<open>(force simp: subpath_def gxin)+\<close>) | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 943 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 944 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 945 | lemma subpath_to_frontier: | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 946 | assumes g: "path g" and g0: "pathstart g \<in> closure S" and g1: "pathfinish g \<notin> S" | 
| 72256 | 947 |     obtains u where "0 \<le> u" "u \<le> 1" "g u \<in> frontier S" "path_image(subpath 0 u g) - {g u} \<subseteq> interior S"
 | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 948 | proof - | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 949 | obtain u where "0 \<le> u" "u \<le> 1" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 950 | and notin: "g u \<notin> interior S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 951 | and disj: "u = 0 \<or> | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 952 | (\<forall>x. 0 \<le> x \<and> x < 1 \<longrightarrow> subpath 0 u g x \<in> interior S) \<and> g u \<in> closure S" | 
| 72256 | 953 | (is "_ \<or> ?P") | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 954 | using subpath_to_frontier_strong [OF g g1] by blast | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 955 | show ?thesis | 
| 72256 | 956 | proof | 
| 957 | show "g u \<in> frontier S" | |
| 958 | by (metis DiffI disj frontier_def g0 notin pathstart_def) | |
| 959 |     show "path_image (subpath 0 u g) - {g u} \<subseteq> interior S"
 | |
| 960 | using disj | |
| 961 | proof | |
| 962 | assume "u = 0" | |
| 963 | then show ?thesis | |
| 964 | by (simp add: path_image_subpath) | |
| 965 | next | |
| 966 | assume P: ?P | |
| 967 | show ?thesis | |
| 968 | proof (clarsimp simp add: path_image_subpath_gen) | |
| 969 | fix y | |
| 970 | assume y: "y \<in> closed_segment 0 u" "g y \<notin> interior S" | |
| 971 | with \<open>0 \<le> u\<close> have "0 \<le> y" "y \<le> u" | |
| 972 | by (auto simp: closed_segment_eq_real_ivl split: if_split_asm) | |
| 973 | then have "y=u \<or> subpath 0 u g (y/u) \<in> interior S" | |
| 974 | using P less_eq_real_def by force | |
| 975 | then show "g y = g u" | |
| 976 | using y by (auto simp: subpath_def split: if_split_asm) | |
| 977 | qed | |
| 978 | qed | |
| 979 | qed (use \<open>0 \<le> u\<close> \<open>u \<le> 1\<close> in auto) | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 980 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 981 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 982 | lemma exists_path_subpath_to_frontier: | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 983 | fixes S :: "'a::real_normed_vector set" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 984 | assumes "path g" "pathstart g \<in> closure S" "pathfinish g \<notin> S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 985 | obtains h where "path h" "pathstart h = pathstart g" "path_image h \<subseteq> path_image g" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 986 |                     "path_image h - {pathfinish h} \<subseteq> interior S"
 | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 987 | "pathfinish h \<in> frontier S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 988 | proof - | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 989 |   obtain u where u: "0 \<le> u" "u \<le> 1" "g u \<in> frontier S" "(path_image(subpath 0 u g) - {g u}) \<subseteq> interior S"
 | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 990 | using subpath_to_frontier [OF assms] by blast | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 991 | show ?thesis | 
| 72256 | 992 | proof | 
| 993 | show "path_image (subpath 0 u g) \<subseteq> path_image g" | |
| 994 | by (simp add: path_image_subpath_subset u) | |
| 995 | show "pathstart (subpath 0 u g) = pathstart g" | |
| 996 | by (metis pathstart_def pathstart_subpath) | |
| 997 | qed (use assms u in \<open>auto simp: path_image_subpath\<close>) | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 998 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 999 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1000 | lemma exists_path_subpath_to_frontier_closed: | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1001 | fixes S :: "'a::real_normed_vector set" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1002 | assumes S: "closed S" and g: "path g" and g0: "pathstart g \<in> S" and g1: "pathfinish g \<notin> S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1003 | obtains h where "path h" "pathstart h = pathstart g" "path_image h \<subseteq> path_image g \<inter> S" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1004 | "pathfinish h \<in> frontier S" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1005 | by (smt (verit, del_insts) Diff_iff Int_iff S closure_closed exists_path_subpath_to_frontier | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1006 | frontier_def g g0 g1 interior_subset singletonD subset_eq) | 
| 49653 | 1007 | |
| 69514 | 1008 | |
| 1009 | subsection \<open>Shift Path to Start at Some Given Point\<close> | |
| 36583 | 1010 | |
| 70136 | 1011 | definition\<^marker>\<open>tag important\<close> shiftpath :: "real \<Rightarrow> (real \<Rightarrow> 'a::topological_space) \<Rightarrow> real \<Rightarrow> 'a" | 
| 53640 | 1012 | where "shiftpath a f = (\<lambda>x. if (a + x) \<le> 1 then f (a + x) else f (a + x - 1))" | 
| 36583 | 1013 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1014 | lemma shiftpath_alt_def: "shiftpath a f = (\<lambda>x. if x \<le> 1-a then f (a + x) else f (a + x - 1))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1015 | by (auto simp: shiftpath_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1016 | |
| 53640 | 1017 | lemma pathstart_shiftpath: "a \<le> 1 \<Longrightarrow> pathstart (shiftpath a g) = g a" | 
| 36583 | 1018 | unfolding pathstart_def shiftpath_def by auto | 
| 1019 | ||
| 49653 | 1020 | lemma pathfinish_shiftpath: | 
| 53640 | 1021 | assumes "0 \<le> a" | 
| 1022 | and "pathfinish g = pathstart g" | |
| 1023 | shows "pathfinish (shiftpath a g) = g a" | |
| 1024 | using assms | |
| 1025 | unfolding pathstart_def pathfinish_def shiftpath_def | |
| 36583 | 1026 | by auto | 
| 1027 | ||
| 1028 | lemma endpoints_shiftpath: | |
| 53640 | 1029 | assumes "pathfinish g = pathstart g" | 
| 1030 |     and "a \<in> {0 .. 1}"
 | |
| 1031 | shows "pathfinish (shiftpath a g) = g a" | |
| 1032 | and "pathstart (shiftpath a g) = g a" | |
| 1033 | using assms | |
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1034 | by (simp_all add: pathstart_shiftpath pathfinish_shiftpath) | 
| 36583 | 1035 | |
| 1036 | lemma closed_shiftpath: | |
| 53640 | 1037 | assumes "pathfinish g = pathstart g" | 
| 1038 |     and "a \<in> {0..1}"
 | |
| 1039 | shows "pathfinish (shiftpath a g) = pathstart (shiftpath a g)" | |
| 1040 | using endpoints_shiftpath[OF assms] | |
| 1041 | by auto | |
| 36583 | 1042 | |
| 1043 | lemma path_shiftpath: | |
| 53640 | 1044 | assumes "path g" | 
| 1045 | and "pathfinish g = pathstart g" | |
| 1046 |     and "a \<in> {0..1}"
 | |
| 1047 | shows "path (shiftpath a g)" | |
| 49653 | 1048 | proof - | 
| 53640 | 1049 |   have *: "{0 .. 1} = {0 .. 1-a} \<union> {1-a .. 1}"
 | 
| 1050 | using assms(3) by auto | |
| 49653 | 1051 | have **: "\<And>x. x + a = 1 \<Longrightarrow> g (x + a - 1) = g (x + a)" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1052 | by (smt (verit, best) assms(2) pathfinish_def pathstart_def) | 
| 49653 | 1053 | show ?thesis | 
| 1054 | unfolding path_def shiftpath_def * | |
| 68096 | 1055 | proof (rule continuous_on_closed_Un) | 
| 1056 |     have contg: "continuous_on {0..1} g"
 | |
| 1057 | using \<open>path g\<close> path_def by blast | |
| 1058 |     show "continuous_on {0..1-a} (\<lambda>x. if a + x \<le> 1 then g (a + x) else g (a + x - 1))"
 | |
| 1059 | proof (rule continuous_on_eq) | |
| 1060 |       show "continuous_on {0..1-a} (g \<circ> (+) a)"
 | |
| 1061 |         by (intro continuous_intros continuous_on_subset [OF contg]) (use \<open>a \<in> {0..1}\<close> in auto)
 | |
| 1062 | qed auto | |
| 1063 |     show "continuous_on {1-a..1} (\<lambda>x. if a + x \<le> 1 then g (a + x) else g (a + x - 1))"
 | |
| 1064 | proof (rule continuous_on_eq) | |
| 1065 |       show "continuous_on {1-a..1} (g \<circ> (+) (a - 1))"
 | |
| 1066 |         by (intro continuous_intros continuous_on_subset [OF contg]) (use \<open>a \<in> {0..1}\<close> in auto)
 | |
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1067 | qed (auto simp: "**" add.commute add_diff_eq) | 
| 68096 | 1068 | qed auto | 
| 49653 | 1069 | qed | 
| 36583 | 1070 | |
| 49653 | 1071 | lemma shiftpath_shiftpath: | 
| 53640 | 1072 | assumes "pathfinish g = pathstart g" | 
| 1073 |     and "a \<in> {0..1}"
 | |
| 1074 |     and "x \<in> {0..1}"
 | |
| 36583 | 1075 | shows "shiftpath (1 - a) (shiftpath a g) x = g x" | 
| 53640 | 1076 | using assms | 
| 1077 | unfolding pathfinish_def pathstart_def shiftpath_def | |
| 1078 | by auto | |
| 36583 | 1079 | |
| 1080 | lemma path_image_shiftpath: | |
| 68096 | 1081 |   assumes a: "a \<in> {0..1}"
 | 
| 53640 | 1082 | and "pathfinish g = pathstart g" | 
| 1083 | shows "path_image (shiftpath a g) = path_image g" | |
| 49653 | 1084 | proof - | 
| 1085 |   { fix x
 | |
| 68096 | 1086 |     assume g: "g 1 = g 0" "x \<in> {0..1::real}" and gne: "\<And>y. y\<in>{0..1} \<inter> {x. \<not> a + x \<le> 1} \<Longrightarrow> g x \<noteq> g (a + y - 1)"
 | 
| 49654 | 1087 |     then have "\<exists>y\<in>{0..1} \<inter> {x. a + x \<le> 1}. g x = g (a + y)"
 | 
| 49653 | 1088 | proof (cases "a \<le> x") | 
| 1089 | case False | |
| 49654 | 1090 | then show ?thesis | 
| 49653 | 1091 | apply (rule_tac x="1 + x - a" in bexI) | 
| 72256 | 1092 | using g gne[of "1 + x - a"] a by (force simp: field_simps)+ | 
| 49653 | 1093 | next | 
| 1094 | case True | |
| 53640 | 1095 | then show ?thesis | 
| 68096 | 1096 | using g a by (rule_tac x="x - a" in bexI) (auto simp: field_simps) | 
| 49653 | 1097 | qed | 
| 1098 | } | |
| 49654 | 1099 | then show ?thesis | 
| 53640 | 1100 | using assms | 
| 1101 | unfolding shiftpath_def path_image_def pathfinish_def pathstart_def | |
| 68096 | 1102 | by (auto simp: image_iff) | 
| 49653 | 1103 | qed | 
| 1104 | ||
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1105 | lemma loop_free_shiftpath: | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1106 | assumes "loop_free g" "pathfinish g = pathstart g" and a: "0 \<le> a" "a \<le> 1" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1107 | shows "loop_free (shiftpath a g)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1108 | unfolding loop_free_def | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1109 | proof (intro conjI impI ballI) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1110 | show "x = y \<or> x = 0 \<and> y = 1 \<or> x = 1 \<and> y = 0" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1111 |     if "x \<in> {0..1}" "y \<in> {0..1}" "shiftpath a g x = shiftpath a g y" for x y
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1112 | using that a assms unfolding shiftpath_def loop_free_def | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1113 | by (smt (verit, ccfv_threshold) atLeastAtMost_iff) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1114 | qed | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1115 | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1116 | lemma simple_path_shiftpath: | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1117 | assumes "simple_path g" "pathfinish g = pathstart g" and a: "0 \<le> a" "a \<le> 1" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1118 | shows "simple_path (shiftpath a g)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1119 | using assms loop_free_shiftpath path_shiftpath simple_path_def by fastforce | 
| 36583 | 1120 | |
| 69514 | 1121 | |
| 1122 | subsection \<open>Straight-Line Paths\<close> | |
| 36583 | 1123 | |
| 70136 | 1124 | definition\<^marker>\<open>tag important\<close> linepath :: "'a::real_normed_vector \<Rightarrow> 'a \<Rightarrow> real \<Rightarrow> 'a" | 
| 49653 | 1125 | where "linepath a b = (\<lambda>x. (1 - x) *\<^sub>R a + x *\<^sub>R b)" | 
| 36583 | 1126 | |
| 53640 | 1127 | lemma pathstart_linepath[simp]: "pathstart (linepath a b) = a" | 
| 1128 | unfolding pathstart_def linepath_def | |
| 1129 | by auto | |
| 36583 | 1130 | |
| 53640 | 1131 | lemma pathfinish_linepath[simp]: "pathfinish (linepath a b) = b" | 
| 1132 | unfolding pathfinish_def linepath_def | |
| 1133 | by auto | |
| 36583 | 1134 | |
| 68721 | 1135 | lemma linepath_inner: "linepath a b x \<bullet> v = linepath (a \<bullet> v) (b \<bullet> v) x" | 
| 1136 | by (simp add: linepath_def algebra_simps) | |
| 1137 | ||
| 1138 | lemma Re_linepath': "Re (linepath a b x) = linepath (Re a) (Re b) x" | |
| 1139 | by (simp add: linepath_def) | |
| 1140 | ||
| 1141 | lemma Im_linepath': "Im (linepath a b x) = linepath (Im a) (Im b) x" | |
| 1142 | by (simp add: linepath_def) | |
| 1143 | ||
| 1144 | lemma linepath_0': "linepath a b 0 = a" | |
| 1145 | by (simp add: linepath_def) | |
| 1146 | ||
| 1147 | lemma linepath_1': "linepath a b 1 = b" | |
| 1148 | by (simp add: linepath_def) | |
| 1149 | ||
| 36583 | 1150 | lemma continuous_linepath_at[intro]: "continuous (at x) (linepath a b)" | 
| 53640 | 1151 | unfolding linepath_def | 
| 1152 | by (intro continuous_intros) | |
| 36583 | 1153 | |
| 61762 
d50b993b4fb9
Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
 paulson <lp15@cam.ac.uk> parents: 
61738diff
changeset | 1154 | lemma continuous_on_linepath [intro,continuous_intros]: "continuous_on s (linepath a b)" | 
| 53640 | 1155 | using continuous_linepath_at | 
| 1156 | by (auto intro!: continuous_at_imp_continuous_on) | |
| 36583 | 1157 | |
| 62618 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1158 | lemma path_linepath[iff]: "path (linepath a b)" | 
| 53640 | 1159 | unfolding path_def | 
| 1160 | by (rule continuous_on_linepath) | |
| 36583 | 1161 | |
| 53640 | 1162 | lemma path_image_linepath[simp]: "path_image (linepath a b) = closed_segment a b" | 
| 49653 | 1163 | unfolding path_image_def segment linepath_def | 
| 60303 | 1164 | by auto | 
| 49653 | 1165 | |
| 53640 | 1166 | lemma reversepath_linepath[simp]: "reversepath (linepath a b) = linepath b a" | 
| 49653 | 1167 | unfolding reversepath_def linepath_def | 
| 36583 | 1168 | by auto | 
| 1169 | ||
| 61762 
d50b993b4fb9
Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
 paulson <lp15@cam.ac.uk> parents: 
61738diff
changeset | 1170 | lemma linepath_0 [simp]: "linepath 0 b x = x *\<^sub>R b" | 
| 
d50b993b4fb9
Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
 paulson <lp15@cam.ac.uk> parents: 
61738diff
changeset | 1171 | by (simp add: linepath_def) | 
| 
d50b993b4fb9
Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
 paulson <lp15@cam.ac.uk> parents: 
61738diff
changeset | 1172 | |
| 68721 | 1173 | lemma linepath_cnj: "cnj (linepath a b x) = linepath (cnj a) (cnj b) x" | 
| 1174 | by (simp add: linepath_def) | |
| 1175 | ||
| 60303 | 1176 | lemma arc_linepath: | 
| 62618 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1177 | assumes "a \<noteq> b" shows [simp]: "arc (linepath a b)" | 
| 36583 | 1178 | proof - | 
| 53640 | 1179 |   {
 | 
| 1180 | fix x y :: "real" | |
| 36583 | 1181 | assume "x *\<^sub>R b + y *\<^sub>R a = x *\<^sub>R a + y *\<^sub>R b" | 
| 53640 | 1182 | then have "(x - y) *\<^sub>R a = (x - y) *\<^sub>R b" | 
| 1183 | by (simp add: algebra_simps) | |
| 1184 | with assms have "x = y" | |
| 1185 | by simp | |
| 1186 | } | |
| 49654 | 1187 | then show ?thesis | 
| 60809 
457abb82fb9e
the Cauchy integral theorem and related material
 paulson <lp15@cam.ac.uk> parents: 
60420diff
changeset | 1188 | unfolding arc_def inj_on_def | 
| 68096 | 1189 | by (fastforce simp: algebra_simps linepath_def) | 
| 49653 | 1190 | qed | 
| 36583 | 1191 | |
| 53640 | 1192 | lemma simple_path_linepath[intro]: "a \<noteq> b \<Longrightarrow> simple_path (linepath a b)" | 
| 68096 | 1193 | by (simp add: arc_imp_simple_path) | 
| 49653 | 1194 | |
| 61711 
21d7910d6816
Theory of homotopic paths (from HOL Light), plus comments and minor refinements
 paulson <lp15@cam.ac.uk> parents: 
61699diff
changeset | 1195 | lemma linepath_trivial [simp]: "linepath a a x = a" | 
| 
21d7910d6816
Theory of homotopic paths (from HOL Light), plus comments and minor refinements
 paulson <lp15@cam.ac.uk> parents: 
61699diff
changeset | 1196 | by (simp add: linepath_def real_vector.scale_left_diff_distrib) | 
| 61738 
c4f6031f1310
New material about paths, winding numbers, etc. Added lemmas to divide_const_simps. Misc tuning.
 paulson <lp15@cam.ac.uk> parents: 
61711diff
changeset | 1197 | |
| 64394 | 1198 | lemma linepath_refl: "linepath a a = (\<lambda>x. a)" | 
| 1199 | by auto | |
| 1200 | ||
| 61711 
21d7910d6816
Theory of homotopic paths (from HOL Light), plus comments and minor refinements
 paulson <lp15@cam.ac.uk> parents: 
61699diff
changeset | 1201 | lemma subpath_refl: "subpath a a g = linepath (g a) (g a)" | 
| 
21d7910d6816
Theory of homotopic paths (from HOL Light), plus comments and minor refinements
 paulson <lp15@cam.ac.uk> parents: 
61699diff
changeset | 1202 | by (simp add: subpath_def linepath_def algebra_simps) | 
| 
21d7910d6816
Theory of homotopic paths (from HOL Light), plus comments and minor refinements
 paulson <lp15@cam.ac.uk> parents: 
61699diff
changeset | 1203 | |
| 62618 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1204 | lemma linepath_of_real: "(linepath (of_real a) (of_real b) x) = of_real ((1 - x)*a + x*b)" | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1205 | by (simp add: scaleR_conv_of_real linepath_def) | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1206 | |
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1207 | lemma of_real_linepath: "of_real (linepath a b x) = linepath (of_real a) (of_real b) x" | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1208 | by (metis linepath_of_real mult.right_neutral of_real_def real_scaleR_def) | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1209 | |
| 63881 
b746b19197bd
lots of new results about topology, affine dimension etc
 paulson <lp15@cam.ac.uk> parents: 
63627diff
changeset | 1210 | lemma inj_on_linepath: | 
| 
b746b19197bd
lots of new results about topology, affine dimension etc
 paulson <lp15@cam.ac.uk> parents: 
63627diff
changeset | 1211 |   assumes "a \<noteq> b" shows "inj_on (linepath a b) {0..1}"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1212 | using arc_imp_inj_on arc_linepath assms by blast | 
| 63881 
b746b19197bd
lots of new results about topology, affine dimension etc
 paulson <lp15@cam.ac.uk> parents: 
63627diff
changeset | 1213 | |
| 69144 
f13b82281715
new theory Abstract_Topology with lots of stuff from HOL Light's metric.sml
 paulson <lp15@cam.ac.uk> parents: 
69064diff
changeset | 1214 | lemma linepath_le_1: | 
| 
f13b82281715
new theory Abstract_Topology with lots of stuff from HOL Light's metric.sml
 paulson <lp15@cam.ac.uk> parents: 
69064diff
changeset | 1215 | fixes a::"'a::linordered_idom" shows "\<lbrakk>a \<le> 1; b \<le> 1; 0 \<le> u; u \<le> 1\<rbrakk> \<Longrightarrow> (1 - u) * a + u * b \<le> 1" | 
| 
f13b82281715
new theory Abstract_Topology with lots of stuff from HOL Light's metric.sml
 paulson <lp15@cam.ac.uk> parents: 
69064diff
changeset | 1216 | using mult_left_le [of a "1-u"] mult_left_le [of b u] by auto | 
| 
f13b82281715
new theory Abstract_Topology with lots of stuff from HOL Light's metric.sml
 paulson <lp15@cam.ac.uk> parents: 
69064diff
changeset | 1217 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1218 | lemma linepath_in_path: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1219 |   shows "x \<in> {0..1} \<Longrightarrow> linepath a b x \<in> closed_segment a b"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1220 | by (auto simp: segment linepath_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1221 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1222 | lemma linepath_image_01: "linepath a b ` {0..1} = closed_segment a b"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1223 | by (auto simp: segment linepath_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1224 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1225 | lemma linepath_in_convex_hull: | 
| 72256 | 1226 | fixes x::real | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1227 | assumes "a \<in> convex hull S" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1228 | and "b \<in> convex hull S" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1229 | and "0\<le>x" "x\<le>1" | 
| 72256 | 1230 | shows "linepath a b x \<in> convex hull S" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1231 | by (meson assms atLeastAtMost_iff convex_contains_segment convex_convex_hull linepath_in_path subset_eq) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1232 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1233 | lemma Re_linepath: "Re(linepath (of_real a) (of_real b) x) = (1 - x)*a + x*b" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1234 | by (simp add: linepath_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1235 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1236 | lemma Im_linepath: "Im(linepath (of_real a) (of_real b) x) = 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1237 | by (simp add: linepath_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1238 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1239 | lemma bounded_linear_linepath: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1240 | assumes "bounded_linear f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1241 | shows "f (linepath a b x) = linepath (f a) (f b) x" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1242 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1243 | interpret f: bounded_linear f by fact | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1244 | show ?thesis by (simp add: linepath_def f.add f.scale) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1245 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1246 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1247 | lemma bounded_linear_linepath': | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1248 | assumes "bounded_linear f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1249 | shows "f \<circ> linepath a b = linepath (f a) (f b)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1250 | using bounded_linear_linepath[OF assms] by (simp add: fun_eq_iff) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1251 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1252 | lemma linepath_cnj': "cnj \<circ> linepath a b = linepath (cnj a) (cnj b)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1253 | by (simp add: linepath_def fun_eq_iff) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1254 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1255 | lemma differentiable_linepath [intro]: "linepath a b differentiable at x within A" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1256 | by (auto simp: linepath_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1257 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1258 | lemma has_vector_derivative_linepath_within: | 
| 72256 | 1259 | "(linepath a b has_vector_derivative (b - a)) (at x within S)" | 
| 1260 | by (force intro: derivative_eq_intros simp add: linepath_def has_vector_derivative_def algebra_simps) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 1261 | |
| 62618 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1262 | |
| 70136 | 1263 | subsection\<^marker>\<open>tag unimportant\<close>\<open>Segments via convex hulls\<close> | 
| 62618 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1264 | |
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1265 | lemma segments_subset_convex_hull: | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1266 |     "closed_segment a b \<subseteq> (convex hull {a,b,c})"
 | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1267 |     "closed_segment a c \<subseteq> (convex hull {a,b,c})"
 | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1268 |     "closed_segment b c \<subseteq> (convex hull {a,b,c})"
 | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1269 |     "closed_segment b a \<subseteq> (convex hull {a,b,c})"
 | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1270 |     "closed_segment c a \<subseteq> (convex hull {a,b,c})"
 | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1271 |     "closed_segment c b \<subseteq> (convex hull {a,b,c})"
 | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1272 | by (auto simp: segment_convex_hull linepath_of_real elim!: rev_subsetD [OF _ hull_mono]) | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1273 | |
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1274 | lemma midpoints_in_convex_hull: | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1275 | assumes "x \<in> convex hull s" "y \<in> convex hull s" | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1276 | shows "midpoint x y \<in> convex hull s" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1277 | using assms closed_segment_subset_convex_hull csegment_midpoint_subset by blast | 
| 62618 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1278 | |
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1279 | lemma not_in_interior_convex_hull_3: | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1280 | fixes a :: "complex" | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1281 |   shows "a \<notin> interior(convex hull {a,b,c})"
 | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1282 |         "b \<notin> interior(convex hull {a,b,c})"
 | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1283 |         "c \<notin> interior(convex hull {a,b,c})"
 | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1284 | by (auto simp: card_insert_le_m1 not_in_interior_convex_hull) | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1285 | |
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1286 | lemma midpoint_in_closed_segment [simp]: "midpoint a b \<in> closed_segment a b" | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1287 | using midpoints_in_convex_hull segment_convex_hull by blast | 
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1288 | |
| 
f7f2467ab854
Refactoring (moving theorems into better locations), plus a bit of new material
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1289 | lemma midpoint_in_open_segment [simp]: "midpoint a b \<in> open_segment a b \<longleftrightarrow> a \<noteq> b" | 
| 64122 | 1290 | by (simp add: open_segment_def) | 
| 1291 | ||
| 1292 | lemma continuous_IVT_local_extremum: | |
| 1293 | fixes f :: "'a::euclidean_space \<Rightarrow> real" | |
| 1294 | assumes contf: "continuous_on (closed_segment a b) f" | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1295 | and ab: "a \<noteq> b" "f a = f b" | 
| 64122 | 1296 | obtains z where "z \<in> open_segment a b" | 
| 1297 | "(\<forall>w \<in> closed_segment a b. (f w) \<le> (f z)) \<or> | |
| 1298 | (\<forall>w \<in> closed_segment a b. (f z) \<le> (f w))" | |
| 1299 | proof - | |
| 1300 | obtain c where "c \<in> closed_segment a b" and c: "\<And>y. y \<in> closed_segment a b \<Longrightarrow> f y \<le> f c" | |
| 1301 | using continuous_attains_sup [of "closed_segment a b" f] contf by auto | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1302 | moreover | 
| 64122 | 1303 | obtain d where "d \<in> closed_segment a b" and d: "\<And>y. y \<in> closed_segment a b \<Longrightarrow> f d \<le> f y" | 
| 1304 | using continuous_attains_inf [of "closed_segment a b" f] contf by auto | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1305 | ultimately show ?thesis | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1306 | by (smt (verit) UnE ab closed_segment_eq_open empty_iff insert_iff midpoint_in_open_segment that) | 
| 64122 | 1307 | qed | 
| 1308 | ||
| 1309 | text\<open>An injective map into R is also an open map w.r.T. the universe, and conversely. \<close> | |
| 1310 | proposition injective_eq_1d_open_map_UNIV: | |
| 1311 | fixes f :: "real \<Rightarrow> real" | |
| 1312 | assumes contf: "continuous_on S f" and S: "is_interval S" | |
| 1313 | shows "inj_on f S \<longleftrightarrow> (\<forall>T. open T \<and> T \<subseteq> S \<longrightarrow> open(f ` T))" | |
| 1314 | (is "?lhs = ?rhs") | |
| 1315 | proof safe | |
| 1316 | fix T | |
| 1317 | assume injf: ?lhs and "open T" and "T \<subseteq> S" | |
| 1318 | have "\<exists>U. open U \<and> f x \<in> U \<and> U \<subseteq> f ` T" if "x \<in> T" for x | |
| 1319 | proof - | |
| 1320 | obtain \<delta> where "\<delta> > 0" and \<delta>: "cball x \<delta> \<subseteq> T" | |
| 1321 | using \<open>open T\<close> \<open>x \<in> T\<close> open_contains_cball_eq by blast | |
| 1322 | show ?thesis | |
| 1323 | proof (intro exI conjI) | |
| 1324 |       have "closed_segment (x-\<delta>) (x+\<delta>) = {x-\<delta>..x+\<delta>}"
 | |
| 1325 | using \<open>0 < \<delta>\<close> by (auto simp: closed_segment_eq_real_ivl) | |
| 68096 | 1326 | also have "\<dots> \<subseteq> S" | 
| 64122 | 1327 | using \<delta> \<open>T \<subseteq> S\<close> by (auto simp: dist_norm subset_eq) | 
| 1328 | finally have "f ` (open_segment (x-\<delta>) (x+\<delta>)) = open_segment (f (x-\<delta>)) (f (x+\<delta>))" | |
| 1329 | using continuous_injective_image_open_segment_1 | |
| 1330 | by (metis continuous_on_subset [OF contf] inj_on_subset [OF injf]) | |
| 1331 |       then show "open (f ` {x-\<delta><..<x+\<delta>})"
 | |
| 1332 | using \<open>0 < \<delta>\<close> by (simp add: open_segment_eq_real_ivl) | |
| 1333 |       show "f x \<in> f ` {x - \<delta><..<x + \<delta>}"
 | |
| 1334 | by (auto simp: \<open>\<delta> > 0\<close>) | |
| 1335 |       show "f ` {x - \<delta><..<x + \<delta>} \<subseteq> f ` T"
 | |
| 1336 | using \<delta> by (auto simp: dist_norm subset_iff) | |
| 1337 | qed | |
| 1338 | qed | |
| 1339 | with open_subopen show "open (f ` T)" | |
| 1340 | by blast | |
| 1341 | next | |
| 1342 | assume R: ?rhs | |
| 1343 | have False if xy: "x \<in> S" "y \<in> S" and "f x = f y" "x \<noteq> y" for x y | |
| 1344 | proof - | |
| 1345 | have "open (f ` open_segment x y)" | |
| 1346 | using R | |
| 1347 | by (metis S convex_contains_open_segment is_interval_convex open_greaterThanLessThan open_segment_eq_real_ivl xy) | |
| 1348 | moreover | |
| 1349 | have "continuous_on (closed_segment x y) f" | |
| 1350 | by (meson S closed_segment_subset contf continuous_on_subset is_interval_convex that) | |
| 1351 | then obtain \<xi> where "\<xi> \<in> open_segment x y" | |
| 1352 | and \<xi>: "(\<forall>w \<in> closed_segment x y. (f w) \<le> (f \<xi>)) \<or> | |
| 1353 | (\<forall>w \<in> closed_segment x y. (f \<xi>) \<le> (f w))" | |
| 1354 | using continuous_IVT_local_extremum [of x y f] \<open>f x = f y\<close> \<open>x \<noteq> y\<close> by blast | |
| 1355 | ultimately obtain e where "e>0" and e: "\<And>u. dist u (f \<xi>) < e \<Longrightarrow> u \<in> f ` open_segment x y" | |
| 1356 | using open_dist by (metis image_eqI) | |
| 1357 | have fin: "f \<xi> + (e/2) \<in> f ` open_segment x y" "f \<xi> - (e/2) \<in> f ` open_segment x y" | |
| 1358 | using e [of "f \<xi> + (e/2)"] e [of "f \<xi> - (e/2)"] \<open>e > 0\<close> by (auto simp: dist_norm) | |
| 1359 | show ?thesis | |
| 1360 | using \<xi> \<open>0 < e\<close> fin open_closed_segment by fastforce | |
| 1361 | qed | |
| 1362 | then show ?lhs | |
| 1363 | by (force simp: inj_on_def) | |
| 1364 | qed | |
| 36583 | 1365 | |
| 69514 | 1366 | |
| 70136 | 1367 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Bounding a point away from a path\<close> | 
| 36583 | 1368 | |
| 1369 | lemma not_on_path_ball: | |
| 1370 | fixes g :: "real \<Rightarrow> 'a::heine_borel" | |
| 53640 | 1371 | assumes "path g" | 
| 68096 | 1372 | and z: "z \<notin> path_image g" | 
| 53640 | 1373 |   shows "\<exists>e > 0. ball z e \<inter> path_image g = {}"
 | 
| 49653 | 1374 | proof - | 
| 68096 | 1375 | have "closed (path_image g)" | 
| 1376 | by (simp add: \<open>path g\<close> closed_path_image) | |
| 1377 | then obtain a where "a \<in> path_image g" "\<forall>y \<in> path_image g. dist z a \<le> dist z y" | |
| 1378 | by (auto intro: distance_attains_inf[OF _ path_image_nonempty, of g z]) | |
| 49654 | 1379 | then show ?thesis | 
| 68096 | 1380 | by (rule_tac x="dist z a" in exI) (use dist_commute z in auto) | 
| 49653 | 1381 | qed | 
| 36583 | 1382 | |
| 1383 | lemma not_on_path_cball: | |
| 1384 | fixes g :: "real \<Rightarrow> 'a::heine_borel" | |
| 53640 | 1385 | assumes "path g" | 
| 1386 | and "z \<notin> path_image g" | |
| 49653 | 1387 |   shows "\<exists>e>0. cball z e \<inter> (path_image g) = {}"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1388 | by (smt (verit, ccfv_threshold) open_ball assms centre_in_ball inf.orderE inf_assoc | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1389 | inf_bot_right not_on_path_ball open_contains_cball_eq) | 
| 49653 | 1390 | |
| 69518 | 1391 | subsection \<open>Path component\<close> | 
| 1392 | ||
| 1393 | text \<open>Original formalization by Tom Hales\<close> | |
| 36583 | 1394 | |
| 72256 | 1395 | definition\<^marker>\<open>tag important\<close> "path_component S x y \<equiv> | 
| 1396 | (\<exists>g. path g \<and> path_image g \<subseteq> S \<and> pathstart g = x \<and> pathfinish g = y)" | |
| 36583 | 1397 | |
| 70136 | 1398 | abbreviation\<^marker>\<open>tag important\<close> | 
| 72256 | 1399 | "path_component_set S x \<equiv> Collect (path_component S x)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1400 | |
| 53640 | 1401 | lemmas path_defs = path_def pathstart_def pathfinish_def path_image_def path_component_def | 
| 36583 | 1402 | |
| 49653 | 1403 | lemma path_component_mem: | 
| 72256 | 1404 | assumes "path_component S x y" | 
| 1405 | shows "x \<in> S" and "y \<in> S" | |
| 53640 | 1406 | using assms | 
| 1407 | unfolding path_defs | |
| 1408 | by auto | |
| 36583 | 1409 | |
| 49653 | 1410 | lemma path_component_refl: | 
| 72256 | 1411 | assumes "x \<in> S" | 
| 1412 | shows "path_component S x x" | |
| 53640 | 1413 | using assms | 
| 72256 | 1414 | unfolding path_defs | 
| 1415 | by (metis (full_types) assms continuous_on_const image_subset_iff path_image_def) | |
| 1416 | ||
| 1417 | lemma path_component_refl_eq: "path_component S x x \<longleftrightarrow> x \<in> S" | |
| 49653 | 1418 | by (auto intro!: path_component_mem path_component_refl) | 
| 36583 | 1419 | |
| 72256 | 1420 | lemma path_component_sym: "path_component S x y \<Longrightarrow> path_component S y x" | 
| 49653 | 1421 | unfolding path_component_def | 
| 72256 | 1422 | by (metis (no_types) path_image_reversepath path_reversepath pathfinish_reversepath pathstart_reversepath) | 
| 36583 | 1423 | |
| 49653 | 1424 | lemma path_component_trans: | 
| 72256 | 1425 | assumes "path_component S x y" and "path_component S y z" | 
| 1426 | shows "path_component S x z" | |
| 49653 | 1427 | using assms | 
| 1428 | unfolding path_component_def | |
| 72256 | 1429 | by (metis path_join pathfinish_join pathstart_join subset_path_image_join) | 
| 1430 | ||
| 1431 | lemma path_component_of_subset: "S \<subseteq> T \<Longrightarrow> path_component S x y \<Longrightarrow> path_component T x y" | |
| 36583 | 1432 | unfolding path_component_def by auto | 
| 1433 | ||
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1434 | lemma path_component_linepath: | 
| 72256 | 1435 | fixes S :: "'a::real_normed_vector set" | 
| 1436 | shows "closed_segment a b \<subseteq> S \<Longrightarrow> path_component S a b" | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1437 | unfolding path_component_def by fastforce | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1438 | |
| 70136 | 1439 | subsubsection\<^marker>\<open>tag unimportant\<close> \<open>Path components as sets\<close> | 
| 36583 | 1440 | |
| 49653 | 1441 | lemma path_component_set: | 
| 72256 | 1442 | "path_component_set S x = | 
| 1443 |     {y. (\<exists>g. path g \<and> path_image g \<subseteq> S \<and> pathstart g = x \<and> pathfinish g = y)}"
 | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1444 | by (auto simp: path_component_def) | 
| 36583 | 1445 | |
| 72256 | 1446 | lemma path_component_subset: "path_component_set S x \<subseteq> S" | 
| 68096 | 1447 | by (auto simp: path_component_mem(2)) | 
| 36583 | 1448 | |
| 72256 | 1449 | lemma path_component_eq_empty: "path_component_set S x = {} \<longleftrightarrow> x \<notin> S"
 | 
| 60303 | 1450 | using path_component_mem path_component_refl_eq | 
| 1451 | by fastforce | |
| 36583 | 1452 | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1453 | lemma path_component_mono: | 
| 72256 | 1454 | "S \<subseteq> T \<Longrightarrow> (path_component_set S x) \<subseteq> (path_component_set T x)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1455 | by (simp add: Collect_mono path_component_of_subset) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1456 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1457 | lemma path_component_eq: | 
| 72256 | 1458 | "y \<in> path_component_set S x \<Longrightarrow> path_component_set S y = path_component_set S x" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1459 | by (metis (no_types, lifting) Collect_cong mem_Collect_eq path_component_sym path_component_trans) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1460 | |
| 69514 | 1461 | |
| 60420 | 1462 | subsection \<open>Path connectedness of a space\<close> | 
| 36583 | 1463 | |
| 72256 | 1464 | definition\<^marker>\<open>tag important\<close> "path_connected S \<longleftrightarrow> | 
| 1465 | (\<forall>x\<in>S. \<forall>y\<in>S. \<exists>g. path g \<and> path_image g \<subseteq> S \<and> pathstart g = x \<and> pathfinish g = y)" | |
| 36583 | 1466 | |
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1467 | lemma path_connectedin_iff_path_connected_real [simp]: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1468 | "path_connectedin euclideanreal S \<longleftrightarrow> path_connected S" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
77943diff
changeset | 1469 | by (simp add: path_connectedin path_connected_def path_defs image_subset_iff_funcset) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1470 | |
| 72256 | 1471 | lemma path_connected_component: "path_connected S \<longleftrightarrow> (\<forall>x\<in>S. \<forall>y\<in>S. path_component S x y)" | 
| 36583 | 1472 | unfolding path_connected_def path_component_def by auto | 
| 1473 | ||
| 72256 | 1474 | lemma path_connected_component_set: "path_connected S \<longleftrightarrow> (\<forall>x\<in>S. path_component_set S x = S)" | 
| 61694 
6571c78c9667
Removed some legacy theorems; minor adjustments to simplification rules; new material on homotopic paths
 paulson <lp15@cam.ac.uk> parents: 
61518diff
changeset | 1475 | unfolding path_connected_component path_component_subset | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1476 | using path_component_mem by blast | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1477 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1478 | lemma path_component_maximal: | 
| 72256 | 1479 | "\<lbrakk>x \<in> T; path_connected T; T \<subseteq> S\<rbrakk> \<Longrightarrow> T \<subseteq> (path_component_set S x)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1480 | by (metis path_component_mono path_connected_component_set) | 
| 36583 | 1481 | |
| 1482 | lemma convex_imp_path_connected: | |
| 72256 | 1483 | fixes S :: "'a::real_normed_vector set" | 
| 1484 | assumes "convex S" | |
| 1485 | shows "path_connected S" | |
| 49653 | 1486 | unfolding path_connected_def | 
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 1487 | using assms convex_contains_segment by fastforce | 
| 36583 | 1488 | |
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1489 | lemma path_connected_UNIV [iff]: "path_connected (UNIV :: 'a::real_normed_vector set)" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1490 | by (simp add: convex_imp_path_connected) | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1491 | |
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1492 | lemma path_component_UNIV: "path_component_set UNIV x = (UNIV :: 'a::real_normed_vector set)" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1493 | using path_connected_component_set by auto | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1494 | |
| 49653 | 1495 | lemma path_connected_imp_connected: | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1496 | assumes "path_connected S" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1497 | shows "connected S" | 
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 1498 | proof (rule connectedI) | 
| 49653 | 1499 | fix e1 e2 | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1500 |   assume as: "open e1" "open e2" "S \<subseteq> e1 \<union> e2" "e1 \<inter> e2 \<inter> S = {}" "e1 \<inter> S \<noteq> {}" "e2 \<inter> S \<noteq> {}"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1501 | then obtain x1 x2 where obt:"x1 \<in> e1 \<inter> S" "x2 \<in> e2 \<inter> S" | 
| 53640 | 1502 | by auto | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1503 | then obtain g where g: "path g" "path_image g \<subseteq> S" and pg: "pathstart g = x1" "pathfinish g = x2" | 
| 36583 | 1504 | using assms[unfolded path_connected_def,rule_format,of x1 x2] by auto | 
| 49653 | 1505 |   have *: "connected {0..1::real}"
 | 
| 71172 | 1506 | by (auto intro!: convex_connected) | 
| 49653 | 1507 |   have "{0..1} \<subseteq> {x \<in> {0..1}. g x \<in> e1} \<union> {x \<in> {0..1}. g x \<in> e2}"
 | 
| 1508 | using as(3) g(2)[unfolded path_defs] by blast | |
| 1509 |   moreover have "{x \<in> {0..1}. g x \<in> e1} \<inter> {x \<in> {0..1}. g x \<in> e2} = {}"
 | |
| 53640 | 1510 | using as(4) g(2)[unfolded path_defs] | 
| 1511 | unfolding subset_eq | |
| 1512 | by auto | |
| 49653 | 1513 |   moreover have "{x \<in> {0..1}. g x \<in> e1} \<noteq> {} \<and> {x \<in> {0..1}. g x \<in> e2} \<noteq> {}"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1514 | by (smt (verit, ccfv_threshold) IntE atLeastAtMost_iff empty_iff pg mem_Collect_eq obt pathfinish_def pathstart_def) | 
| 49653 | 1515 | ultimately show False | 
| 53640 | 1516 | using *[unfolded connected_local not_ex, rule_format, | 
| 66884 
c2128ab11f61
Switching to inverse image and constant_on, plus some new material
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 1517 |       of "{0..1} \<inter> g -` e1" "{0..1} \<inter> g -` e2"]
 | 
| 63301 | 1518 | using continuous_openin_preimage_gen[OF g(1)[unfolded path_def] as(1)] | 
| 1519 | using continuous_openin_preimage_gen[OF g(1)[unfolded path_def] as(2)] | |
| 49653 | 1520 | by auto | 
| 1521 | qed | |
| 36583 | 1522 | |
| 1523 | lemma open_path_component: | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1524 | fixes S :: "'a::real_normed_vector set" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1525 | assumes "open S" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1526 | shows "open (path_component_set S x)" | 
| 49653 | 1527 | unfolding open_contains_ball | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1528 | by (metis assms centre_in_ball convex_ball convex_imp_path_connected equals0D openE | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1529 | path_component_eq path_component_eq_empty path_component_maximal) | 
| 36583 | 1530 | |
| 1531 | lemma open_non_path_component: | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1532 | fixes S :: "'a::real_normed_vector set" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1533 | assumes "open S" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1534 | shows "open (S - path_component_set S x)" | 
| 49653 | 1535 | unfolding open_contains_ball | 
| 1536 | proof | |
| 1537 | fix y | |
| 68096 | 1538 | assume y: "y \<in> S - path_component_set S x" | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1539 | then obtain e where e: "e > 0" "ball y e \<subseteq> S" | 
| 68096 | 1540 | using assms openE by auto | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1541 | show "\<exists>e>0. ball y e \<subseteq> S - path_component_set S x" | 
| 68096 | 1542 | proof (intro exI conjI subsetI DiffI notI) | 
| 1543 | show "\<And>x. x \<in> ball y e \<Longrightarrow> x \<in> S" | |
| 1544 | using e by blast | |
| 1545 | show False if "z \<in> ball y e" "z \<in> path_component_set S x" for z | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1546 | by (metis (no_types, lifting) Diff_iff centre_in_ball convex_ball convex_imp_path_connected | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1547 | path_component_eq path_component_maximal subsetD that y e) | 
| 68096 | 1548 | qed (use e in auto) | 
| 49653 | 1549 | qed | 
| 36583 | 1550 | |
| 1551 | lemma connected_open_path_connected: | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1552 | fixes S :: "'a::real_normed_vector set" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1553 | assumes "open S" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1554 | and "connected S" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1555 | shows "path_connected S" | 
| 49653 | 1556 | unfolding path_connected_component_set | 
| 1557 | proof (rule, rule, rule path_component_subset, rule) | |
| 1558 | fix x y | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1559 | assume "x \<in> S" and "y \<in> S" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1560 | show "y \<in> path_component_set S x" | 
| 49653 | 1561 | proof (rule ccontr) | 
| 53640 | 1562 | assume "\<not> ?thesis" | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1563 |     moreover have "path_component_set S x \<inter> S \<noteq> {}"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1564 | using \<open>x \<in> S\<close> path_component_eq_empty path_component_subset[of S x] | 
| 53640 | 1565 | by auto | 
| 49653 | 1566 | ultimately | 
| 1567 | show False | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1568 | using \<open>y \<in> S\<close> open_non_path_component[OF \<open>open S\<close>] open_path_component[OF \<open>open S\<close>] | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1569 | using \<open>connected S\<close>[unfolded connected_def not_ex, rule_format, | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1570 | of "path_component_set S x" "S - path_component_set S x"] | 
| 49653 | 1571 | by auto | 
| 1572 | qed | |
| 1573 | qed | |
| 36583 | 1574 | |
| 1575 | lemma path_connected_continuous_image: | |
| 72256 | 1576 | assumes contf: "continuous_on S f" | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1577 | and "path_connected S" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1578 | shows "path_connected (f ` S)" | 
| 49653 | 1579 | unfolding path_connected_def | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1580 | proof clarsimp | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1581 | fix x y | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1582 | assume x: "x \<in> S" and y: "y \<in> S" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1583 | with \<open>path_connected S\<close> | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1584 | show "\<exists>g. path g \<and> path_image g \<subseteq> f ` S \<and> pathstart g = f x \<and> pathfinish g = f y" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1585 | unfolding path_defs path_connected_def | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1586 | using continuous_on_subset[OF contf] | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1587 | by (smt (verit, ccfv_threshold) continuous_on_compose2 image_eqI image_subset_iff) | 
| 49653 | 1588 | qed | 
| 36583 | 1589 | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1590 | lemma path_connected_translationI: | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1591 | fixes a :: "'a :: topological_group_add" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1592 | assumes "path_connected S" shows "path_connected ((\<lambda>x. a + x) ` S)" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1593 | by (intro path_connected_continuous_image assms continuous_intros) | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1594 | |
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1595 | lemma path_connected_translation: | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1596 | fixes a :: "'a :: topological_group_add" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1597 | shows "path_connected ((\<lambda>x. a + x) ` S) = path_connected S" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1598 | proof - | 
| 67399 | 1599 | have "\<forall>x y. (+) (x::'a) ` (+) (0 - x) ` y = y" | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1600 | by (simp add: image_image) | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1601 | then show ?thesis | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1602 | by (metis (no_types) path_connected_translationI) | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1603 | qed | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1604 | |
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1605 | lemma path_connected_segment [simp]: | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1606 | fixes a :: "'a::real_normed_vector" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1607 | shows "path_connected (closed_segment a b)" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1608 | by (simp add: convex_imp_path_connected) | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1609 | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1610 | lemma path_connected_open_segment [simp]: | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1611 | fixes a :: "'a::real_normed_vector" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1612 | shows "path_connected (open_segment a b)" | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1613 | by (simp add: convex_imp_path_connected) | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 1614 | |
| 36583 | 1615 | lemma homeomorphic_path_connectedness: | 
| 68096 | 1616 | "S homeomorphic T \<Longrightarrow> path_connected S \<longleftrightarrow> path_connected T" | 
| 61738 
c4f6031f1310
New material about paths, winding numbers, etc. Added lemmas to divide_const_simps. Misc tuning.
 paulson <lp15@cam.ac.uk> parents: 
61711diff
changeset | 1617 | unfolding homeomorphic_def homeomorphism_def by (metis path_connected_continuous_image) | 
| 36583 | 1618 | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1619 | lemma path_connected_empty [simp]: "path_connected {}"
 | 
| 36583 | 1620 | unfolding path_connected_def by auto | 
| 1621 | ||
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1622 | lemma path_connected_singleton [simp]: "path_connected {a}"
 | 
| 36583 | 1623 | unfolding path_connected_def pathstart_def pathfinish_def path_image_def | 
| 72256 | 1624 | using path_def by fastforce | 
| 36583 | 1625 | |
| 49653 | 1626 | lemma path_connected_Un: | 
| 68096 | 1627 | assumes "path_connected S" | 
| 1628 | and "path_connected T" | |
| 1629 |     and "S \<inter> T \<noteq> {}"
 | |
| 1630 | shows "path_connected (S \<union> T)" | |
| 49653 | 1631 | unfolding path_connected_component | 
| 68096 | 1632 | proof (intro ballI) | 
| 49653 | 1633 | fix x y | 
| 68096 | 1634 | assume x: "x \<in> S \<union> T" and y: "y \<in> S \<union> T" | 
| 1635 | from assms obtain z where z: "z \<in> S" "z \<in> T" | |
| 53640 | 1636 | by auto | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1637 | with x y show "path_component (S \<union> T) x y" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1638 | by (smt (verit) assms(1,2) in_mono mem_Collect_eq path_component_eq path_component_maximal | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1639 | sup.bounded_iff sup.cobounded2 sup_ge1) | 
| 49653 | 1640 | qed | 
| 36583 | 1641 | |
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 1642 | lemma path_connected_UNION: | 
| 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 1643 | assumes "\<And>i. i \<in> A \<Longrightarrow> path_connected (S i)" | 
| 49653 | 1644 | and "\<And>i. i \<in> A \<Longrightarrow> z \<in> S i" | 
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 1645 | shows "path_connected (\<Union>i\<in>A. S i)" | 
| 49653 | 1646 | unfolding path_connected_component | 
| 1647 | proof clarify | |
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 1648 | fix x i y j | 
| 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 1649 | assume *: "i \<in> A" "x \<in> S i" "j \<in> A" "y \<in> S j" | 
| 49654 | 1650 | then have "path_component (S i) x z" and "path_component (S j) z y" | 
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 1651 | using assms by (simp_all add: path_connected_component) | 
| 49654 | 1652 | then have "path_component (\<Union>i\<in>A. S i) x z" and "path_component (\<Union>i\<in>A. S i) z y" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1653 | using *(1,3) by (meson SUP_upper path_component_of_subset)+ | 
| 49654 | 1654 | then show "path_component (\<Union>i\<in>A. S i) x y" | 
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 1655 | by (rule path_component_trans) | 
| 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 1656 | qed | 
| 36583 | 1657 | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1658 | lemma path_component_path_image_pathstart: | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1659 | assumes p: "path p" and x: "x \<in> path_image p" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1660 | shows "path_component (path_image p) (pathstart p) x" | 
| 68096 | 1661 | proof - | 
| 1662 | obtain y where x: "x = p y" and y: "0 \<le> y" "y \<le> 1" | |
| 1663 | using x by (auto simp: path_image_def) | |
| 1664 | show ?thesis | |
| 1665 | unfolding path_component_def | |
| 1666 | proof (intro exI conjI) | |
| 72256 | 1667 |     have "continuous_on ((*) y ` {0..1}) p"
 | 
| 1668 | by (simp add: continuous_on_path image_mult_atLeastAtMost_if p y) | |
| 1669 |     then have "continuous_on {0..1} (p \<circ> ((*) y))"
 | |
| 1670 | using continuous_on_compose continuous_on_mult_const by blast | |
| 68096 | 1671 | then show "path (\<lambda>u. p (y * u))" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1672 | by (simp add: path_def) | 
| 68096 | 1673 | show "path_image (\<lambda>u. p (y * u)) \<subseteq> path_image p" | 
| 1674 | using y mult_le_one by (fastforce simp: path_image_def image_iff) | |
| 1675 | qed (auto simp: pathstart_def pathfinish_def x) | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1676 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1677 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1678 | lemma path_connected_path_image: "path p \<Longrightarrow> path_connected(path_image p)" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1679 | unfolding path_connected_component | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1680 | by (meson path_component_path_image_pathstart path_component_sym path_component_trans) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1681 | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 1682 | lemma path_connected_path_component [simp]: | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1683 | "path_connected (path_component_set S x)" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1684 | by (smt (verit) mem_Collect_eq path_component_def path_component_eq path_component_maximal | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1685 | path_connected_component path_connected_path_image pathstart_in_path_image) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1686 | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1687 | lemma path_component: | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1688 | "path_component S x y \<longleftrightarrow> (\<exists>t. path_connected t \<and> t \<subseteq> S \<and> x \<in> t \<and> y \<in> t)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1689 | (is "?lhs = ?rhs") | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1690 | proof | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1691 | assume ?lhs then show ?rhs | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1692 | by (metis path_component_def path_connected_path_image pathfinish_in_path_image pathstart_in_path_image) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1693 | next | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1694 | assume ?rhs then show ?lhs | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1695 | by (meson path_component_of_subset path_connected_component) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1696 | qed | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1697 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1698 | lemma path_component_path_component [simp]: | 
| 68532 
f8b98d31ad45
Incorporating new/strengthened proofs from Library and AFP entries
 paulson <lp15@cam.ac.uk> parents: 
68310diff
changeset | 1699 | "path_component_set (path_component_set S x) x = path_component_set S x" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1700 | by (metis (full_types) mem_Collect_eq path_component_eq_empty path_component_refl path_connected_component_set path_connected_path_component) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1701 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1702 | lemma path_component_subset_connected_component: | 
| 68532 
f8b98d31ad45
Incorporating new/strengthened proofs from Library and AFP entries
 paulson <lp15@cam.ac.uk> parents: 
68310diff
changeset | 1703 | "(path_component_set S x) \<subseteq> (connected_component_set S x)" | 
| 
f8b98d31ad45
Incorporating new/strengthened proofs from Library and AFP entries
 paulson <lp15@cam.ac.uk> parents: 
68310diff
changeset | 1704 | proof (cases "x \<in> S") | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1705 | case True show ?thesis | 
| 72256 | 1706 | by (simp add: True connected_component_maximal path_component_refl path_component_subset path_connected_imp_connected) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1707 | next | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1708 | case False then show ?thesis | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1709 | using path_component_eq_empty by auto | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 1710 | qed | 
| 49653 | 1711 | |
| 69514 | 1712 | |
| 70136 | 1713 | subsection\<^marker>\<open>tag unimportant\<close>\<open>Lemmas about path-connectedness\<close> | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1714 | |
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1715 | lemma path_connected_linear_image: | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1716 | fixes f :: "'a::real_normed_vector \<Rightarrow> 'b::real_normed_vector" | 
| 68532 
f8b98d31ad45
Incorporating new/strengthened proofs from Library and AFP entries
 paulson <lp15@cam.ac.uk> parents: 
68310diff
changeset | 1717 | assumes "path_connected S" "bounded_linear f" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1718 | shows "path_connected(f ` S)" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1719 | by (auto simp: linear_continuous_on assms path_connected_continuous_image) | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1720 | |
| 68532 
f8b98d31ad45
Incorporating new/strengthened proofs from Library and AFP entries
 paulson <lp15@cam.ac.uk> parents: 
68310diff
changeset | 1721 | lemma is_interval_path_connected: "is_interval S \<Longrightarrow> path_connected S" | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1722 | by (simp add: convex_imp_path_connected is_interval_convex) | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1723 | |
| 71025 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1724 | lemma path_connected_Ioi[simp]: "path_connected {a<..}" for a :: real
 | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1725 | by (simp add: convex_imp_path_connected) | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1726 | |
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1727 | lemma path_connected_Ici[simp]: "path_connected {a..}" for a :: real
 | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1728 | by (simp add: convex_imp_path_connected) | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1729 | |
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1730 | lemma path_connected_Iio[simp]: "path_connected {..<a}" for a :: real
 | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1731 | by (simp add: convex_imp_path_connected) | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1732 | |
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1733 | lemma path_connected_Iic[simp]: "path_connected {..a}" for a :: real
 | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1734 | by (simp add: convex_imp_path_connected) | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1735 | |
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1736 | lemma path_connected_Ioo[simp]: "path_connected {a<..<b}" for a b :: real
 | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1737 | by (simp add: convex_imp_path_connected) | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1738 | |
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1739 | lemma path_connected_Ioc[simp]: "path_connected {a<..b}" for a b :: real
 | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1740 | by (simp add: convex_imp_path_connected) | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1741 | |
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1742 | lemma path_connected_Ico[simp]: "path_connected {a..<b}" for a b :: real
 | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1743 | by (simp add: convex_imp_path_connected) | 
| 
be8cec1abcbb
reduce dependencies of Ordered_Euclidean_Space; move more general material from Cartesian_Euclidean_Space
 immler parents: 
70971diff
changeset | 1744 | |
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1745 | lemma path_connectedin_path_image: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1746 |   assumes "pathin X g" shows "path_connectedin X (g ` ({0..1}))"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1747 | unfolding pathin_def | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1748 | proof (rule path_connectedin_continuous_map_image) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1749 |   show "continuous_map (subtopology euclideanreal {0..1}) X g"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1750 | using assms pathin_def by blast | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1751 | qed (auto simp: is_interval_1 is_interval_path_connected) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1752 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1753 | lemma path_connected_space_subconnected: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1754 | "path_connected_space X \<longleftrightarrow> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1755 | (\<forall>x \<in> topspace X. \<forall>y \<in> topspace X. \<exists>S. path_connectedin X S \<and> x \<in> S \<and> y \<in> S)" | 
| 72256 | 1756 | by (metis path_connectedin path_connectedin_topspace path_connected_space_def) | 
| 1757 | ||
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1758 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1759 | lemma connectedin_path_image: "pathin X g \<Longrightarrow> connectedin X (g ` ({0..1}))"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1760 | by (simp add: path_connectedin_imp_connectedin path_connectedin_path_image) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1761 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1762 | lemma compactin_path_image: "pathin X g \<Longrightarrow> compactin X (g ` ({0..1}))"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1763 | unfolding pathin_def | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1764 |   by (rule image_compactin [of "top_of_set {0..1}"]) auto
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1765 | |
| 62843 
313d3b697c9a
Mostly renaming (from HOL Light to Isabelle conventions), with a couple of new results
 paulson <lp15@cam.ac.uk> parents: 
62626diff
changeset | 1766 | lemma linear_homeomorphism_image: | 
| 
313d3b697c9a
Mostly renaming (from HOL Light to Isabelle conventions), with a couple of new results
 paulson <lp15@cam.ac.uk> parents: 
62626diff
changeset | 1767 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1768 | assumes "linear f" "inj f" | 
| 72256 | 1769 | obtains g where "homeomorphism (f ` S) S g f" | 
| 1770 | proof - | |
| 1771 | obtain g where "linear g" "g \<circ> f = id" | |
| 1772 | using assms linear_injective_left_inverse by blast | |
| 1773 | then have "homeomorphism (f ` S) S g f" | |
| 1774 | using assms unfolding homeomorphism_def | |
| 1775 | by (auto simp: eq_id_iff [symmetric] image_comp linear_conv_bounded_linear linear_continuous_on) | |
| 1776 | then show thesis .. | |
| 1777 | qed | |
| 62843 
313d3b697c9a
Mostly renaming (from HOL Light to Isabelle conventions), with a couple of new results
 paulson <lp15@cam.ac.uk> parents: 
62626diff
changeset | 1778 | |
| 
313d3b697c9a
Mostly renaming (from HOL Light to Isabelle conventions), with a couple of new results
 paulson <lp15@cam.ac.uk> parents: 
62626diff
changeset | 1779 | lemma linear_homeomorphic_image: | 
| 
313d3b697c9a
Mostly renaming (from HOL Light to Isabelle conventions), with a couple of new results
 paulson <lp15@cam.ac.uk> parents: 
62626diff
changeset | 1780 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 
313d3b697c9a
Mostly renaming (from HOL Light to Isabelle conventions), with a couple of new results
 paulson <lp15@cam.ac.uk> parents: 
62626diff
changeset | 1781 | assumes "linear f" "inj f" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1782 | shows "S homeomorphic f ` S" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1783 | by (meson homeomorphic_def homeomorphic_sym linear_homeomorphism_image [OF assms]) | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1784 | |
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1785 | lemma path_connected_Times: | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1786 | assumes "path_connected s" "path_connected t" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1787 | shows "path_connected (s \<times> t)" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1788 | proof (simp add: path_connected_def Sigma_def, clarify) | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1789 | fix x1 y1 x2 y2 | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1790 | assume "x1 \<in> s" "y1 \<in> t" "x2 \<in> s" "y2 \<in> t" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1791 | obtain g where "path g" and g: "path_image g \<subseteq> s" and gs: "pathstart g = x1" and gf: "pathfinish g = x2" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1792 | using \<open>x1 \<in> s\<close> \<open>x2 \<in> s\<close> assms by (force simp: path_connected_def) | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1793 | obtain h where "path h" and h: "path_image h \<subseteq> t" and hs: "pathstart h = y1" and hf: "pathfinish h = y2" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1794 | using \<open>y1 \<in> t\<close> \<open>y2 \<in> t\<close> assms by (force simp: path_connected_def) | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1795 | have "path (\<lambda>z. (x1, h z))" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1796 | using \<open>path h\<close> | 
| 72256 | 1797 | unfolding path_def | 
| 1798 | by (intro continuous_intros continuous_on_compose2 [where g = "Pair _"]; force) | |
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1799 | moreover have "path (\<lambda>z. (g z, y2))" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1800 | using \<open>path g\<close> | 
| 72256 | 1801 | unfolding path_def | 
| 1802 | by (intro continuous_intros continuous_on_compose2 [where g = "Pair _"]; force) | |
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1803 | ultimately have 1: "path ((\<lambda>z. (x1, h z)) +++ (\<lambda>z. (g z, y2)))" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1804 | by (metis hf gs path_join_imp pathstart_def pathfinish_def) | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1805 | have "path_image ((\<lambda>z. (x1, h z)) +++ (\<lambda>z. (g z, y2))) \<subseteq> path_image (\<lambda>z. (x1, h z)) \<union> path_image (\<lambda>z. (g z, y2))" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1806 | by (rule Path_Connected.path_image_join_subset) | 
| 68096 | 1807 |   also have "\<dots> \<subseteq> (\<Union>x\<in>s. \<Union>x1\<in>t. {(x, x1)})"
 | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1808 | using g h \<open>x1 \<in> s\<close> \<open>y2 \<in> t\<close> by (force simp: path_image_def) | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1809 |   finally have 2: "path_image ((\<lambda>z. (x1, h z)) +++ (\<lambda>z. (g z, y2))) \<subseteq> (\<Union>x\<in>s. \<Union>x1\<in>t. {(x, x1)})" .
 | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1810 |   show "\<exists>g. path g \<and> path_image g \<subseteq> (\<Union>x\<in>s. \<Union>x1\<in>t. {(x, x1)}) \<and>
 | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1811 | pathstart g = (x1, y1) \<and> pathfinish g = (x2, y2)" | 
| 72256 | 1812 | using 1 2 gf hs | 
| 1813 | by (metis (no_types, lifting) pathfinish_def pathfinish_join pathstart_def pathstart_join) | |
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1814 | qed | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1815 | |
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1816 | lemma is_interval_path_connected_1: | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1817 | fixes s :: "real set" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1818 | shows "is_interval s \<longleftrightarrow> path_connected s" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1819 | using is_interval_connected_1 is_interval_path_connected path_connected_imp_connected by blast | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1820 | |
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 1821 | |
| 70136 | 1822 | subsection\<^marker>\<open>tag unimportant\<close>\<open>Path components\<close> | 
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 1823 | |
| 62948 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1824 | lemma Union_path_component [simp]: | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1825 |    "Union {path_component_set S x |x. x \<in> S} = S"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 1826 | using path_component_subset path_component_refl by blast | 
| 62948 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1827 | |
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1828 | lemma path_component_disjoint: | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1829 | "disjnt (path_component_set S a) (path_component_set S b) \<longleftrightarrow> | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1830 | (a \<notin> path_component_set S b)" | 
| 72256 | 1831 | unfolding disjnt_iff | 
| 1832 | using path_component_sym path_component_trans by blast | |
| 62948 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1833 | |
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1834 | lemma path_component_eq_eq: | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1835 | "path_component S x = path_component S y \<longleftrightarrow> | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1836 | (x \<notin> S) \<and> (y \<notin> S) \<or> x \<in> S \<and> y \<in> S \<and> path_component S x y" | 
| 72256 | 1837 | (is "?lhs = ?rhs") | 
| 1838 | proof | |
| 1839 | assume ?lhs then show ?rhs | |
| 1840 | by (metis (no_types) path_component_mem(1) path_component_refl) | |
| 1841 | next | |
| 1842 | assume ?rhs then show ?lhs | |
| 1843 | proof | |
| 1844 | assume "x \<notin> S \<and> y \<notin> S" then show ?lhs | |
| 1845 | by (metis Collect_empty_eq_bot path_component_eq_empty) | |
| 1846 | next | |
| 1847 | assume S: "x \<in> S \<and> y \<in> S \<and> path_component S x y" show ?lhs | |
| 1848 | by (rule ext) (metis S path_component_trans path_component_sym) | |
| 1849 | qed | |
| 1850 | qed | |
| 62948 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1851 | |
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1852 | lemma path_component_unique: | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1853 | assumes "x \<in> C" "C \<subseteq> S" "path_connected C" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1854 | "\<And>C'. \<lbrakk>x \<in> C'; C' \<subseteq> S; path_connected C'\<rbrakk> \<Longrightarrow> C' \<subseteq> C" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1855 | shows "path_component_set S x = C" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1856 | by (smt (verit, best) Collect_cong assms path_component path_component_of_subset path_connected_component_set) | 
| 62948 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1857 | |
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1858 | lemma path_component_intermediate_subset: | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1859 | "path_component_set U a \<subseteq> T \<and> T \<subseteq> U | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1860 | \<Longrightarrow> path_component_set T a = path_component_set U a" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 1861 | by (metis (no_types) path_component_mono path_component_path_component subset_antisym) | 
| 62948 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1862 | |
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1863 | lemma complement_path_component_Union: | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1864 | fixes x :: "'a :: topological_space" | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1865 | shows "S - path_component_set S x = | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1866 |          \<Union>({path_component_set S y| y. y \<in> S} - {path_component_set S x})"
 | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1867 | proof - | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1868 |   have *: "(\<And>x. x \<in> S - {a} \<Longrightarrow> disjnt a x) \<Longrightarrow> \<Union>S - a = \<Union>(S - {a})"
 | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1869 | for a::"'a set" and S | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1870 | by (auto simp: disjnt_def) | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1871 |   have "\<And>y. y \<in> {path_component_set S x |x. x \<in> S} - {path_component_set S x}
 | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1872 | \<Longrightarrow> disjnt (path_component_set S x) y" | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1873 | using path_component_disjoint path_component_eq by fastforce | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1874 |   then have "\<Union>{path_component_set S x |x. x \<in> S} - path_component_set S x =
 | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1875 |              \<Union>({path_component_set S y |y. y \<in> S} - {path_component_set S x})"
 | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1876 | by (meson *) | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1877 | then show ?thesis by simp | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1878 | qed | 
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1879 | |
| 
7700f467892b
lots of new theorems for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
62843diff
changeset | 1880 | |
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1881 | subsection\<open>Path components\<close> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1882 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1883 | definition path_component_of | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1884 | where "path_component_of X x y \<equiv> \<exists>g. pathin X g \<and> g 0 = x \<and> g 1 = y" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1885 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1886 | abbreviation path_component_of_set | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1887 | where "path_component_of_set X x \<equiv> Collect (path_component_of X x)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1888 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1889 | definition path_components_of :: "'a topology \<Rightarrow> 'a set set" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1890 | where "path_components_of X \<equiv> path_component_of_set X ` topspace X" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1891 | |
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
77943diff
changeset | 1892 | lemma pathin_canon_iff: "pathin (top_of_set T) g \<longleftrightarrow> path g \<and> g \<in> {0..1} \<rightarrow> T"
 | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
77943diff
changeset | 1893 | by (simp add: path_def pathin_def image_subset_iff_funcset) | 
| 69986 
f2d327275065
generalised homotopic_with to topologies; homotopic_with_canon is the old version
 paulson <lp15@cam.ac.uk> parents: 
69939diff
changeset | 1894 | |
| 
f2d327275065
generalised homotopic_with to topologies; homotopic_with_canon is the old version
 paulson <lp15@cam.ac.uk> parents: 
69939diff
changeset | 1895 | lemma path_component_of_canon_iff [simp]: | 
| 
f2d327275065
generalised homotopic_with to topologies; homotopic_with_canon is the old version
 paulson <lp15@cam.ac.uk> parents: 
69939diff
changeset | 1896 | "path_component_of (top_of_set T) a b \<longleftrightarrow> path_component T a b" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
77943diff
changeset | 1897 | by (simp add: path_component_of_def pathin_canon_iff path_defs image_subset_iff_funcset) | 
| 69986 
f2d327275065
generalised homotopic_with to topologies; homotopic_with_canon is the old version
 paulson <lp15@cam.ac.uk> parents: 
69939diff
changeset | 1898 | |
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1899 | lemma path_component_in_topspace: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1900 | "path_component_of X x y \<Longrightarrow> x \<in> topspace X \<and> y \<in> topspace X" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1901 | by (auto simp: path_component_of_def pathin_def continuous_map_def) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1902 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1903 | lemma path_component_of_refl: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1904 | "path_component_of X x x \<longleftrightarrow> x \<in> topspace X" | 
| 72256 | 1905 | by (metis path_component_in_topspace path_component_of_def pathin_const) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1906 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1907 | lemma path_component_of_sym: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1908 | assumes "path_component_of X x y" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1909 | shows "path_component_of X y x" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1910 | using assms | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1911 | apply (clarsimp simp: path_component_of_def pathin_def) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1912 | apply (rule_tac x="g \<circ> (\<lambda>t. 1 - t)" in exI) | 
| 72256 | 1913 | apply (auto intro!: continuous_map_compose simp: continuous_map_in_subtopology continuous_on_op_minus) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1914 | done | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1915 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1916 | lemma path_component_of_sym_iff: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1917 | "path_component_of X x y \<longleftrightarrow> path_component_of X y x" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1918 | by (metis path_component_of_sym) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1919 | |
| 71236 | 1920 | lemma continuous_map_cases_le: | 
| 1921 | assumes contp: "continuous_map X euclideanreal p" | |
| 1922 | and contq: "continuous_map X euclideanreal q" | |
| 1923 |     and contf: "continuous_map (subtopology X {x. x \<in> topspace X \<and> p x \<le> q x}) Y f"
 | |
| 1924 |     and contg: "continuous_map (subtopology X {x. x \<in> topspace X \<and> q x \<le> p x}) Y g"
 | |
| 1925 | and fg: "\<And>x. \<lbrakk>x \<in> topspace X; p x = q x\<rbrakk> \<Longrightarrow> f x = g x" | |
| 1926 | shows "continuous_map X Y (\<lambda>x. if p x \<le> q x then f x else g x)" | |
| 1927 | proof - | |
| 1928 |   have "continuous_map X Y (\<lambda>x. if q x - p x \<in> {0..} then f x else g x)"
 | |
| 1929 | proof (rule continuous_map_cases_function) | |
| 1930 | show "continuous_map X euclideanreal (\<lambda>x. q x - p x)" | |
| 1931 | by (intro contp contq continuous_intros) | |
| 1932 |     show "continuous_map (subtopology X {x \<in> topspace X. q x - p x \<in> euclideanreal closure_of {0..}}) Y f"
 | |
| 1933 | by (simp add: contf) | |
| 1934 |     show "continuous_map (subtopology X {x \<in> topspace X. q x - p x \<in> euclideanreal closure_of (topspace euclideanreal - {0..})}) Y g"
 | |
| 1935 | by (simp add: contg flip: Compl_eq_Diff_UNIV) | |
| 1936 | qed (auto simp: fg) | |
| 1937 | then show ?thesis | |
| 1938 | by simp | |
| 1939 | qed | |
| 1940 | ||
| 1941 | lemma continuous_map_cases_lt: | |
| 1942 | assumes contp: "continuous_map X euclideanreal p" | |
| 1943 | and contq: "continuous_map X euclideanreal q" | |
| 1944 |     and contf: "continuous_map (subtopology X {x. x \<in> topspace X \<and> p x \<le> q x}) Y f"
 | |
| 1945 |     and contg: "continuous_map (subtopology X {x. x \<in> topspace X \<and> q x \<le> p x}) Y g"
 | |
| 1946 | and fg: "\<And>x. \<lbrakk>x \<in> topspace X; p x = q x\<rbrakk> \<Longrightarrow> f x = g x" | |
| 1947 | shows "continuous_map X Y (\<lambda>x. if p x < q x then f x else g x)" | |
| 1948 | proof - | |
| 1949 |   have "continuous_map X Y (\<lambda>x. if q x - p x \<in> {0<..} then f x else g x)"
 | |
| 1950 | proof (rule continuous_map_cases_function) | |
| 1951 | show "continuous_map X euclideanreal (\<lambda>x. q x - p x)" | |
| 1952 | by (intro contp contq continuous_intros) | |
| 1953 |     show "continuous_map (subtopology X {x \<in> topspace X. q x - p x \<in> euclideanreal closure_of {0<..}}) Y f"
 | |
| 1954 | by (simp add: contf) | |
| 1955 |     show "continuous_map (subtopology X {x \<in> topspace X. q x - p x \<in> euclideanreal closure_of (topspace euclideanreal - {0<..})}) Y g"
 | |
| 1956 | by (simp add: contg flip: Compl_eq_Diff_UNIV) | |
| 1957 | qed (auto simp: fg) | |
| 1958 | then show ?thesis | |
| 1959 | by simp | |
| 1960 | qed | |
| 1961 | ||
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1962 | lemma path_component_of_trans: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1963 | assumes "path_component_of X x y" and "path_component_of X y z" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1964 | shows "path_component_of X x z" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1965 | unfolding path_component_of_def pathin_def | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1966 | proof - | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1967 |   let ?T01 = "top_of_set {0..1::real}"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1968 | obtain g1 g2 where g1: "continuous_map ?T01 X g1" "x = g1 0" "y = g1 1" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1969 | and g2: "continuous_map ?T01 X g2" "g2 0 = g1 1" "z = g2 1" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1970 | using assms unfolding path_component_of_def pathin_def by blast | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1971 | let ?g = "\<lambda>x. if x \<le> 1/2 then (g1 \<circ> (\<lambda>t. 2 * t)) x else (g2 \<circ> (\<lambda>t. 2 * t -1)) x" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1972 | show "\<exists>g. continuous_map ?T01 X g \<and> g 0 = x \<and> g 1 = z" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1973 | proof (intro exI conjI) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1974 |     show "continuous_map (subtopology euclideanreal {0..1}) X ?g"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1975 | proof (intro continuous_map_cases_le continuous_map_compose, force, force) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1976 |       show "continuous_map (subtopology ?T01 {x \<in> topspace ?T01. x \<le> 1/2}) ?T01 ((*) 2)"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1977 | by (auto simp: continuous_map_in_subtopology continuous_map_from_subtopology) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1978 | have "continuous_map | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1979 |              (subtopology (top_of_set {0..1}) {x. 0 \<le> x \<and> x \<le> 1 \<and> 1 \<le> x * 2})
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1980 | euclideanreal (\<lambda>t. 2 * t - 1)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1981 | by (intro continuous_intros) (force intro: continuous_map_from_subtopology) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1982 |       then show "continuous_map (subtopology ?T01 {x \<in> topspace ?T01. 1/2 \<le> x}) ?T01 (\<lambda>t. 2 * t - 1)"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1983 | by (force simp: continuous_map_in_subtopology) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1984 | show "(g1 \<circ> (*) 2) x = (g2 \<circ> (\<lambda>t. 2 * t - 1)) x" if "x \<in> topspace ?T01" "x = 1/2" for x | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1985 | using that by (simp add: g2(2) mult.commute continuous_map_from_subtopology) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1986 | qed (auto simp: g1 g2) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1987 | qed (auto simp: g1 g2) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1988 | qed | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1989 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1990 | lemma path_component_of_mono: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1991 | "\<lbrakk>path_component_of (subtopology X S) x y; S \<subseteq> T\<rbrakk> \<Longrightarrow> path_component_of (subtopology X T) x y" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1992 | unfolding path_component_of_def | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1993 | by (metis subsetD pathin_subtopology) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1994 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1995 | lemma path_component_of: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 1996 | "path_component_of X x y \<longleftrightarrow> (\<exists>T. path_connectedin X T \<and> x \<in> T \<and> y \<in> T)" | 
| 72256 | 1997 | (is "?lhs = ?rhs") | 
| 1998 | proof | |
| 1999 | assume ?lhs then show ?rhs | |
| 2000 | by (metis atLeastAtMost_iff image_eqI order_refl path_component_of_def path_connectedin_path_image zero_le_one) | |
| 2001 | next | |
| 2002 | assume ?rhs then show ?lhs | |
| 2003 | by (metis path_component_of_def path_connectedin) | |
| 2004 | qed | |
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2005 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2006 | lemma path_component_of_set: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2007 | "path_component_of X x y \<longleftrightarrow> (\<exists>g. pathin X g \<and> g 0 = x \<and> g 1 = y)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2008 | by (auto simp: path_component_of_def) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2009 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2010 | lemma path_component_of_subset_topspace: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2011 | "Collect(path_component_of X x) \<subseteq> topspace X" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2012 | using path_component_in_topspace by fastforce | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2013 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2014 | lemma path_component_of_eq_empty: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2015 |    "Collect(path_component_of X x) = {} \<longleftrightarrow> (x \<notin> topspace X)"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2016 | using path_component_in_topspace path_component_of_refl by fastforce | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2017 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2018 | lemma path_connected_space_iff_path_component: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2019 | "path_connected_space X \<longleftrightarrow> (\<forall>x \<in> topspace X. \<forall>y \<in> topspace X. path_component_of X x y)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2020 | by (simp add: path_component_of path_connected_space_subconnected) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2021 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2022 | lemma path_connected_space_imp_path_component_of: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2023 | "\<lbrakk>path_connected_space X; a \<in> topspace X; b \<in> topspace X\<rbrakk> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2024 | \<Longrightarrow> path_component_of X a b" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2025 | by (simp add: path_connected_space_iff_path_component) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2026 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2027 | lemma path_connected_space_path_component_set: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2028 | "path_connected_space X \<longleftrightarrow> (\<forall>x \<in> topspace X. Collect(path_component_of X x) = topspace X)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2029 | using path_component_of_subset_topspace path_connected_space_iff_path_component by fastforce | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2030 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2031 | lemma path_component_of_maximal: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2032 | "\<lbrakk>path_connectedin X s; x \<in> s\<rbrakk> \<Longrightarrow> s \<subseteq> Collect(path_component_of X x)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2033 | using path_component_of by fastforce | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2034 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2035 | lemma path_component_of_equiv: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2036 | "path_component_of X x y \<longleftrightarrow> x \<in> topspace X \<and> y \<in> topspace X \<and> path_component_of X x = path_component_of X y" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2037 | (is "?lhs = ?rhs") | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2038 | proof | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2039 | assume ?lhs | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2040 | then show ?rhs | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2041 | unfolding fun_eq_iff path_component_in_topspace | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2042 | by (metis path_component_in_topspace path_component_of_sym path_component_of_trans) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2043 | qed (simp add: path_component_of_refl) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2044 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2045 | lemma path_component_of_disjoint: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2046 | "disjnt (Collect (path_component_of X x)) (Collect (path_component_of X y)) \<longleftrightarrow> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2047 | ~(path_component_of X x y)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2048 | by (force simp: disjnt_def path_component_of_eq_empty path_component_of_equiv) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2049 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2050 | lemma path_component_of_eq: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2051 | "path_component_of X x = path_component_of X y \<longleftrightarrow> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2052 | (x \<notin> topspace X) \<and> (y \<notin> topspace X) \<or> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2053 | x \<in> topspace X \<and> y \<in> topspace X \<and> path_component_of X x y" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2054 | by (metis Collect_empty_eq_bot path_component_of_eq_empty path_component_of_equiv) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2055 | |
| 72256 | 2056 | lemma path_component_of_aux: | 
| 2057 | "path_component_of X x y | |
| 2058 | \<Longrightarrow> path_component_of (subtopology X (Collect (path_component_of X x))) x y" | |
| 2059 | by (meson path_component_of path_component_of_maximal path_connectedin_subtopology) | |
| 2060 | ||
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2061 | lemma path_connectedin_path_component_of: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2062 | "path_connectedin X (Collect (path_component_of X x))" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2063 | proof - | 
| 72256 | 2064 | have "topspace (subtopology X (path_component_of_set X x)) = path_component_of_set X x" | 
| 2065 | by (meson path_component_of_subset_topspace topspace_subtopology_subset) | |
| 2066 | then have "path_connected_space (subtopology X (path_component_of_set X x))" | |
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2067 | by (metis mem_Collect_eq path_component_of_aux path_component_of_equiv path_connected_space_iff_path_component) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2068 | then show ?thesis | 
| 72256 | 2069 | by (simp add: path_component_of_subset_topspace path_connectedin_def) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2070 | qed | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2071 | |
| 70178 
4900351361b0
Lindelöf spaces and supporting material
 paulson <lp15@cam.ac.uk> parents: 
70136diff
changeset | 2072 | lemma path_connectedin_euclidean [simp]: | 
| 
4900351361b0
Lindelöf spaces and supporting material
 paulson <lp15@cam.ac.uk> parents: 
70136diff
changeset | 2073 | "path_connectedin euclidean S \<longleftrightarrow> path_connected S" | 
| 
4900351361b0
Lindelöf spaces and supporting material
 paulson <lp15@cam.ac.uk> parents: 
70136diff
changeset | 2074 | by (auto simp: path_connectedin_def path_connected_space_iff_path_component path_connected_component) | 
| 
4900351361b0
Lindelöf spaces and supporting material
 paulson <lp15@cam.ac.uk> parents: 
70136diff
changeset | 2075 | |
| 
4900351361b0
Lindelöf spaces and supporting material
 paulson <lp15@cam.ac.uk> parents: 
70136diff
changeset | 2076 | lemma path_connected_space_euclidean_subtopology [simp]: | 
| 
4900351361b0
Lindelöf spaces and supporting material
 paulson <lp15@cam.ac.uk> parents: 
70136diff
changeset | 2077 | "path_connected_space(subtopology euclidean S) \<longleftrightarrow> path_connected S" | 
| 
4900351361b0
Lindelöf spaces and supporting material
 paulson <lp15@cam.ac.uk> parents: 
70136diff
changeset | 2078 | using path_connectedin_topspace by force | 
| 
4900351361b0
Lindelöf spaces and supporting material
 paulson <lp15@cam.ac.uk> parents: 
70136diff
changeset | 2079 | |
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2080 | lemma Union_path_components_of: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2081 | "\<Union>(path_components_of X) = topspace X" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2082 | by (auto simp: path_components_of_def path_component_of_equiv) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2083 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2084 | lemma path_components_of_maximal: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2085 | "\<lbrakk>C \<in> path_components_of X; path_connectedin X S; ~disjnt C S\<rbrakk> \<Longrightarrow> S \<subseteq> C" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2086 | by (smt (verit, ccfv_SIG) disjnt_iff imageE mem_Collect_eq path_component_of_equiv | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2087 | path_component_of_maximal path_components_of_def) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2088 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2089 | lemma pairwise_disjoint_path_components_of: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2090 | "pairwise disjnt (path_components_of X)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2091 | by (auto simp: path_components_of_def pairwise_def path_component_of_disjoint path_component_of_equiv) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2092 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2093 | lemma complement_path_components_of_Union: | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2094 |    "C \<in> path_components_of X \<Longrightarrow> topspace X - C = \<Union>(path_components_of X - {C})"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2095 | by (metis Union_path_components_of bot.extremum ccpo_Sup_singleton diff_Union_pairwise_disjoint | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2096 | insert_subsetI pairwise_disjoint_path_components_of) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2097 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2098 | lemma nonempty_path_components_of: | 
| 72256 | 2099 |   assumes "C \<in> path_components_of X" shows "C \<noteq> {}"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2100 | by (metis assms imageE path_component_of_eq_empty path_components_of_def) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2101 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2102 | lemma path_components_of_subset: "C \<in> path_components_of X \<Longrightarrow> C \<subseteq> topspace X" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2103 | by (auto simp: path_components_of_def path_component_of_equiv) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2104 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2105 | lemma path_connectedin_path_components_of: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2106 | "C \<in> path_components_of X \<Longrightarrow> path_connectedin X C" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2107 | by (auto simp: path_components_of_def path_connectedin_path_component_of) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2108 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2109 | lemma path_component_in_path_components_of: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2110 | "Collect (path_component_of X a) \<in> path_components_of X \<longleftrightarrow> a \<in> topspace X" | 
| 72256 | 2111 | by (metis imageI nonempty_path_components_of path_component_of_eq_empty path_components_of_def) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2112 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2113 | lemma path_connectedin_Union: | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2114 |   assumes \<A>: "\<And>S. S \<in> \<A> \<Longrightarrow> path_connectedin X S" and "\<Inter>\<A> \<noteq> {}"
 | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2115 | shows "path_connectedin X (\<Union>\<A>)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2116 | proof - | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2117 | obtain a where "\<And>S. S \<in> \<A> \<Longrightarrow> a \<in> S" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2118 | using assms by blast | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2119 | then have "\<And>x. x \<in> topspace (subtopology X (\<Union>\<A>)) \<Longrightarrow> path_component_of (subtopology X (\<Union>\<A>)) a x" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2120 | unfolding topspace_subtopology path_component_of | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2121 | by (metis (full_types) IntD2 Union_iff Union_upper \<A> path_connectedin_subtopology) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2122 | then show ?thesis | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2123 | using \<A> unfolding path_connectedin_def | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2124 | by (metis Sup_le_iff path_component_of_equiv path_connected_space_iff_path_component) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2125 | qed | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2126 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2127 | lemma path_connectedin_Un: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2128 |    "\<lbrakk>path_connectedin X S; path_connectedin X T; S \<inter> T \<noteq> {}\<rbrakk>
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2129 | \<Longrightarrow> path_connectedin X (S \<union> T)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2130 |   by (blast intro: path_connectedin_Union [of "{S,T}", simplified])
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2131 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2132 | lemma path_connected_space_iff_components_eq: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2133 | "path_connected_space X \<longleftrightarrow> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2134 | (\<forall>C \<in> path_components_of X. \<forall>C' \<in> path_components_of X. C = C')" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2135 | unfolding path_components_of_def | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2136 | proof (intro iffI ballI) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2137 | assume "\<forall>C \<in> path_component_of_set X ` topspace X. | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2138 | \<forall>C' \<in> path_component_of_set X ` topspace X. C = C'" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2139 | then show "path_connected_space X" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2140 | using path_component_of_refl path_connected_space_iff_path_component by fastforce | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2141 | qed (auto simp: path_connected_space_path_component_set) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2142 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2143 | lemma path_components_of_eq_empty: | 
| 78336 | 2144 |    "path_components_of X = {} \<longleftrightarrow> X = trivial_topology"
 | 
| 2145 | by (metis image_is_empty path_components_of_def subtopology_eq_discrete_topology_empty) | |
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2146 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2147 | lemma path_components_of_empty_space: | 
| 78336 | 2148 |    "path_components_of trivial_topology = {}"
 | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2149 | by (simp add: path_components_of_eq_empty) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2150 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2151 | lemma path_components_of_subset_singleton: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2152 |   "path_components_of X \<subseteq> {S} \<longleftrightarrow>
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2153 |         path_connected_space X \<and> (topspace X = {} \<or> topspace X = S)"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2154 | proof (cases "topspace X = {}")
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2155 | case True | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2156 | then show ?thesis | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2157 | by (auto simp: path_components_of_empty_space path_connected_space_topspace_empty) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2158 | next | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2159 | case False | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2160 |   have "(path_components_of X = {S}) \<longleftrightarrow> (path_connected_space X \<and> topspace X = S)"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2161 | by (metis False Set.set_insert ex_in_conv insert_iff path_component_in_path_components_of | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2162 | path_connected_space_iff_components_eq path_connected_space_path_component_set) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2163 | with False show ?thesis | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2164 | by (simp add: path_components_of_eq_empty subset_singleton_iff) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2165 | qed | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2166 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2167 | lemma path_connected_space_iff_components_subset_singleton: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2168 |    "path_connected_space X \<longleftrightarrow> (\<exists>a. path_components_of X \<subseteq> {a})"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2169 | by (simp add: path_components_of_subset_singleton) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2170 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2171 | lemma path_components_of_eq_singleton: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2172 |    "path_components_of X = {S} \<longleftrightarrow> path_connected_space X \<and> topspace X \<noteq> {} \<and> S = topspace X"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2173 | by (metis cSup_singleton insert_not_empty path_components_of_subset_singleton subset_singleton_iff) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2174 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2175 | lemma path_components_of_path_connected_space: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2176 |    "path_connected_space X \<Longrightarrow> path_components_of X = (if topspace X = {} then {} else {topspace X})"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2177 | by (simp add: path_components_of_eq_empty path_components_of_eq_singleton) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2178 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2179 | lemma path_component_subset_connected_component_of: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2180 | "path_component_of_set X x \<subseteq> connected_component_of_set X x" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2181 | proof (cases "x \<in> topspace X") | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2182 | case True | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2183 | then show ?thesis | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2184 | by (simp add: connected_component_of_maximal path_component_of_refl path_connectedin_imp_connectedin path_connectedin_path_component_of) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2185 | next | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2186 | case False | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2187 | then show ?thesis | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2188 | using path_component_of_eq_empty by fastforce | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2189 | qed | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2190 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2191 | lemma exists_path_component_of_superset: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2192 |   assumes S: "path_connectedin X S" and ne: "topspace X \<noteq> {}"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2193 | obtains C where "C \<in> path_components_of X" "S \<subseteq> C" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2194 | by (metis S ne ex_in_conv path_component_in_path_components_of path_component_of_maximal path_component_of_subset_topspace subset_eq that) | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2195 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2196 | lemma path_component_of_eq_overlap: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2197 | "path_component_of X x = path_component_of X y \<longleftrightarrow> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2198 | (x \<notin> topspace X) \<and> (y \<notin> topspace X) \<or> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2199 |       Collect (path_component_of X x) \<inter> Collect (path_component_of X y) \<noteq> {}"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2200 | by (metis disjnt_def empty_iff inf_bot_right mem_Collect_eq path_component_of_disjoint path_component_of_eq path_component_of_eq_empty) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2201 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2202 | lemma path_component_of_nonoverlap: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2203 |    "Collect (path_component_of X x) \<inter> Collect (path_component_of X y) = {} \<longleftrightarrow>
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2204 | (x \<notin> topspace X) \<or> (y \<notin> topspace X) \<or> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2205 | path_component_of X x \<noteq> path_component_of X y" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2206 | by (metis inf.idem path_component_of_eq_empty path_component_of_eq_overlap) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2207 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2208 | lemma path_component_of_overlap: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2209 |    "Collect (path_component_of X x) \<inter> Collect (path_component_of X y) \<noteq> {} \<longleftrightarrow>
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2210 | x \<in> topspace X \<and> y \<in> topspace X \<and> path_component_of X x = path_component_of X y" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2211 | by (meson path_component_of_nonoverlap) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2212 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2213 | lemma path_components_of_disjoint: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2214 | "\<lbrakk>C \<in> path_components_of X; C' \<in> path_components_of X\<rbrakk> \<Longrightarrow> disjnt C C' \<longleftrightarrow> C \<noteq> C'" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2215 | by (auto simp: path_components_of_def path_component_of_disjoint path_component_of_equiv) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2216 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2217 | lemma path_components_of_overlap: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2218 |     "\<lbrakk>C \<in> path_components_of X; C' \<in> path_components_of X\<rbrakk> \<Longrightarrow> C \<inter> C' \<noteq> {} \<longleftrightarrow> C = C'"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2219 | by (auto simp: path_components_of_def path_component_of_equiv) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2220 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2221 | lemma path_component_of_unique: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2222 | "\<lbrakk>x \<in> C; path_connectedin X C; \<And>C'. \<lbrakk>x \<in> C'; path_connectedin X C'\<rbrakk> \<Longrightarrow> C' \<subseteq> C\<rbrakk> | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2223 | \<Longrightarrow> Collect (path_component_of X x) = C" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2224 | by (meson subsetD eq_iff path_component_of_maximal path_connectedin_path_component_of) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2225 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2226 | lemma path_component_of_discrete_topology [simp]: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2227 |   "Collect (path_component_of (discrete_topology U) x) = (if x \<in> U then {x} else {})"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2228 | proof - | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2229 |   have "\<And>C'. \<lbrakk>x \<in> C'; path_connectedin (discrete_topology U) C'\<rbrakk> \<Longrightarrow> C' \<subseteq> {x}"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2230 | by (metis path_connectedin_discrete_topology subsetD singletonD) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2231 |   then have "x \<in> U \<Longrightarrow> Collect (path_component_of (discrete_topology U) x) = {x}"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2232 | by (simp add: path_component_of_unique) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2233 | then show ?thesis | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2234 | using path_component_in_topspace by fastforce | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2235 | qed | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2236 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2237 | lemma path_component_of_discrete_topology_iff [simp]: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2238 | "path_component_of (discrete_topology U) x y \<longleftrightarrow> x \<in> U \<and> y=x" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2239 | by (metis empty_iff insertI1 mem_Collect_eq path_component_of_discrete_topology singletonD) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2240 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2241 | lemma path_components_of_discrete_topology [simp]: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2242 |    "path_components_of (discrete_topology U) = (\<lambda>x. {x}) ` U"
 | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2243 | by (auto simp: path_components_of_def image_def fun_eq_iff) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2244 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2245 | lemma homeomorphic_map_path_component_of: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2246 | assumes f: "homeomorphic_map X Y f" and x: "x \<in> topspace X" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2247 | shows "Collect (path_component_of Y (f x)) = f ` Collect(path_component_of X x)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2248 | proof - | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2249 | obtain g where g: "homeomorphic_maps X Y f g" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2250 | using f homeomorphic_map_maps by blast | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2251 | show ?thesis | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2252 | proof | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2253 | have "Collect (path_component_of Y (f x)) \<subseteq> topspace Y" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2254 | by (simp add: path_component_of_subset_topspace) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2255 | moreover have "g ` Collect(path_component_of Y (f x)) \<subseteq> Collect (path_component_of X (g (f x)))" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2256 | using f g x unfolding homeomorphic_maps_def | 
| 78336 | 2257 | by (metis image_Collect_subsetI image_eqI mem_Collect_eq path_component_of_equiv path_component_of_maximal | 
| 2258 | path_connectedin_continuous_map_image path_connectedin_path_component_of) | |
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2259 | ultimately show "Collect (path_component_of Y (f x)) \<subseteq> f ` Collect (path_component_of X x)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2260 | using g x unfolding homeomorphic_maps_def continuous_map_def image_iff subset_iff | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2261 | by metis | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2262 | show "f ` Collect (path_component_of X x) \<subseteq> Collect (path_component_of Y (f x))" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2263 | proof (rule path_component_of_maximal) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2264 | show "path_connectedin Y (f ` Collect (path_component_of X x))" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2265 | by (meson f homeomorphic_map_path_connectedness_eq path_connectedin_path_component_of) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2266 | qed (simp add: path_component_of_refl x) | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2267 | qed | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2268 | qed | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2269 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2270 | lemma homeomorphic_map_path_components_of: | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2271 | assumes "homeomorphic_map X Y f" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2272 | shows "path_components_of Y = (image f) ` (path_components_of X)" | 
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2273 | unfolding path_components_of_def homeomorphic_imp_surjective_map [OF assms, symmetric] | 
| 72256 | 2274 | using assms homeomorphic_map_path_component_of by fastforce | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2275 | |
| 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2276 | |
| 77943 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2277 | subsection\<open>Paths and path-connectedness\<close> | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2278 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2279 | lemma path_connected_space_quotient_map_image: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2280 | "\<lbrakk>quotient_map X Y q; path_connected_space X\<rbrakk> \<Longrightarrow> path_connected_space Y" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2281 | by (metis path_connectedin_continuous_map_image path_connectedin_topspace quotient_imp_continuous_map quotient_imp_surjective_map) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2282 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2283 | lemma path_connected_space_retraction_map_image: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2284 | "\<lbrakk>retraction_map X Y r; path_connected_space X\<rbrakk> \<Longrightarrow> path_connected_space Y" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2285 | using path_connected_space_quotient_map_image retraction_imp_quotient_map by blast | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2286 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2287 | lemma path_connected_space_prod_topology: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2288 | "path_connected_space(prod_topology X Y) \<longleftrightarrow> | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2289 |         topspace(prod_topology X Y) = {} \<or> path_connected_space X \<and> path_connected_space Y"
 | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2290 | proof (cases "topspace(prod_topology X Y) = {}")
 | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2291 | case True | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2292 | then show ?thesis | 
| 78336 | 2293 | using path_connected_space_topspace_empty by force | 
| 77943 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2294 | next | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2295 | case False | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2296 | have "path_connected_space (prod_topology X Y)" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2297 | if X: "path_connected_space X" and Y: "path_connected_space Y" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2298 | proof (clarsimp simp: path_connected_space_def) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2299 | fix x y x' y' | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2300 | assume "x \<in> topspace X" and "y \<in> topspace Y" and "x' \<in> topspace X" and "y' \<in> topspace Y" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2301 | obtain f where "pathin X f" "f 0 = x" "f 1 = x'" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2302 | by (meson X \<open>x \<in> topspace X\<close> \<open>x' \<in> topspace X\<close> path_connected_space_def) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2303 | obtain g where "pathin Y g" "g 0 = y" "g 1 = y'" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2304 | by (meson Y \<open>y \<in> topspace Y\<close> \<open>y' \<in> topspace Y\<close> path_connected_space_def) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2305 | show "\<exists>h. pathin (prod_topology X Y) h \<and> h 0 = (x,y) \<and> h 1 = (x',y')" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2306 | proof (intro exI conjI) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2307 | show "pathin (prod_topology X Y) (\<lambda>t. (f t, g t))" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2308 | using \<open>pathin X f\<close> \<open>pathin Y g\<close> by (simp add: continuous_map_paired pathin_def) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2309 | show "(\<lambda>t. (f t, g t)) 0 = (x, y)" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2310 | using \<open>f 0 = x\<close> \<open>g 0 = y\<close> by blast | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2311 | show "(\<lambda>t. (f t, g t)) 1 = (x', y')" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2312 | using \<open>f 1 = x'\<close> \<open>g 1 = y'\<close> by blast | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2313 | qed | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2314 | qed | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2315 | then show ?thesis | 
| 78336 | 2316 | by (metis False path_connected_space_quotient_map_image prod_topology_trivial1 prod_topology_trivial2 | 
| 2317 | quotient_map_fst quotient_map_snd topspace_discrete_topology) | |
| 77943 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2318 | qed | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2319 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2320 | lemma path_connectedin_Times: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2321 | "path_connectedin (prod_topology X Y) (S \<times> T) \<longleftrightarrow> | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2322 |         S = {} \<or> T = {} \<or> path_connectedin X S \<and> path_connectedin Y T"
 | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2323 | by (auto simp add: path_connectedin_def subtopology_Times path_connected_space_prod_topology) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2324 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2325 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2326 | subsection\<open>Path components\<close> | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2327 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2328 | lemma path_component_of_subtopology_eq: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2329 | "path_component_of (subtopology X U) x = path_component_of X x \<longleftrightarrow> path_component_of_set X x \<subseteq> U" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2330 | (is "?lhs = ?rhs") | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2331 | proof | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2332 | show "?lhs \<Longrightarrow> ?rhs" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2333 | by (metis path_connectedin_path_component_of path_connectedin_subtopology) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2334 | next | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2335 | show "?rhs \<Longrightarrow> ?lhs" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2336 | unfolding fun_eq_iff | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2337 | by (metis path_connectedin_subtopology path_component_of path_component_of_aux path_component_of_mono) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2338 | qed | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2339 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2340 | lemma path_components_of_subtopology: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2341 | assumes "C \<in> path_components_of X" "C \<subseteq> U" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2342 | shows "C \<in> path_components_of (subtopology X U)" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2343 | using assms path_component_of_refl path_component_of_subtopology_eq topspace_subtopology | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2344 | by (smt (verit) imageE path_component_in_path_components_of path_components_of_def) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2345 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2346 | lemma path_imp_connected_component_of: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2347 | "path_component_of X x y \<Longrightarrow> connected_component_of X x y" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2348 | by (metis in_mono mem_Collect_eq path_component_subset_connected_component_of) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2349 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2350 | lemma finite_path_components_of_finite: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2351 | "finite(topspace X) \<Longrightarrow> finite(path_components_of X)" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2352 | by (simp add: Union_path_components_of finite_UnionD) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2353 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2354 | lemma path_component_of_continuous_image: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2355 | "\<lbrakk>continuous_map X X' f; path_component_of X x y\<rbrakk> \<Longrightarrow> path_component_of X' (f x) (f y)" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2356 | by (meson image_eqI path_component_of path_connectedin_continuous_map_image) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2357 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2358 | lemma path_component_of_pair [simp]: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2359 | "path_component_of_set (prod_topology X Y) (x,y) = | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2360 | path_component_of_set X x \<times> path_component_of_set Y y" (is "?lhs = ?rhs") | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2361 | proof (cases "?lhs = {}")
 | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2362 | case True | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2363 | then show ?thesis | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2364 | by (metis Sigma_empty1 Sigma_empty2 mem_Sigma_iff path_component_of_eq_empty topspace_prod_topology) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2365 | next | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2366 | case False | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2367 | then have "path_component_of X x x" "path_component_of Y y y" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2368 | using path_component_of_eq_empty path_component_of_refl by fastforce+ | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2369 | moreover | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2370 | have "path_connectedin (prod_topology X Y) (path_component_of_set X x \<times> path_component_of_set Y y)" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2371 | by (metis path_connectedin_Times path_connectedin_path_component_of) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2372 | moreover have "path_component_of X x a" "path_component_of Y y b" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2373 | if "(x, y) \<in> C'" "(a,b) \<in> C'" and "path_connectedin (prod_topology X Y) C'" for C' a b | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2374 | by (smt (verit, best) that continuous_map_fst continuous_map_snd fst_conv snd_conv path_component_of path_component_of_continuous_image)+ | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2375 | ultimately show ?thesis | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2376 | by (intro path_component_of_unique) auto | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2377 | qed | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2378 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2379 | lemma path_components_of_prod_topology: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2380 | "path_components_of (prod_topology X Y) = | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2381 | (\<lambda>(C,D). C \<times> D) ` (path_components_of X \<times> path_components_of Y)" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2382 | by (force simp add: image_iff path_components_of_def) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2383 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2384 | lemma path_components_of_prod_topology': | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2385 | "path_components_of (prod_topology X Y) = | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2386 |     {C \<times> D |C D. C \<in> path_components_of X \<and> D \<in> path_components_of Y}"
 | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2387 | by (auto simp: path_components_of_prod_topology) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2388 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2389 | lemma path_component_of_product_topology: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2390 | "path_component_of_set (product_topology X I) f = | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2391 |     (if f \<in> extensional I then PiE I (\<lambda>i. path_component_of_set (X i) (f i)) else {})"
 | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2392 | (is "?lhs = ?rhs") | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2393 | proof (cases "path_component_of_set (product_topology X I) f = {}")
 | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2394 | case True | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2395 | then show ?thesis | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2396 | by (smt (verit) PiE_eq_empty_iff PiE_iff path_component_of_eq_empty topspace_product_topology) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2397 | next | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2398 | case False | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2399 | then have [simp]: "f \<in> extensional I" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2400 | by (auto simp: path_component_of_eq_empty PiE_iff path_component_of_equiv) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2401 | show ?thesis | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2402 | proof (intro path_component_of_unique) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2403 | show "f \<in> ?rhs" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2404 | using False path_component_of_eq_empty path_component_of_refl by force | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2405 |     show "path_connectedin (product_topology X I) (if f \<in> extensional I then \<Pi>\<^sub>E i\<in>I. path_component_of_set (X i) (f i) else {})"
 | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2406 | by (simp add: path_connectedin_PiE path_connectedin_path_component_of) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2407 | fix C' | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2408 | assume "f \<in> C'" and C': "path_connectedin (product_topology X I) C'" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2409 | show "C' \<subseteq> ?rhs" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2410 | proof - | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2411 | have "C' \<subseteq> extensional I" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2412 | using PiE_def C' path_connectedin_subset_topspace by fastforce | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2413 | with \<open>f \<in> C'\<close> C' show ?thesis | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2414 | apply (clarsimp simp: PiE_iff subset_iff) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2415 | by (smt (verit, ccfv_threshold) continuous_map_product_projection path_component_of path_component_of_continuous_image) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2416 | qed | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2417 | qed | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2418 | qed | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2419 | |
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2420 | lemma path_components_of_product_topology: | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2421 | "path_components_of (product_topology X I) = | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2422 |     {PiE I B |B. \<forall>i \<in> I. B i \<in> path_components_of(X i)}"  (is "?lhs=?rhs")
 | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2423 | proof | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2424 | show "?lhs \<subseteq> ?rhs" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2425 | unfolding path_components_of_def image_subset_iff | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2426 | by (smt (verit) image_iff mem_Collect_eq path_component_of_product_topology topspace_product_topology_alt) | 
| 77943 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2427 | next | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2428 | show "?rhs \<subseteq> ?lhs" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2429 | proof | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2430 | fix F | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2431 | assume "F \<in> ?rhs" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2432 | then obtain B where B: "F = Pi\<^sub>E I B" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2433 | and "\<forall>i\<in>I. \<exists>x\<in>topspace (X i). B i = path_component_of_set (X i) x" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2434 | by (force simp add: path_components_of_def image_iff) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2435 | then obtain f where ftop: "\<And>i. i \<in> I \<Longrightarrow> f i \<in> topspace (X i)" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2436 | and BF: "\<And>i. i \<in> I \<Longrightarrow> B i = path_component_of_set (X i) (f i)" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2437 | by metis | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2438 | then have "F = path_component_of_set (product_topology X I) (restrict f I)" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2439 | by (metis (mono_tags, lifting) B PiE_cong path_component_of_product_topology restrict_apply' restrict_extensional) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2440 | then show "F \<in> ?lhs" | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2441 | by (simp add: ftop path_component_in_path_components_of) | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2442 | qed | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2443 | qed | 
| 
ffdad62bc235
Importation of additional lemmas from metric.ml
 paulson <lp15@cam.ac.uk> parents: 
77221diff
changeset | 2444 | |
| 60420 | 2445 | subsection \<open>Sphere is path-connected\<close> | 
| 37489 
44e42d392c6e
Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
 hoelzl parents: 
36583diff
changeset | 2446 | |
| 36583 | 2447 | lemma path_connected_punctured_universe: | 
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2448 |   assumes "2 \<le> DIM('a::euclidean_space)"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2449 |   shows "path_connected (- {a::'a})"
 | 
| 49653 | 2450 | proof - | 
| 50526 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2451 |   let ?A = "{x::'a. \<exists>i\<in>Basis. x \<bullet> i < a \<bullet> i}"
 | 
| 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2452 |   let ?B = "{x::'a. \<exists>i\<in>Basis. a \<bullet> i < x \<bullet> i}"
 | 
| 36583 | 2453 | |
| 49653 | 2454 | have A: "path_connected ?A" | 
| 2455 | unfolding Collect_bex_eq | |
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2456 | proof (rule path_connected_UNION) | 
| 50526 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2457 | fix i :: 'a | 
| 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2458 | assume "i \<in> Basis" | 
| 53640 | 2459 |     then show "(\<Sum>i\<in>Basis. (a \<bullet> i - 1)*\<^sub>R i) \<in> {x::'a. x \<bullet> i < a \<bullet> i}"
 | 
| 2460 | by simp | |
| 50526 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2461 |     show "path_connected {x. x \<bullet> i < a \<bullet> i}"
 | 
| 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2462 | using convex_imp_path_connected [OF convex_halfspace_lt, of i "a \<bullet> i"] | 
| 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2463 | by (simp add: inner_commute) | 
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2464 | qed | 
| 53640 | 2465 | have B: "path_connected ?B" | 
| 2466 | unfolding Collect_bex_eq | |
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2467 | proof (rule path_connected_UNION) | 
| 50526 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2468 | fix i :: 'a | 
| 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2469 | assume "i \<in> Basis" | 
| 53640 | 2470 |     then show "(\<Sum>i\<in>Basis. (a \<bullet> i + 1) *\<^sub>R i) \<in> {x::'a. a \<bullet> i < x \<bullet> i}"
 | 
| 2471 | by simp | |
| 50526 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2472 |     show "path_connected {x. a \<bullet> i < x \<bullet> i}"
 | 
| 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2473 | using convex_imp_path_connected [OF convex_halfspace_gt, of "a \<bullet> i" i] | 
| 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2474 | by (simp add: inner_commute) | 
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2475 | qed | 
| 53640 | 2476 | obtain S :: "'a set" where "S \<subseteq> Basis" and "card S = Suc (Suc 0)" | 
| 76837 | 2477 | using obtain_subset_with_card_n[OF assms] by (force simp add: eval_nat_numeral) | 
| 53640 | 2478 | then obtain b0 b1 :: 'a where "b0 \<in> Basis" and "b1 \<in> Basis" and "b0 \<noteq> b1" | 
| 50526 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2479 | unfolding card_Suc_eq by auto | 
| 53640 | 2480 | then have "a + b0 - b1 \<in> ?A \<inter> ?B" | 
| 2481 | by (auto simp: inner_simps inner_Basis) | |
| 2482 |   then have "?A \<inter> ?B \<noteq> {}"
 | |
| 2483 | by fast | |
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2484 | with A B have "path_connected (?A \<union> ?B)" | 
| 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2485 | by (rule path_connected_Un) | 
| 50526 
899c9c4e4a4c
Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
 hoelzl parents: 
49654diff
changeset | 2486 |   also have "?A \<union> ?B = {x. \<exists>i\<in>Basis. x \<bullet> i \<noteq> a \<bullet> i}"
 | 
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2487 | unfolding neq_iff bex_disj_distrib Collect_disj_eq .. | 
| 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2488 |   also have "\<dots> = {x. x \<noteq> a}"
 | 
| 53640 | 2489 | unfolding euclidean_eq_iff [where 'a='a] | 
| 2490 | by (simp add: Bex_def) | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2491 |   also have "\<dots> = - {a}"
 | 
| 53640 | 2492 | by auto | 
| 37674 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2493 | finally show ?thesis . | 
| 
f86de9c00c47
convert theorem path_connected_sphere to euclidean_space class
 huffman parents: 
37489diff
changeset | 2494 | qed | 
| 36583 | 2495 | |
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2496 | corollary connected_punctured_universe: | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2497 |   "2 \<le> DIM('N::euclidean_space) \<Longrightarrow> connected(- {a::'N})"
 | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2498 | by (simp add: path_connected_punctured_universe path_connected_imp_connected) | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2499 | |
| 68607 
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
 immler parents: 
68532diff
changeset | 2500 | proposition path_connected_sphere: | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2501 | fixes a :: "'a :: euclidean_space" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2502 |   assumes "2 \<le> DIM('a)"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2503 | shows "path_connected(sphere a r)" | 
| 68607 
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
 immler parents: 
68532diff
changeset | 2504 | proof (cases r "0::real" rule: linorder_cases) | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2505 | case greater | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2506 |   then have eq: "(sphere (0::'a) r) = (\<lambda>x. (r / norm x) *\<^sub>R x) ` (- {0::'a})"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2507 | by (force simp: image_iff split: if_split_asm) | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2508 |   have "continuous_on (- {0::'a}) (\<lambda>x. (r / norm x) *\<^sub>R x)"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2509 | by (intro continuous_intros) auto | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2510 |   then have "path_connected ((\<lambda>x. (r / norm x) *\<^sub>R x) ` (- {0::'a}))"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2511 | by (intro path_connected_continuous_image path_connected_punctured_universe assms) | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2512 | with eq have "path_connected((+) a ` (sphere (0::'a) r))" | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2513 | by (simp add: path_connected_translation) | 
| 53640 | 2514 | then show ?thesis | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2515 | by (metis add.right_neutral sphere_translation) | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2516 | qed auto | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2517 | |
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2518 | lemma connected_sphere: | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2519 | fixes a :: "'a :: euclidean_space" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2520 |     assumes "2 \<le> DIM('a)"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2521 | shows "connected(sphere a r)" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2522 | using path_connected_sphere [OF assms] | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2523 | by (simp add: path_connected_imp_connected) | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2524 | |
| 36583 | 2525 | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2526 | corollary path_connected_complement_bounded_convex: | 
| 72256 | 2527 | fixes S :: "'a :: euclidean_space set" | 
| 2528 |     assumes "bounded S" "convex S" and 2: "2 \<le> DIM('a)"
 | |
| 2529 | shows "path_connected (- S)" | |
| 2530 | proof (cases "S = {}")
 | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2531 | case True then show ?thesis | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2532 | using convex_imp_path_connected by auto | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2533 | next | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2534 | case False | 
| 72256 | 2535 | then obtain a where "a \<in> S" by auto | 
| 2536 | have \<section> [rule_format]: "\<forall>y\<in>S. \<forall>u. 0 \<le> u \<and> u \<le> 1 \<longrightarrow> (1 - u) *\<^sub>R a + u *\<^sub>R y \<in> S" | |
| 2537 | using \<open>convex S\<close> \<open>a \<in> S\<close> by (simp add: convex_alt) | |
| 2538 |   { fix x y assume "x \<notin> S" "y \<notin> S"
 | |
| 2539 | then have "x \<noteq> a" "y \<noteq> a" using \<open>a \<in> S\<close> by auto | |
| 2540 | then have bxy: "bounded(insert x (insert y S))" | |
| 2541 | by (simp add: \<open>bounded S\<close>) | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2542 | then obtain B::real where B: "0 < B" and Bx: "norm (a - x) < B" and By: "norm (a - y) < B" | 
| 72256 | 2543 | and "S \<subseteq> ball a B" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2544 | using bounded_subset_ballD [OF bxy, of a] by (auto simp: dist_norm) | 
| 63040 | 2545 | define C where "C = B / norm(x - a)" | 
| 72256 | 2546 | let ?Cxa = "a + C *\<^sub>R (x - a)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2547 |     { fix u
 | 
| 72256 | 2548 | assume u: "(1 - u) *\<^sub>R x + u *\<^sub>R ?Cxa \<in> S" and "0 \<le> u" "u \<le> 1" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2549 | have CC: "1 \<le> 1 + (C - 1) * u" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 2550 | using \<open>x \<noteq> a\<close> \<open>0 \<le> u\<close> Bx | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 2551 | by (auto simp add: C_def norm_minus_commute) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2552 | have *: "\<And>v. (1 - u) *\<^sub>R x + u *\<^sub>R (a + v *\<^sub>R (x - a)) = a + (1 + (v - 1) * u) *\<^sub>R (x - a)" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2553 | by (simp add: algebra_simps) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2554 | have "a + ((1 / (1 + C * u - u)) *\<^sub>R x + ((u / (1 + C * u - u)) *\<^sub>R a + (C * u / (1 + C * u - u)) *\<^sub>R x)) = | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2555 | (1 + (u / (1 + C * u - u))) *\<^sub>R a + ((1 / (1 + C * u - u)) + (C * u / (1 + C * u - u))) *\<^sub>R x" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2556 | by (simp add: algebra_simps) | 
| 68096 | 2557 | also have "\<dots> = (1 + (u / (1 + C * u - u))) *\<^sub>R a + (1 + (u / (1 + C * u - u))) *\<^sub>R x" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2558 | using CC by (simp add: field_simps) | 
| 68096 | 2559 | also have "\<dots> = x + (1 + (u / (1 + C * u - u))) *\<^sub>R a + (u / (1 + C * u - u)) *\<^sub>R x" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2560 | by (simp add: algebra_simps) | 
| 68096 | 2561 | also have "\<dots> = x + ((1 / (1 + C * u - u)) *\<^sub>R a + | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2562 | ((u / (1 + C * u - u)) *\<^sub>R x + (C * u / (1 + C * u - u)) *\<^sub>R a))" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2563 | using CC by (simp add: field_simps) (simp add: add_divide_distrib scaleR_add_left) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2564 | finally have xeq: "(1 - 1 / (1 + (C - 1) * u)) *\<^sub>R a + (1 / (1 + (C - 1) * u)) *\<^sub>R (a + (1 + (C - 1) * u) *\<^sub>R (x - a)) = x" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2565 | by (simp add: algebra_simps) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2566 | have False | 
| 72256 | 2567 | using \<section> [of "a + (1 + (C - 1) * u) *\<^sub>R (x - a)" "1 / (1 + (C - 1) * u)"] | 
| 2568 | using u \<open>x \<noteq> a\<close> \<open>x \<notin> S\<close> \<open>0 \<le> u\<close> CC | |
| 2569 | by (auto simp: xeq *) | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2570 | } | 
| 72256 | 2571 | then have pcx: "path_component (- S) x ?Cxa" | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2572 | by (force simp: closed_segment_def intro!: path_component_linepath) | 
| 67443 
3abf6a722518
standardized towards new-style formal comments: isabelle update_comments;
 wenzelm parents: 
67399diff
changeset | 2573 | define D where "D = B / norm(y - a)" \<comment> \<open>massive duplication with the proof above\<close> | 
| 72256 | 2574 | let ?Dya = "a + D *\<^sub>R (y - a)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2575 |     { fix u
 | 
| 72256 | 2576 | assume u: "(1 - u) *\<^sub>R y + u *\<^sub>R ?Dya \<in> S" and "0 \<le> u" "u \<le> 1" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2577 | have DD: "1 \<le> 1 + (D - 1) * u" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 2578 | using \<open>y \<noteq> a\<close> \<open>0 \<le> u\<close> By | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 2579 | by (auto simp add: D_def norm_minus_commute) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2580 | have *: "\<And>v. (1 - u) *\<^sub>R y + u *\<^sub>R (a + v *\<^sub>R (y - a)) = a + (1 + (v - 1) * u) *\<^sub>R (y - a)" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2581 | by (simp add: algebra_simps) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2582 | have "a + ((1 / (1 + D * u - u)) *\<^sub>R y + ((u / (1 + D * u - u)) *\<^sub>R a + (D * u / (1 + D * u - u)) *\<^sub>R y)) = | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2583 | (1 + (u / (1 + D * u - u))) *\<^sub>R a + ((1 / (1 + D * u - u)) + (D * u / (1 + D * u - u))) *\<^sub>R y" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2584 | by (simp add: algebra_simps) | 
| 68096 | 2585 | also have "\<dots> = (1 + (u / (1 + D * u - u))) *\<^sub>R a + (1 + (u / (1 + D * u - u))) *\<^sub>R y" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2586 | using DD by (simp add: field_simps) | 
| 68096 | 2587 | also have "\<dots> = y + (1 + (u / (1 + D * u - u))) *\<^sub>R a + (u / (1 + D * u - u)) *\<^sub>R y" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2588 | by (simp add: algebra_simps) | 
| 68096 | 2589 | also have "\<dots> = y + ((1 / (1 + D * u - u)) *\<^sub>R a + | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2590 | ((u / (1 + D * u - u)) *\<^sub>R y + (D * u / (1 + D * u - u)) *\<^sub>R a))" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2591 | using DD by (simp add: field_simps) (simp add: add_divide_distrib scaleR_add_left) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2592 | finally have xeq: "(1 - 1 / (1 + (D - 1) * u)) *\<^sub>R a + (1 / (1 + (D - 1) * u)) *\<^sub>R (a + (1 + (D - 1) * u) *\<^sub>R (y - a)) = y" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2593 | by (simp add: algebra_simps) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2594 | have False | 
| 72256 | 2595 | using \<section> [of "a + (1 + (D - 1) * u) *\<^sub>R (y - a)" "1 / (1 + (D - 1) * u)"] | 
| 2596 | using u \<open>y \<noteq> a\<close> \<open>y \<notin> S\<close> \<open>0 \<le> u\<close> DD | |
| 2597 | by (auto simp: xeq *) | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2598 | } | 
| 72256 | 2599 | then have pdy: "path_component (- S) y ?Dya" | 
| 69939 
812ce526da33
new material on topology: products, etc. Some renamings, esp continuous_on_topo -> continuous_map
 paulson <lp15@cam.ac.uk> parents: 
69712diff
changeset | 2600 | by (force simp: closed_segment_def intro!: path_component_linepath) | 
| 72256 | 2601 | have pyx: "path_component (- S) ?Dya ?Cxa" | 
| 2602 | proof (rule path_component_of_subset) | |
| 2603 | show "sphere a B \<subseteq> - S" | |
| 2604 | using \<open>S \<subseteq> ball a B\<close> by (force simp: ball_def dist_norm norm_minus_commute) | |
| 2605 | have aB: "?Dya \<in> sphere a B" "?Cxa \<in> sphere a B" | |
| 2606 | using \<open>x \<noteq> a\<close> using \<open>y \<noteq> a\<close> B by (auto simp: dist_norm C_def D_def) | |
| 2607 | then show "path_component (sphere a B) ?Dya ?Cxa" | |
| 2608 | using path_connected_sphere [OF 2] path_connected_component by blast | |
| 2609 | qed | |
| 2610 | have "path_component (- S) x y" | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2611 | by (metis path_component_trans path_component_sym pcx pdy pyx) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2612 | } | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2613 | then show ?thesis | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2614 | by (auto simp: path_connected_component) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2615 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2616 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2617 | lemma connected_complement_bounded_convex: | 
| 72256 | 2618 | fixes S :: "'a :: euclidean_space set" | 
| 2619 |     assumes "bounded S" "convex S" "2 \<le> DIM('a)"
 | |
| 2620 | shows "connected (- S)" | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2621 | using path_connected_complement_bounded_convex [OF assms] path_connected_imp_connected by blast | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2622 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2623 | lemma connected_diff_ball: | 
| 72256 | 2624 | fixes S :: "'a :: euclidean_space set" | 
| 2625 |     assumes "connected S" "cball a r \<subseteq> S" "2 \<le> DIM('a)"
 | |
| 2626 | shows "connected (S - ball a r)" | |
| 2627 | proof (rule connected_diff_open_from_closed [OF ball_subset_cball]) | |
| 2628 | show "connected (cball a r - ball a r)" | |
| 2629 | using assms connected_sphere by (auto simp: cball_diff_eq_sphere) | |
| 2630 | qed (auto simp: assms dist_norm) | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2631 | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2632 | proposition connected_open_delete: | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2633 |   assumes "open S" "connected S" and 2: "2 \<le> DIM('N::euclidean_space)"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2634 |     shows "connected(S - {a::'N})"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2635 | proof (cases "a \<in> S") | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2636 | case True | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2637 | with \<open>open S\<close> obtain \<epsilon> where "\<epsilon> > 0" and \<epsilon>: "cball a \<epsilon> \<subseteq> S" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2638 | using open_contains_cball_eq by blast | 
| 72256 | 2639 | define b where "b \<equiv> a + \<epsilon> *\<^sub>R (SOME i. i \<in> Basis)" | 
| 2640 | have "dist a b = \<epsilon>" | |
| 2641 | by (simp add: b_def dist_norm SOME_Basis \<open>0 < \<epsilon>\<close> less_imp_le) | |
| 2642 |   with \<epsilon> have "b \<in> \<Inter>{S - ball a r |r. 0 < r \<and> r < \<epsilon>}"
 | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2643 | by auto | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2644 |   then have nonemp: "(\<Inter>{S - ball a r |r. 0 < r \<and> r < \<epsilon>}) = {} \<Longrightarrow> False"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2645 | by auto | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2646 | have con: "\<And>r. r < \<epsilon> \<Longrightarrow> connected (S - ball a r)" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2647 | using \<epsilon> by (force intro: connected_diff_ball [OF \<open>connected S\<close> _ 2]) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2648 |   have "x \<in> \<Union>{S - ball a r |r. 0 < r \<and> r < \<epsilon>}" if "x \<in> S - {a}" for x
 | 
| 72256 | 2649 | using that \<open>0 < \<epsilon>\<close> | 
| 2650 | by (intro UnionI [of "S - ball a (min \<epsilon> (dist a x) / 2)"]) auto | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2651 |   then have "S - {a} = \<Union>{S - ball a r | r. 0 < r \<and> r < \<epsilon>}"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2652 | by auto | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2653 | then show ?thesis | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2654 | by (auto intro: connected_Union con dest!: nonemp) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2655 | next | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2656 | case False then show ?thesis | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2657 | by (simp add: \<open>connected S\<close>) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2658 | qed | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2659 | |
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2660 | corollary path_connected_open_delete: | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2661 |   assumes "open S" "connected S" and 2: "2 \<le> DIM('N::euclidean_space)"
 | 
| 72256 | 2662 |   shows "path_connected(S - {a::'N})"
 | 
| 2663 | by (simp add: assms connected_open_delete connected_open_path_connected open_delete) | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2664 | |
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2665 | corollary path_connected_punctured_ball: | 
| 72256 | 2666 |   "2 \<le> DIM('N::euclidean_space) \<Longrightarrow> path_connected(ball a r - {a::'N})"
 | 
| 2667 | by (simp add: path_connected_open_delete) | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2668 | |
| 63151 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2669 | corollary connected_punctured_ball: | 
| 72256 | 2670 |   "2 \<le> DIM('N::euclidean_space) \<Longrightarrow> connected(ball a r - {a::'N})"
 | 
| 2671 | by (simp add: connected_open_delete) | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 2672 | |
| 63151 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2673 | corollary connected_open_delete_finite: | 
| 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2674 | fixes S T::"'a::euclidean_space set" | 
| 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2675 |   assumes S: "open S" "connected S" and 2: "2 \<le> DIM('a)" and "finite T"
 | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 2676 | shows "connected(S - T)" | 
| 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63540diff
changeset | 2677 | using \<open>finite T\<close> S | 
| 63151 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2678 | proof (induct T) | 
| 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2679 | case empty | 
| 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2680 | show ?case using \<open>connected S\<close> by simp | 
| 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2681 | next | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2682 | case (insert x T) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2683 | then have "connected (S-T)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2684 | by auto | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2685 | moreover have "open (S - T)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2686 | using finite_imp_closed[OF \<open>finite T\<close>] \<open>open S\<close> by auto | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2687 |   ultimately have "connected (S - T - {x})" 
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2688 | using connected_open_delete[OF _ _ 2] by auto | 
| 63151 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2689 | thus ?case by (metis Diff_insert) | 
| 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2690 | qed | 
| 
82df5181d699
updated proof of Residue Theorem (form Wenda Li)
 paulson <lp15@cam.ac.uk> parents: 
63126diff
changeset | 2691 | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2692 | lemma sphere_1D_doubleton_zero: | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2693 |   assumes 1: "DIM('a) = 1" and "r > 0"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2694 | obtains x y::"'a::euclidean_space" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2695 |     where "sphere 0 r = {x,y} \<and> dist x y = 2*r"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2696 | proof - | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2697 |   obtain b::'a where b: "Basis = {b}"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2698 | using 1 card_1_singletonE by blast | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2699 | show ?thesis | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2700 | proof (intro that conjI) | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2701 | have "x = norm x *\<^sub>R b \<or> x = - norm x *\<^sub>R b" if "r = norm x" for x | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2702 | proof - | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2703 | have xb: "(x \<bullet> b) *\<^sub>R b = x" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2704 | using euclidean_representation [of x, unfolded b] by force | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2705 | then have "norm ((x \<bullet> b) *\<^sub>R b) = norm x" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2706 | by simp | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2707 | with b have "\<bar>x \<bullet> b\<bar> = norm x" | 
| 68310 | 2708 | using norm_Basis by (simp add: b) | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2709 | with xb show ?thesis | 
| 73932 
fd21b4a93043
added opaque_combs and renamed hide_lams to opaque_lifting
 desharna parents: 
73795diff
changeset | 2710 | by (metis (mono_tags, opaque_lifting) abs_eq_iff abs_norm_cancel) | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2711 | qed | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2712 |     with \<open>r > 0\<close> b show "sphere 0 r = {r *\<^sub>R b, - r *\<^sub>R b}"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2713 | by (force simp: sphere_def dist_norm) | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2714 | have "dist (r *\<^sub>R b) (- r *\<^sub>R b) = norm (r *\<^sub>R b + r *\<^sub>R b)" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2715 | by (simp add: dist_norm) | 
| 68096 | 2716 | also have "\<dots> = norm ((2*r) *\<^sub>R b)" | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2717 | by (metis mult_2 scaleR_add_left) | 
| 68096 | 2718 | also have "\<dots> = 2*r" | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2719 | using \<open>r > 0\<close> b norm_Basis by fastforce | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2720 | finally show "dist (r *\<^sub>R b) (- r *\<^sub>R b) = 2*r" . | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2721 | qed | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2722 | qed | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2723 | |
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2724 | lemma sphere_1D_doubleton: | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2725 | fixes a :: "'a :: euclidean_space" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2726 |   assumes "DIM('a) = 1" and "r > 0"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2727 |   obtains x y where "sphere a r = {x,y} \<and> dist x y = 2*r"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2728 | using sphere_1D_doubleton_zero [OF assms] dist_add_cancel image_empty image_insert | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2729 | by (metis (no_types, opaque_lifting) add.right_neutral sphere_translation) | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2730 | |
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2731 | lemma psubset_sphere_Compl_connected: | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2732 | fixes S :: "'a::euclidean_space set" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2733 |   assumes S: "S \<subset> sphere a r" and "0 < r" and 2: "2 \<le> DIM('a)"
 | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2734 | shows "connected(- S)" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2735 | proof - | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2736 | have "S \<subseteq> sphere a r" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2737 | using S by blast | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2738 | obtain b where "dist a b = r" and "b \<notin> S" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2739 | using S mem_sphere by blast | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2740 |   have CS: "- S = {x. dist a x \<le> r \<and> (x \<notin> S)} \<union> {x. r \<le> dist a x \<and> (x \<notin> S)}"
 | 
| 68096 | 2741 | by auto | 
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2742 |   have "{x. dist a x \<le> r \<and> x \<notin> S} \<inter> {x. r \<le> dist a x \<and> x \<notin> S} \<noteq> {}"
 | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2743 | using \<open>b \<notin> S\<close> \<open>dist a b = r\<close> by blast | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2744 |   moreover have "connected {x. dist a x \<le> r \<and> x \<notin> S}"
 | 
| 72256 | 2745 | using assms | 
| 2746 | by (force intro: connected_intermediate_closure [of "ball a r"]) | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2747 |   moreover have "connected {x. r \<le> dist a x \<and> x \<notin> S}"
 | 
| 72256 | 2748 | proof (rule connected_intermediate_closure [of "- cball a r"]) | 
| 2749 |     show "{x. r \<le> dist a x \<and> x \<notin> S} \<subseteq> closure (- cball a r)"
 | |
| 2750 | using interior_closure by (force intro: connected_complement_bounded_convex) | |
| 2751 | qed (use assms connected_complement_bounded_convex in auto) | |
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2752 | ultimately show ?thesis | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2753 | by (simp add: CS connected_Un) | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2754 | qed | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 2755 | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 2756 | |
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2757 | subsection\<open>Every annulus is a connected set\<close> | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2758 | |
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2759 | lemma path_connected_2DIM_I: | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2760 | fixes a :: "'N::euclidean_space" | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2761 |   assumes 2: "2 \<le> DIM('N)" and pc: "path_connected {r. 0 \<le> r \<and> P r}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2762 |   shows "path_connected {x. P(norm(x - a))}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2763 | proof - | 
| 67399 | 2764 |   have "{x. P(norm(x - a))} = (+) a ` {x. P(norm x)}"
 | 
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2765 | by force | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2766 |   moreover have "path_connected {x::'N. P(norm x)}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2767 | proof - | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2768 |     let ?D = "{x. 0 \<le> x \<and> P x} \<times> sphere (0::'N) 1"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2769 | have "x \<in> (\<lambda>z. fst z *\<^sub>R snd z) ` ?D" | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2770 | if "P (norm x)" for x::'N | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2771 | proof (cases "x=0") | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2772 | case True | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2773 | with that show ?thesis | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2774 | apply (simp add: image_iff) | 
| 72256 | 2775 | by (metis (no_types) mem_sphere_0 order_refl vector_choose_size zero_le_one) | 
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2776 | next | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2777 | case False | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2778 | with that show ?thesis | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2779 | by (rule_tac x="(norm x, x /\<^sub>R norm x)" in image_eqI) auto | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2780 | qed | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2781 |     then have *: "{x::'N. P(norm x)} =  (\<lambda>z. fst z *\<^sub>R snd z) ` ?D"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2782 | by auto | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2783 | have "continuous_on ?D (\<lambda>z:: real\<times>'N. fst z *\<^sub>R snd z)" | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2784 | by (intro continuous_intros) | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2785 | moreover have "path_connected ?D" | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2786 | by (metis path_connected_Times [OF pc] path_connected_sphere 2) | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2787 | ultimately show ?thesis | 
| 72256 | 2788 | by (simp add: "*" path_connected_continuous_image) | 
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2789 | qed | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2790 | ultimately show ?thesis | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2791 | using path_connected_translation by metis | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2792 | qed | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2793 | |
| 68607 
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
 immler parents: 
68532diff
changeset | 2794 | proposition path_connected_annulus: | 
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2795 | fixes a :: "'N::euclidean_space" | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2796 |   assumes "2 \<le> DIM('N)"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2797 |   shows "path_connected {x. r1 < norm(x - a) \<and> norm(x - a) < r2}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2798 |         "path_connected {x. r1 < norm(x - a) \<and> norm(x - a) \<le> r2}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2799 |         "path_connected {x. r1 \<le> norm(x - a) \<and> norm(x - a) < r2}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2800 |         "path_connected {x. r1 \<le> norm(x - a) \<and> norm(x - a) \<le> r2}"
 | 
| 68607 
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
 immler parents: 
68532diff
changeset | 2801 | by (auto simp: is_interval_def intro!: is_interval_convex convex_imp_path_connected path_connected_2DIM_I [OF assms]) | 
| 
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
 immler parents: 
68532diff
changeset | 2802 | |
| 
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
 immler parents: 
68532diff
changeset | 2803 | proposition connected_annulus: | 
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2804 | fixes a :: "'N::euclidean_space" | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2805 |   assumes "2 \<le> DIM('N::euclidean_space)"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2806 |   shows "connected {x. r1 < norm(x - a) \<and> norm(x - a) < r2}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2807 |         "connected {x. r1 < norm(x - a) \<and> norm(x - a) \<le> r2}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2808 |         "connected {x. r1 \<le> norm(x - a) \<and> norm(x - a) < r2}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 2809 |         "connected {x. r1 \<le> norm(x - a) \<and> norm(x - a) \<le> r2}"
 | 
| 68607 
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
 immler parents: 
68532diff
changeset | 2810 | by (auto simp: path_connected_annulus [OF assms] path_connected_imp_connected) | 
| 67962 | 2811 | |
| 2812 | ||
| 70136 | 2813 | subsection\<^marker>\<open>tag unimportant\<close>\<open>Relations between components and path components\<close> | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2814 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2815 | lemma open_connected_component: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2816 | fixes S :: "'a::real_normed_vector set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2817 | assumes "open S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2818 | shows "open (connected_component_set S x)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2819 | proof (clarsimp simp: open_contains_ball) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2820 | fix y | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2821 | assume xy: "connected_component S x y" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2822 | then obtain e where "e>0" "ball y e \<subseteq> S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2823 | using assms connected_component_in openE by blast | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2824 | then show "\<exists>e>0. ball y e \<subseteq> connected_component_set S x" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2825 | by (metis xy centre_in_ball connected_ball connected_component_eq_eq connected_component_in connected_component_maximal) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2826 | qed | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2827 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2828 | corollary open_components: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2829 | fixes S :: "'a::real_normed_vector set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2830 | shows "\<lbrakk>open u; S \<in> components u\<rbrakk> \<Longrightarrow> open S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2831 | by (simp add: components_iff) (metis open_connected_component) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2832 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2833 | lemma in_closure_connected_component: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2834 | fixes S :: "'a::real_normed_vector set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2835 | assumes x: "x \<in> S" and S: "open S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2836 | shows "x \<in> closure (connected_component_set S y) \<longleftrightarrow> x \<in> connected_component_set S y" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2837 | proof - | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2838 | have "x islimpt connected_component_set S y \<Longrightarrow> connected_component S y x" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2839 | by (metis (no_types, lifting) S connected_component_eq connected_component_refl islimptE mem_Collect_eq open_connected_component x) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2840 | then show ?thesis | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2841 | by (auto simp: closure_def) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2842 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2843 | |
| 63114 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2844 | lemma connected_disjoint_Union_open_pick: | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2845 | assumes "pairwise disjnt B" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2846 |           "\<And>S. S \<in> A \<Longrightarrow> connected S \<and> S \<noteq> {}"
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2847 | "\<And>S. S \<in> B \<Longrightarrow> open S" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2848 | "\<Union>A \<subseteq> \<Union>B" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2849 | "S \<in> A" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2850 |   obtains T where "T \<in> B" "S \<subseteq> T" "S \<inter> \<Union>(B - {T}) = {}"
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2851 | proof - | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2852 |   have "S \<subseteq> \<Union>B" "connected S" "S \<noteq> {}"
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2853 | using assms \<open>S \<in> A\<close> by blast+ | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2854 |   then obtain T where "T \<in> B" "S \<inter> T \<noteq> {}"
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2855 | by (metis Sup_inf_eq_bot_iff inf.absorb_iff2 inf_commute) | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2856 | have 1: "open T" by (simp add: \<open>T \<in> B\<close> assms) | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2857 |   have 2: "open (\<Union>(B-{T}))" using assms by blast
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2858 |   have 3: "S \<subseteq> T \<union> \<Union>(B - {T})" using \<open>S \<subseteq> \<Union>B\<close> by blast
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2859 |   have "T \<inter> \<Union>(B - {T}) = {}" using \<open>T \<in> B\<close> \<open>pairwise disjnt B\<close>
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2860 | by (auto simp: pairwise_def disjnt_def) | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2861 |   then have 4: "T \<inter> \<Union>(B - {T}) \<inter> S = {}" by auto
 | 
| 71244 | 2862 | from connectedD [OF \<open>connected S\<close> 1 2 4 3] | 
| 63114 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2863 |   have "S \<inter> \<Union>(B-{T}) = {}"
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2864 |     by (auto simp: Int_commute \<open>S \<inter> T \<noteq> {}\<close>)
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2865 | with \<open>T \<in> B\<close> 3 that show ?thesis | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2866 | by (metis IntI UnE empty_iff subsetD subsetI) | 
| 63114 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2867 | qed | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2868 | |
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2869 | lemma connected_disjoint_Union_open_subset: | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2870 | assumes A: "pairwise disjnt A" and B: "pairwise disjnt B" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2871 |       and SA: "\<And>S. S \<in> A \<Longrightarrow> open S \<and> connected S \<and> S \<noteq> {}"
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2872 |       and SB: "\<And>S. S \<in> B \<Longrightarrow> open S \<and> connected S \<and> S \<noteq> {}"
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2873 | and eq [simp]: "\<Union>A = \<Union>B" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2874 | shows "A \<subseteq> B" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2875 | proof | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2876 | fix S | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2877 | assume "S \<in> A" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2878 |   obtain T where "T \<in> B" "S \<subseteq> T" "S \<inter> \<Union>(B - {T}) = {}"
 | 
| 72256 | 2879 | using SA SB \<open>S \<in> A\<close> connected_disjoint_Union_open_pick [OF B, of A] eq order_refl by blast | 
| 63114 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2880 |   moreover obtain S' where "S' \<in> A" "T \<subseteq> S'" "T \<inter> \<Union>(A - {S'}) = {}"
 | 
| 72256 | 2881 | using SA SB \<open>T \<in> B\<close> connected_disjoint_Union_open_pick [OF A, of B] eq order_refl by blast | 
| 63114 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2882 | ultimately have "S' = S" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2883 | by (metis A Int_subset_iff SA \<open>S \<in> A\<close> disjnt_def inf.orderE pairwise_def) | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2884 | with \<open>T \<subseteq> S'\<close> have "T \<subseteq> S" by simp | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2885 | with \<open>S \<subseteq> T\<close> have "S = T" by blast | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2886 | with \<open>T \<in> B\<close> show "S \<in> B" by simp | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2887 | qed | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2888 | |
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2889 | lemma connected_disjoint_Union_open_unique: | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2890 | assumes A: "pairwise disjnt A" and B: "pairwise disjnt B" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2891 |       and SA: "\<And>S. S \<in> A \<Longrightarrow> open S \<and> connected S \<and> S \<noteq> {}"
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2892 |       and SB: "\<And>S. S \<in> B \<Longrightarrow> open S \<and> connected S \<and> S \<noteq> {}"
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2893 | and eq [simp]: "\<Union>A = \<Union>B" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2894 | shows "A = B" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2895 | by (metis subset_antisym connected_disjoint_Union_open_subset assms) | 
| 63114 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2896 | |
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2897 | proposition components_open_unique: | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2898 | fixes S :: "'a::real_normed_vector set" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2899 | assumes "pairwise disjnt A" "\<Union>A = S" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2900 |           "\<And>X. X \<in> A \<Longrightarrow> open X \<and> connected X \<and> X \<noteq> {}"
 | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2901 | shows "components S = A" | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2902 | proof - | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2903 | have "open S" using assms by blast | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2904 | show ?thesis | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2905 | proof (rule connected_disjoint_Union_open_unique) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2906 | show "disjoint (components S)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2907 | by (simp add: components_eq disjnt_def pairwise_def) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2908 | qed (use \<open>open S\<close> in \<open>simp_all add: assms open_components in_components_connected in_components_nonempty\<close>) | 
| 63114 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2909 | qed | 
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2910 | |
| 
27afe7af7379
Lots of new material for multivariate analysis
 paulson <lp15@cam.ac.uk> parents: 
63092diff
changeset | 2911 | |
| 70136 | 2912 | subsection\<^marker>\<open>tag unimportant\<close>\<open>Existence of unbounded components\<close> | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2913 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2914 | lemma cobounded_unbounded_component: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2915 | fixes S :: "'a :: euclidean_space set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2916 | assumes "bounded (-S)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2917 | shows "\<exists>x. x \<in> S \<and> \<not> bounded (connected_component_set S x)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2918 | proof - | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2919 | obtain i::'a where i: "i \<in> Basis" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2920 | using nonempty_Basis by blast | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2921 | obtain B where B: "B>0" "-S \<subseteq> ball 0 B" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2922 | using bounded_subset_ballD [OF assms, of 0] by auto | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2923 | then have *: "\<And>x. B \<le> norm x \<Longrightarrow> x \<in> S" | 
| 68096 | 2924 | by (force simp: ball_def dist_norm) | 
| 69508 | 2925 |   have unbounded_inner: "\<not> bounded {x. inner i x \<ge> B}"
 | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2926 | proof (clarsimp simp: bounded_def dist_norm) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2927 | fix e x | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2928 | show "\<exists>y. B \<le> i \<bullet> y \<and> \<not> norm (x - y) \<le> e" | 
| 72256 | 2929 | using i | 
| 2930 | by (rule_tac x="x + (max B e + 1 + \<bar>i \<bullet> x\<bar>) *\<^sub>R i" in exI) (auto simp: inner_right_distrib) | |
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2931 | qed | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2932 | have \<section>: "\<And>x. B \<le> i \<bullet> x \<Longrightarrow> x \<in> S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2933 | using * Basis_le_norm [OF i] by (metis abs_ge_self inner_commute order_trans) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2934 |   have "{x. B \<le> i \<bullet> x} \<subseteq> connected_component_set S (B *\<^sub>R i)"
 | 
| 72256 | 2935 | by (intro connected_component_maximal) (auto simp: i intro: convex_connected convex_halfspace_ge [of B] \<section>) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2936 | then have "\<not> bounded (connected_component_set S (B *\<^sub>R i))" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2937 | using bounded_subset unbounded_inner by blast | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2938 | moreover have "B *\<^sub>R i \<in> S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2939 | by (rule *) (simp add: norm_Basis [OF i]) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2940 | ultimately show ?thesis | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2941 | by blast | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2942 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2943 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2944 | lemma cobounded_unique_unbounded_component: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2945 | fixes S :: "'a :: euclidean_space set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2946 |     assumes bs: "bounded (-S)" and "2 \<le> DIM('a)"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2947 | and bo: "\<not> bounded(connected_component_set S x)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2948 | "\<not> bounded(connected_component_set S y)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2949 | shows "connected_component_set S x = connected_component_set S y" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2950 | proof - | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2951 | obtain i::'a where i: "i \<in> Basis" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2952 | using nonempty_Basis by blast | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2953 | obtain B where "B>0" and B: "-S \<subseteq> ball 0 B" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2954 | using bounded_subset_ballD [OF bs, of 0] by auto | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2955 | then have *: "\<And>x. B \<le> norm x \<Longrightarrow> x \<in> S" | 
| 68096 | 2956 | by (force simp: ball_def dist_norm) | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2957 | obtain x' y' where x': "connected_component S x x'" "norm x' > B" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2958 | and y': "connected_component S y y'" "norm y' > B" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 2959 | using \<open>B>0\<close> bo bounded_pos by (metis linorder_not_le mem_Collect_eq) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2960 | have x'y': "connected_component S x' y'" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2961 | unfolding connected_component_def | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2962 | proof (intro exI conjI) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2963 | show "connected (- ball 0 B :: 'a set)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2964 | using assms by (auto intro: connected_complement_bounded_convex) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2965 | qed (use x' y' dist_norm * in auto) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2966 | show ?thesis | 
| 72256 | 2967 | using x' y' x'y' | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 2968 | by (metis connected_component_eq mem_Collect_eq) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2969 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2970 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2971 | lemma cobounded_unbounded_components: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2972 | fixes S :: "'a :: euclidean_space set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2973 | shows "bounded (-S) \<Longrightarrow> \<exists>c. c \<in> components S \<and> \<not>bounded c" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2974 | by (metis cobounded_unbounded_component components_def imageI) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2975 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2976 | lemma cobounded_unique_unbounded_components: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2977 | fixes S :: "'a :: euclidean_space set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 2978 |     shows  "\<lbrakk>bounded (- S); c \<in> components S; \<not> bounded c; c' \<in> components S; \<not> bounded c'; 2 \<le> DIM('a)\<rbrakk> \<Longrightarrow> c' = c"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2979 | unfolding components_iff | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2980 | by (metis cobounded_unique_unbounded_component) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2981 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2982 | lemma cobounded_has_bounded_component: | 
| 64122 | 2983 | fixes S :: "'a :: euclidean_space set" | 
| 2984 |   assumes "bounded (- S)" "\<not> connected S" "2 \<le> DIM('a)"
 | |
| 2985 | obtains C where "C \<in> components S" "bounded C" | |
| 2986 | by (meson cobounded_unique_unbounded_components connected_eq_connected_components_eq assms) | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2987 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2988 | |
| 69620 | 2989 | subsection\<open>The \<open>inside\<close> and \<open>outside\<close> of a Set\<close> | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2990 | |
| 70136 | 2991 | text\<^marker>\<open>tag important\<close>\<open>The inside comprises the points in a bounded connected component of the set's complement. | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2992 | The outside comprises the points in unbounded connected component of the complement.\<close> | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2993 | |
| 70136 | 2994 | definition\<^marker>\<open>tag important\<close> inside where | 
| 68096 | 2995 |   "inside S \<equiv> {x. (x \<notin> S) \<and> bounded(connected_component_set ( - S) x)}"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 2996 | |
| 70136 | 2997 | definition\<^marker>\<open>tag important\<close> outside where | 
| 69508 | 2998 |   "outside S \<equiv> -S \<inter> {x. \<not> bounded(connected_component_set (- S) x)}"
 | 
| 2999 | ||
| 3000 | lemma outside: "outside S = {x. \<not> bounded(connected_component_set (- S) x)}"
 | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3001 | by (auto simp: outside_def) (metis Compl_iff bounded_empty connected_component_eq_empty) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3002 | |
| 68096 | 3003 | lemma inside_no_overlap [simp]: "inside S \<inter> S = {}"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3004 | by (auto simp: inside_def) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3005 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3006 | lemma outside_no_overlap [simp]: | 
| 68096 | 3007 |    "outside S \<inter> S = {}"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3008 | by (auto simp: outside_def) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3009 | |
| 68096 | 3010 | lemma inside_Int_outside [simp]: "inside S \<inter> outside S = {}"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3011 | by (auto simp: inside_def outside_def) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3012 | |
| 68096 | 3013 | lemma inside_Un_outside [simp]: "inside S \<union> outside S = (- S)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3014 | by (auto simp: inside_def outside_def) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3015 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3016 | lemma inside_eq_outside: | 
| 68096 | 3017 | "inside S = outside S \<longleftrightarrow> S = UNIV" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3018 | by (auto simp: inside_def outside_def) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3019 | |
| 68096 | 3020 | lemma inside_outside: "inside S = (- (S \<union> outside S))" | 
| 3021 | by (force simp: inside_def outside) | |
| 3022 | ||
| 3023 | lemma outside_inside: "outside S = (- (S \<union> inside S))" | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3024 | by (auto simp: inside_outside) (metis IntI equals0D outside_no_overlap) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3025 | |
| 68096 | 3026 | lemma union_with_inside: "S \<union> inside S = - outside S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3027 | by (auto simp: inside_outside) (simp add: outside_inside) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3028 | |
| 68096 | 3029 | lemma union_with_outside: "S \<union> outside S = - inside S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3030 | by (simp add: inside_outside) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3031 | |
| 68096 | 3032 | lemma outside_mono: "S \<subseteq> T \<Longrightarrow> outside T \<subseteq> outside S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3033 | by (auto simp: outside bounded_subset connected_component_mono) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3034 | |
| 68096 | 3035 | lemma inside_mono: "S \<subseteq> T \<Longrightarrow> inside S - T \<subseteq> inside T" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3036 | by (auto simp: inside_def bounded_subset connected_component_mono) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3037 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3038 | lemma segment_bound_lemma: | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3039 | fixes u::real | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3040 | assumes "x \<ge> B" "y \<ge> B" "0 \<le> u" "u \<le> 1" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3041 | shows "(1 - u) * x + u * y \<ge> B" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3042 | by (smt (verit) assms convex_bound_le ge_iff_diff_ge_0 minus_add_distrib | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3043 | mult_minus_right neg_le_iff_le) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3044 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3045 | lemma cobounded_outside: | 
| 68096 | 3046 | fixes S :: "'a :: real_normed_vector set" | 
| 3047 | assumes "bounded S" shows "bounded (- outside S)" | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3048 | proof - | 
| 68096 | 3049 | obtain B where B: "B>0" "S \<subseteq> ball 0 B" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3050 | using bounded_subset_ballD [OF assms, of 0] by auto | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3051 |   { fix x::'a and C::real
 | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3052 | assume Bno: "B \<le> norm x" and C: "0 < C" | 
| 68096 | 3053 | have "\<exists>y. connected_component (- S) x y \<and> norm y > C" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3054 | proof (cases "x = 0") | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3055 | case True with B Bno show ?thesis by force | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3056 | next | 
| 68096 | 3057 | case False | 
| 3058 | have "closed_segment x (((B + C) / norm x) *\<^sub>R x) \<subseteq> - ball 0 B" | |
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3059 | proof | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3060 | fix w | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3061 | assume "w \<in> closed_segment x (((B + C) / norm x) *\<^sub>R x)" | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3062 | then obtain u where | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3063 | w: "w = (1 - u + u * (B + C) / norm x) *\<^sub>R x" "0 \<le> u" "u \<le> 1" | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3064 | by (auto simp add: closed_segment_def real_vector_class.scaleR_add_left [symmetric]) | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3065 | with False B C have "B \<le> (1 - u) * norm x + u * (B + C)" | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3066 | using segment_bound_lemma [of B "norm x" "B + C" u] Bno | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3067 | by simp | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3068 | with False B C show "w \<in> - ball 0 B" | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3069 | using distrib_right [of _ _ "norm x"] | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3070 | by (simp add: ball_def w not_less) | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3071 | qed | 
| 68096 | 3072 | also have "... \<subseteq> -S" | 
| 3073 | by (simp add: B) | |
| 3074 | finally have "\<exists>T. connected T \<and> T \<subseteq> - S \<and> x \<in> T \<and> ((B + C) / norm x) *\<^sub>R x \<in> T" | |
| 3075 | by (rule_tac x="closed_segment x (((B+C)/norm x) *\<^sub>R x)" in exI) simp | |
| 3076 | with False B | |
| 3077 | show ?thesis | |
| 3078 | by (rule_tac x="((B+C)/norm x) *\<^sub>R x" in exI) (simp add: connected_component_def) | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3079 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3080 | } | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3081 | then show ?thesis | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3082 | apply (simp add: outside_def assms) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3083 | apply (rule bounded_subset [OF bounded_ball [of 0 B]]) | 
| 68096 | 3084 | apply (force simp: dist_norm not_less bounded_pos) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3085 | done | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3086 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3087 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3088 | lemma unbounded_outside: | 
| 68096 | 3089 |     fixes S :: "'a::{real_normed_vector, perfect_space} set"
 | 
| 69508 | 3090 | shows "bounded S \<Longrightarrow> \<not> bounded(outside S)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3091 | using cobounded_imp_unbounded cobounded_outside by blast | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3092 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3093 | lemma bounded_inside: | 
| 68096 | 3094 |     fixes S :: "'a::{real_normed_vector, perfect_space} set"
 | 
| 3095 | shows "bounded S \<Longrightarrow> bounded(inside S)" | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3096 | by (simp add: bounded_Int cobounded_outside inside_outside) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3097 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3098 | lemma connected_outside: | 
| 68096 | 3099 | fixes S :: "'a::euclidean_space set" | 
| 3100 |     assumes "bounded S" "2 \<le> DIM('a)"
 | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3101 | shows "connected(outside S)" | 
| 68096 | 3102 | apply (clarsimp simp add: connected_iff_connected_component outside) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3103 | apply (rule_tac S="connected_component_set (- S) x" in connected_component_of_subset) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3104 | apply (metis (no_types) assms cobounded_unbounded_component cobounded_unique_unbounded_component connected_component_eq_eq connected_component_idemp double_complement mem_Collect_eq) | 
| 72256 | 3105 | by (simp add: Collect_mono connected_component_eq) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3106 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3107 | lemma outside_connected_component_lt: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3108 |   "outside S = {x. \<forall>B. \<exists>y. B < norm(y) \<and> connected_component (- S) x y}"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3109 | proof - | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3110 | have "\<And>x B. x \<in> outside S \<Longrightarrow> \<exists>y. B < norm y \<and> connected_component (- S) x y" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3111 | by (metis boundedI linorder_not_less mem_Collect_eq outside) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3112 | moreover | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3113 | have "\<And>x. \<forall>B. \<exists>y. B < norm y \<and> connected_component (- S) x y \<Longrightarrow> x \<in> outside S" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3114 | by (metis bounded_pos linorder_not_less mem_Collect_eq outside) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3115 | ultimately show ?thesis by auto | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3116 | qed | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3117 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3118 | lemma outside_connected_component_le: | 
| 72256 | 3119 |   "outside S = {x. \<forall>B. \<exists>y. B \<le> norm(y) \<and> connected_component (- S) x y}"
 | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3120 | apply (simp add: outside_connected_component_lt Set.set_eq_iff) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3121 | by (meson gt_ex leD le_less_linear less_imp_le order.trans) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3122 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3123 | lemma not_outside_connected_component_lt: | 
| 68096 | 3124 | fixes S :: "'a::euclidean_space set" | 
| 3125 |     assumes S: "bounded S" and "2 \<le> DIM('a)"
 | |
| 69508 | 3126 |       shows "- (outside S) = {x. \<forall>B. \<exists>y. B < norm(y) \<and> \<not> connected_component (- S) x y}"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3127 | proof - | 
| 68096 | 3128 | obtain B::real where B: "0 < B" and Bno: "\<And>x. x \<in> S \<Longrightarrow> norm x \<le> B" | 
| 3129 | using S [simplified bounded_pos] by auto | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3130 | have cyz: "connected_component (- S) y z" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3131 | if yz: "B < norm z" "B < norm y" for y::'a and z::'a | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3132 | proof - | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3133 | have "connected_component (- cball 0 B) y z" | 
| 72256 | 3134 | using assms yz | 
| 3135 | by (force simp: dist_norm intro: connected_componentI [OF _ subset_refl] connected_complement_bounded_convex) | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3136 | then show ?thesis | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3137 | by (metis connected_component_of_subset Bno Compl_anti_mono mem_cball_0 subset_iff) | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3138 | qed | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3139 | show ?thesis | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3140 | apply (auto simp: outside bounded_pos) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3141 | apply (metis Compl_iff bounded_iff cobounded_imp_unbounded mem_Collect_eq not_le) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3142 | by (metis B connected_component_trans cyz not_le) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3143 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3144 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3145 | lemma not_outside_connected_component_le: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3146 | fixes S :: "'a::euclidean_space set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3147 |   assumes S: "bounded S"  "2 \<le> DIM('a)"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3148 |   shows "- (outside S) = {x. \<forall>B. \<exists>y. B \<le> norm(y) \<and> \<not> connected_component (- S) x y}"
 | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3149 | unfolding not_outside_connected_component_lt [OF assms] | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3150 | by (metis (no_types, opaque_lifting) dual_order.strict_trans1 gt_ex pinf(8)) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3151 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3152 | lemma inside_connected_component_lt: | 
| 68096 | 3153 | fixes S :: "'a::euclidean_space set" | 
| 3154 |     assumes S: "bounded S"  "2 \<le> DIM('a)"
 | |
| 69508 | 3155 |       shows "inside S = {x. (x \<notin> S) \<and> (\<forall>B. \<exists>y. B < norm(y) \<and> \<not> connected_component (- S) x y)}"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3156 | by (auto simp: inside_outside not_outside_connected_component_lt [OF assms]) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3157 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3158 | lemma inside_connected_component_le: | 
| 68096 | 3159 | fixes S :: "'a::euclidean_space set" | 
| 3160 |     assumes S: "bounded S"  "2 \<le> DIM('a)"
 | |
| 69508 | 3161 |       shows "inside S = {x. (x \<notin> S) \<and> (\<forall>B. \<exists>y. B \<le> norm(y) \<and> \<not> connected_component (- S) x y)}"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3162 | by (auto simp: inside_outside not_outside_connected_component_le [OF assms]) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3163 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3164 | lemma inside_subset: | 
| 69508 | 3165 | assumes "connected U" and "\<not> bounded U" and "T \<union> U = - S" | 
| 68096 | 3166 | shows "inside S \<subseteq> T" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3167 | using bounded_subset [of "connected_component_set (- S) _" U] assms | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3168 | by (metis (no_types, lifting) ComplI Un_iff connected_component_maximal inside_def mem_Collect_eq subsetI) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3169 | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3170 | lemma frontier_not_empty: | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3171 | fixes S :: "'a :: real_normed_vector set" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3172 |   shows "\<lbrakk>S \<noteq> {}; S \<noteq> UNIV\<rbrakk> \<Longrightarrow> frontier S \<noteq> {}"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3173 | using connected_Int_frontier [of UNIV S] by auto | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3174 | |
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3175 | lemma frontier_eq_empty: | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3176 | fixes S :: "'a :: real_normed_vector set" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3177 |   shows "frontier S = {} \<longleftrightarrow> S = {} \<or> S = UNIV"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3178 | using frontier_UNIV frontier_empty frontier_not_empty by blast | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3179 | |
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3180 | lemma frontier_of_connected_component_subset: | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3181 | fixes S :: "'a::real_normed_vector set" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3182 | shows "frontier(connected_component_set S x) \<subseteq> frontier S" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3183 | proof - | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3184 |   { fix y
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3185 | assume y1: "y \<in> closure (connected_component_set S x)" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3186 | and y2: "y \<notin> interior (connected_component_set S x)" | 
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3187 | have "y \<in> closure S" | 
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3188 | using y1 closure_mono connected_component_subset by blast | 
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3189 | moreover have "z \<in> interior (connected_component_set S x)" | 
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3190 | if "0 < e" "ball y e \<subseteq> interior S" "dist y z < e" for e z | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3191 | proof - | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3192 | have "ball y e \<subseteq> connected_component_set S y" | 
| 72256 | 3193 | using connected_component_maximal that interior_subset | 
| 3194 | by (metis centre_in_ball connected_ball subset_trans) | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3195 | then show ?thesis | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3196 | using y1 apply (simp add: closure_approachable open_contains_ball_eq [OF open_interior]) | 
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3197 | by (metis connected_component_eq dist_commute mem_Collect_eq mem_ball mem_interior subsetD \<open>0 < e\<close> y2) | 
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3198 | qed | 
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3199 | then have "y \<notin> interior S" | 
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3200 | using y2 by (force simp: open_contains_ball_eq [OF open_interior]) | 
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3201 | ultimately have "y \<in> frontier S" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3202 | by (auto simp: frontier_def) | 
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3203 | } | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3204 | then show ?thesis by (auto simp: frontier_def) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3205 | qed | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62087diff
changeset | 3206 | |
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3207 | lemma frontier_Union_subset_closure: | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3208 | fixes F :: "'a::real_normed_vector set set" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3209 | shows "frontier(\<Union>F) \<subseteq> closure(\<Union>t \<in> F. frontier t)" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3210 | proof - | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3211 | have "\<exists>y\<in>F. \<exists>y\<in>frontier y. dist y x < e" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3212 | if "T \<in> F" "y \<in> T" "dist y x < e" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3213 | "x \<notin> interior (\<Union>F)" "0 < e" for x y e T | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3214 | proof (cases "x \<in> T") | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3215 | case True with that show ?thesis | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3216 | by (metis Diff_iff Sup_upper closure_subset contra_subsetD dist_self frontier_def interior_mono) | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3217 | next | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3218 | case False | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3219 |     have \<section>: "closed_segment x y \<inter> T \<noteq> {}" "closed_segment x y - T \<noteq> {}"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3220 | using \<open>y \<in> T\<close> False by blast+ | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3221 | obtain c where "c \<in> closed_segment x y" "c \<in> frontier T" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3222 | using False connected_Int_frontier [OF connected_segment \<section>] by auto | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3223 | with that show ?thesis | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3224 | by (smt (verit) dist_norm segment_bound1) | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3225 | qed | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3226 | then show ?thesis | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3227 | by (fastforce simp add: frontier_def closure_approachable) | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3228 | qed | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3229 | |
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3230 | lemma frontier_Union_subset: | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3231 | fixes F :: "'a::real_normed_vector set set" | 
| 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3232 | shows "finite F \<Longrightarrow> frontier(\<Union>F) \<subseteq> (\<Union>t \<in> F. frontier t)" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3233 | by (metis closed_UN closure_closed frontier_Union_subset_closure frontier_closed) | 
| 62620 
d21dab28b3f9
New results about paths, segments, etc. The notion of simply_connected.
 paulson <lp15@cam.ac.uk> parents: 
62618diff
changeset | 3234 | |
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3235 | lemma frontier_of_components_subset: | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3236 | fixes S :: "'a::real_normed_vector set" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3237 | shows "C \<in> components S \<Longrightarrow> frontier C \<subseteq> frontier S" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3238 | by (metis Path_Connected.frontier_of_connected_component_subset components_iff) | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3239 | |
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3240 | lemma frontier_of_components_closed_complement: | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3241 | fixes S :: "'a::real_normed_vector set" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3242 | shows "\<lbrakk>closed S; C \<in> components (- S)\<rbrakk> \<Longrightarrow> frontier C \<subseteq> S" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3243 | using frontier_complement frontier_of_components_subset frontier_subset_eq by blast | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3244 | |
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3245 | lemma frontier_minimal_separating_closed: | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3246 | fixes S :: "'a::real_normed_vector set" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3247 | assumes "closed S" | 
| 69508 | 3248 | and nconn: "\<not> connected(- S)" | 
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3249 | and C: "C \<in> components (- S)" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3250 | and conn: "\<And>T. \<lbrakk>closed T; T \<subset> S\<rbrakk> \<Longrightarrow> connected(- T)" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3251 | shows "frontier C = S" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3252 | proof (rule ccontr) | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3253 | assume "frontier C \<noteq> S" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3254 | then have "frontier C \<subset> S" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3255 | using frontier_of_components_closed_complement [OF \<open>closed S\<close> C] by blast | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3256 | then have "connected(- (frontier C))" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3257 | by (simp add: conn) | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3258 | have "\<not> connected(- (frontier C))" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3259 | unfolding connected_def not_not | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3260 | proof (intro exI conjI) | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3261 | show "open C" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3262 | using C \<open>closed S\<close> open_components by blast | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3263 | show "open (- closure C)" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3264 | by blast | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3265 |     show "C \<inter> - closure C \<inter> - frontier C = {}"
 | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3266 | using closure_subset by blast | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3267 |     show "C \<inter> - frontier C \<noteq> {}"
 | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3268 | using C \<open>open C\<close> components_eq frontier_disjoint_eq by fastforce | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3269 | show "- frontier C \<subseteq> C \<union> - closure C" | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3270 | by (simp add: \<open>open C\<close> closed_Compl frontier_closures) | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3271 |     then show "- closure C \<inter> - frontier C \<noteq> {}"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3272 | by (metis C Compl_Diff_eq Un_Int_eq(4) Un_commute \<open>frontier C \<subset> S\<close> \<open>open C\<close> compl_le_compl_iff frontier_def in_components_subset interior_eq leD sup_bot.right_neutral) | 
| 64006 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3273 | qed | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3274 | then show False | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3275 | using \<open>connected (- frontier C)\<close> by blast | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3276 | qed | 
| 
0de4736dad8b
new theorems including the theory FurtherTopology
 paulson <lp15@cam.ac.uk> parents: 
63978diff
changeset | 3277 | |
| 62843 
313d3b697c9a
Mostly renaming (from HOL Light to Isabelle conventions), with a couple of new results
 paulson <lp15@cam.ac.uk> parents: 
62626diff
changeset | 3278 | lemma connected_component_UNIV [simp]: | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3279 | fixes x :: "'a::real_normed_vector" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3280 | shows "connected_component_set UNIV x = UNIV" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3281 | using connected_iff_eq_connected_component_set [of "UNIV::'a set"] connected_UNIV | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3282 | by auto | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3283 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3284 | lemma connected_component_eq_UNIV: | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3285 | fixes x :: "'a::real_normed_vector" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3286 | shows "connected_component_set s x = UNIV \<longleftrightarrow> s = UNIV" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3287 | using connected_component_in connected_component_UNIV by blast | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3288 | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3289 | lemma components_UNIV [simp]: "components UNIV = {UNIV :: 'a::real_normed_vector set}"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3290 | by (auto simp: components_eq_sing_iff) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3291 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3292 | lemma interior_inside_frontier: | 
| 72256 | 3293 | fixes S :: "'a::real_normed_vector set" | 
| 3294 | assumes "bounded S" | |
| 3295 | shows "interior S \<subseteq> inside (frontier S)" | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3296 | proof - | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3297 |   { fix x y
 | 
| 72256 | 3298 | assume x: "x \<in> interior S" and y: "y \<notin> S" | 
| 3299 | and cc: "connected_component (- frontier S) x y" | |
| 3300 |     have "connected_component_set (- frontier S) x \<inter> frontier S \<noteq> {}"
 | |
| 3301 | proof (rule connected_Int_frontier; simp add: set_eq_iff) | |
| 3302 | show "\<exists>u. connected_component (- frontier S) x u \<and> u \<in> S" | |
| 3303 | by (meson cc connected_component_in connected_component_refl_eq interior_subset subsetD x) | |
| 3304 | show "\<exists>u. connected_component (- frontier S) x u \<and> u \<notin> S" | |
| 3305 | using y cc by blast | |
| 3306 | qed | |
| 3307 | then have "bounded (connected_component_set (- frontier S) x)" | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3308 | using connected_component_in by auto | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3309 | } | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3310 | then show ?thesis | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3311 | using bounded_subset [OF assms] | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3312 | by (metis (no_types, lifting) Diff_iff frontier_def inside_def mem_Collect_eq subsetI) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3313 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3314 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3315 | lemma inside_empty [simp]: "inside {} = ({} :: 'a :: {real_normed_vector, perfect_space} set)"
 | 
| 71172 | 3316 | by (simp add: inside_def) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3317 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3318 | lemma outside_empty [simp]: "outside {} = (UNIV :: 'a :: {real_normed_vector, perfect_space} set)"
 | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3319 | using inside_empty inside_Un_outside by blast | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3320 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3321 | lemma inside_same_component: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3322 | "\<lbrakk>connected_component (- S) x y; x \<in> inside S\<rbrakk> \<Longrightarrow> y \<in> inside S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3323 | using connected_component_eq connected_component_in | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3324 | by (fastforce simp add: inside_def) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3325 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3326 | lemma outside_same_component: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3327 | "\<lbrakk>connected_component (- S) x y; x \<in> outside S\<rbrakk> \<Longrightarrow> y \<in> outside S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3328 | using connected_component_eq connected_component_in | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3329 | by (fastforce simp add: outside_def) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3330 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3331 | lemma convex_in_outside: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3332 |   fixes S :: "'a :: {real_normed_vector, perfect_space} set"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3333 | assumes S: "convex S" and z: "z \<notin> S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3334 | shows "z \<in> outside S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3335 | proof (cases "S={}")
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3336 | case True then show ?thesis by simp | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3337 | next | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3338 | case False then obtain a where "a \<in> S" by blast | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3339 | with z have zna: "z \<noteq> a" by auto | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3340 |   { assume "bounded (connected_component_set (- S) z)"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3341 | with bounded_pos_less obtain B where "B>0" and B: "\<And>x. connected_component (- S) z x \<Longrightarrow> norm x < B" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3342 | by (metis mem_Collect_eq) | 
| 63040 | 3343 | define C where "C = (B + 1 + norm z) / norm (z-a)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3344 | have "C > 0" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3345 | using \<open>0 < B\<close> zna by (simp add: C_def field_split_simps add_strict_increasing) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3346 | have "\<bar>norm (z + C *\<^sub>R (z-a)) - norm (C *\<^sub>R (z-a))\<bar> \<le> norm z" | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3347 | by (metis add_diff_cancel norm_triangle_ineq3) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3348 | moreover have "norm (C *\<^sub>R (z-a)) > norm z + B" | 
| 70802 
160eaf566bcb
formally augmented corresponding rules for field_simps
 haftmann parents: 
70196diff
changeset | 3349 | using zna \<open>B>0\<close> by (simp add: C_def le_max_iff_disj) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3350 | ultimately have C: "norm (z + C *\<^sub>R (z-a)) > B" by linarith | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3351 |     { fix u::real
 | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3352 | assume u: "0\<le>u" "u\<le>1" and ins: "(1 - u) *\<^sub>R z + u *\<^sub>R (z + C *\<^sub>R (z - a)) \<in> S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3353 | then have Cpos: "1 + u * C > 0" | 
| 61808 | 3354 | by (meson \<open>0 < C\<close> add_pos_nonneg less_eq_real_def zero_le_mult_iff zero_less_one) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3355 | then have *: "(1 / (1 + u * C)) *\<^sub>R z + (u * C / (1 + u * C)) *\<^sub>R z = z" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3356 | by (simp add: scaleR_add_left [symmetric] field_split_simps) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3357 | then have False | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3358 | using convexD_alt [OF S \<open>a \<in> S\<close> ins, of "1/(u*C + 1)"] \<open>C>0\<close> \<open>z \<notin> S\<close> Cpos u | 
| 71172 | 3359 | by (simp add: * field_split_simps) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3360 | } note contra = this | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3361 | have "connected_component (- S) z (z + C *\<^sub>R (z-a))" | 
| 72256 | 3362 | proof (rule connected_componentI [OF connected_segment]) | 
| 3363 | show "closed_segment z (z + C *\<^sub>R (z - a)) \<subseteq> - S" | |
| 3364 | using contra by (force simp add: closed_segment_def) | |
| 3365 | qed auto | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3366 | then have False | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3367 | using zna B [of "z + C *\<^sub>R (z-a)"] C | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70802diff
changeset | 3368 | by (auto simp: field_split_simps max_mult_distrib_right) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3369 | } | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3370 | then show ?thesis | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3371 | by (auto simp: outside_def z) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3372 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3373 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3374 | lemma outside_convex: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3375 |   fixes S :: "'a :: {real_normed_vector, perfect_space} set"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3376 | assumes "convex S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3377 | shows "outside S = - S" | 
| 63955 | 3378 | by (metis ComplD assms convex_in_outside equalityI inside_Un_outside subsetI sup.cobounded2) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3379 | |
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 3380 | lemma outside_singleton [simp]: | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 3381 |   fixes x :: "'a :: {real_normed_vector, perfect_space}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 3382 |   shows "outside {x} = -{x}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 3383 | by (auto simp: outside_convex) | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 3384 | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3385 | lemma inside_convex: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3386 |   fixes S :: "'a :: {real_normed_vector, perfect_space} set"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3387 |   shows "convex S \<Longrightarrow> inside S = {}"
 | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3388 | by (simp add: inside_outside outside_convex) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3389 | |
| 66793 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 3390 | lemma inside_singleton [simp]: | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 3391 |   fixes x :: "'a :: {real_normed_vector, perfect_space}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 3392 |   shows "inside {x} = {}"
 | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 3393 | by (auto simp: inside_convex) | 
| 
deabce3ccf1f
new material about connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
66456diff
changeset | 3394 | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3395 | lemma outside_subset_convex: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3396 |   fixes S :: "'a :: {real_normed_vector, perfect_space} set"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3397 | shows "\<lbrakk>convex T; S \<subseteq> T\<rbrakk> \<Longrightarrow> - T \<subseteq> outside S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3398 | using outside_convex outside_mono by blast | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3399 | |
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3400 | lemma outside_Un_outside_Un: | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3401 | fixes S :: "'a::real_normed_vector set" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3402 |   assumes "S \<inter> outside(T \<union> U) = {}"
 | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3403 | shows "outside(T \<union> U) \<subseteq> outside(T \<union> S)" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3404 | proof | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3405 | fix x | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3406 | assume x: "x \<in> outside (T \<union> U)" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3407 | have "Y \<subseteq> - S" if "connected Y" "Y \<subseteq> - T" "Y \<subseteq> - U" "x \<in> Y" "u \<in> Y" for u Y | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3408 | proof - | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3409 | have "Y \<subseteq> connected_component_set (- (T \<union> U)) x" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3410 | by (simp add: connected_component_maximal that) | 
| 68096 | 3411 | also have "\<dots> \<subseteq> outside(T \<union> U)" | 
| 64788 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3412 | by (metis (mono_tags, lifting) Collect_mono mem_Collect_eq outside outside_same_component x) | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3413 | finally have "Y \<subseteq> outside(T \<union> U)" . | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3414 | with assms show ?thesis by auto | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3415 | qed | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3416 | with x show "x \<in> outside (T \<union> S)" | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3417 | by (simp add: outside_connected_component_lt connected_component_def) meson | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3418 | qed | 
| 
19f3d4af7a7d
New material about path connectedness, etc.
 paulson <lp15@cam.ac.uk> parents: 
64394diff
changeset | 3419 | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3420 | lemma outside_frontier_misses_closure: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3421 | fixes S :: "'a::real_normed_vector set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3422 | assumes "bounded S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3423 | shows "outside(frontier S) \<subseteq> - closure S" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3424 | using assms frontier_def interior_inside_frontier outside_inside by fastforce | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3425 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3426 | lemma outside_frontier_eq_complement_closure: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3427 |   fixes S :: "'a :: {real_normed_vector, perfect_space} set"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3428 | assumes "bounded S" "convex S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3429 | shows "outside(frontier S) = - closure S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3430 | by (metis Diff_subset assms convex_closure frontier_def outside_frontier_misses_closure | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3431 | outside_subset_convex subset_antisym) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3432 | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3433 | lemma inside_frontier_eq_interior: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3434 |      fixes S :: "'a :: {real_normed_vector, perfect_space} set"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3435 | shows "\<lbrakk>bounded S; convex S\<rbrakk> \<Longrightarrow> inside(frontier S) = interior S" | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3436 | unfolding inside_outside outside_frontier_eq_complement_closure | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3437 | using closure_subset interior_subset by (auto simp: frontier_def) | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3438 | |
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3439 | lemma open_inside: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3440 | fixes S :: "'a::real_normed_vector set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3441 | assumes "closed S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3442 | shows "open (inside S)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3443 | proof - | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3444 |   { fix x assume x: "x \<in> inside S"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3445 | have "open (connected_component_set (- S) x)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3446 | using assms open_connected_component by blast | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3447 | then obtain e where e: "e>0" and e: "\<And>y. dist y x < e \<longrightarrow> connected_component (- S) x y" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3448 | using dist_not_less_zero | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3449 | apply (simp add: open_dist) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3450 | by (metis (no_types, lifting) Compl_iff connected_component_refl_eq inside_def mem_Collect_eq x) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3451 | then have "\<exists>e>0. ball x e \<subseteq> inside S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3452 | by (metis e dist_commute inside_same_component mem_ball subsetI x) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3453 | } | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3454 | then show ?thesis | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3455 | by (simp add: open_contains_ball) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3456 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3457 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3458 | lemma open_outside: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3459 | fixes S :: "'a::real_normed_vector set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3460 | assumes "closed S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3461 | shows "open (outside S)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3462 | proof - | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3463 |   { fix x assume x: "x \<in> outside S"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3464 | have "open (connected_component_set (- S) x)" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3465 | using assms open_connected_component by blast | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3466 | then obtain e where e: "e>0" and e: "\<And>y. dist y x < e \<longrightarrow> connected_component (- S) x y" | 
| 72256 | 3467 | using dist_not_less_zero x | 
| 3468 | by (auto simp add: open_dist outside_def intro: connected_component_refl) | |
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3469 | then have "\<exists>e>0. ball x e \<subseteq> outside S" | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3470 | by (metis e dist_commute outside_same_component mem_ball subsetI x) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3471 | } | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3472 | then show ?thesis | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3473 | by (simp add: open_contains_ball) | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3474 | qed | 
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3475 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3476 | lemma closure_inside_subset: | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3477 | fixes S :: "'a::real_normed_vector set" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3478 | assumes "closed S" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3479 | shows "closure(inside S) \<subseteq> S \<union> inside S" | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3480 | by (metis assms closure_minimal open_closed open_outside sup.cobounded2 union_with_inside) | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3481 | |
| 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3482 | lemma frontier_inside_subset: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3483 | fixes S :: "'a::real_normed_vector set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3484 | assumes "closed S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3485 | shows "frontier(inside S) \<subseteq> S" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3486 | using assms closure_inside_subset frontier_closures frontier_disjoint_eq open_inside by fastforce | 
| 61426 
d53db136e8fd
new material on path_component_sets, inside, outside, etc. And more default simprules
 paulson <lp15@cam.ac.uk> parents: 
61204diff
changeset | 3487 | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3488 | lemma closure_outside_subset: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3489 | fixes S :: "'a::real_normed_vector set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3490 | assumes "closed S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3491 | shows "closure(outside S) \<subseteq> S \<union> outside S" | 
| 72256 | 3492 | by (metis assms closed_open closure_minimal inside_outside open_inside sup_ge2) | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3493 | |
| 77221 
0cdb384bf56a
More new theorems from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
76874diff
changeset | 3494 | lemma closed_path_image_Un_inside: | 
| 
0cdb384bf56a
More new theorems from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
76874diff
changeset | 3495 | fixes g :: "real \<Rightarrow> 'a :: real_normed_vector" | 
| 
0cdb384bf56a
More new theorems from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
76874diff
changeset | 3496 | assumes "path g" | 
| 
0cdb384bf56a
More new theorems from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
76874diff
changeset | 3497 | shows "closed (path_image g \<union> inside (path_image g))" | 
| 
0cdb384bf56a
More new theorems from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
76874diff
changeset | 3498 | by (simp add: assms closed_Compl closed_path_image open_outside union_with_inside) | 
| 
0cdb384bf56a
More new theorems from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
76874diff
changeset | 3499 | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3500 | lemma frontier_outside_subset: | 
| 72256 | 3501 | fixes S :: "'a::real_normed_vector set" | 
| 3502 | assumes "closed S" | |
| 3503 | shows "frontier(outside S) \<subseteq> S" | |
| 3504 | unfolding frontier_def | |
| 3505 | by (metis Diff_subset_conv assms closure_outside_subset interior_eq open_outside sup_aci(1)) | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3506 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3507 | lemma inside_complement_unbounded_connected_empty: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3508 |      "\<lbrakk>connected (- S); \<not> bounded (- S)\<rbrakk> \<Longrightarrow> inside S = {}"
 | 
| 72256 | 3509 | using inside_subset by blast | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3510 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3511 | lemma inside_bounded_complement_connected_empty: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3512 |     fixes S :: "'a::{real_normed_vector, perfect_space} set"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3513 |     shows "\<lbrakk>connected (- S); bounded S\<rbrakk> \<Longrightarrow> inside S = {}"
 | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3514 | by (metis inside_complement_unbounded_connected_empty cobounded_imp_unbounded) | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3515 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3516 | lemma inside_inside: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3517 | assumes "S \<subseteq> inside T" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3518 | shows "inside S - T \<subseteq> inside T" | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3519 | unfolding inside_def | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3520 | proof clarify | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3521 | fix x | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3522 | assume x: "x \<notin> T" "x \<notin> S" and bo: "bounded (connected_component_set (- S) x)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3523 | show "bounded (connected_component_set (- T) x)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3524 |   proof (cases "S \<inter> connected_component_set (- T) x = {}")
 | 
| 72256 | 3525 | case True then show ?thesis | 
| 3526 | by (metis bounded_subset [OF bo] compl_le_compl_iff connected_component_idemp connected_component_mono disjoint_eq_subset_Compl double_compl) | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3527 | next | 
| 72256 | 3528 | case False | 
| 3529 | then obtain y where y: "y \<in> S" "y \<in> connected_component_set (- T) x" | |
| 3530 | by (meson disjoint_iff) | |
| 3531 | then have "bounded (connected_component_set (- T) y)" | |
| 3532 | using assms [unfolded inside_def] by blast | |
| 3533 | with y show ?thesis | |
| 3534 | by (metis connected_component_eq) | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3535 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3536 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3537 | |
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3538 | lemma inside_inside_subset: "inside(inside S) \<subseteq> S" | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3539 | using inside_inside union_with_outside by fastforce | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3540 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3541 | lemma inside_outside_intersect_connected: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3542 |       "\<lbrakk>connected T; inside S \<inter> T \<noteq> {}; outside S \<inter> T \<noteq> {}\<rbrakk> \<Longrightarrow> S \<inter> T \<noteq> {}"
 | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3543 | apply (simp add: inside_def outside_def ex_in_conv [symmetric] disjoint_eq_subset_Compl, clarify) | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3544 | by (metis compl_le_swap1 connected_componentI connected_component_eq mem_Collect_eq) | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3545 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3546 | lemma outside_bounded_nonempty: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3547 |   fixes S :: "'a :: {real_normed_vector, perfect_space} set"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3548 |   assumes "bounded S" shows "outside S \<noteq> {}"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3549 | using assms unbounded_outside by force | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3550 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3551 | lemma outside_compact_in_open: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3552 |     fixes S :: "'a :: {real_normed_vector,perfect_space} set"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3553 |     assumes S: "compact S" and T: "open T" and "S \<subseteq> T" "T \<noteq> {}"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3554 |       shows "outside S \<inter> T \<noteq> {}"
 | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3555 | proof - | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3556 |   have "outside S \<noteq> {}"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3557 | by (simp add: compact_imp_bounded outside_bounded_nonempty S) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3558 | with assms obtain a b where a: "a \<in> outside S" and b: "b \<in> T" by auto | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3559 | show ?thesis | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3560 | proof (cases "a \<in> T") | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3561 | case True with a show ?thesis by blast | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3562 | next | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3563 | case False | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3564 | have front: "frontier T \<subseteq> - S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3565 | using \<open>S \<subseteq> T\<close> frontier_disjoint_eq T by auto | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3566 |       { fix \<gamma>
 | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3567 |         assume "path \<gamma>" and pimg_sbs: "path_image \<gamma> - {pathfinish \<gamma>} \<subseteq> interior (- T)"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3568 | and pf: "pathfinish \<gamma> \<in> frontier T" and ps: "pathstart \<gamma> = a" | 
| 63040 | 3569 | define c where "c = pathfinish \<gamma>" | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3570 | have "c \<in> -S" unfolding c_def using front pf by blast | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3571 | moreover have "open (-S)" using S compact_imp_closed by blast | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3572 | ultimately obtain \<epsilon>::real where "\<epsilon> > 0" and \<epsilon>: "cball c \<epsilon> \<subseteq> -S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3573 | using open_contains_cball[of "-S"] S by blast | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3574 | then obtain d where "d \<in> T" and d: "dist d c < \<epsilon>" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3575 | using closure_approachable [of c T] pf unfolding c_def | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3576 | by (metis Diff_iff frontier_def) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3577 | then have "d \<in> -S" using \<epsilon> | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3578 | using dist_commute by (metis contra_subsetD mem_cball not_le not_less_iff_gr_or_eq) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3579 | have pimg_sbs_cos: "path_image \<gamma> \<subseteq> -S" | 
| 72256 | 3580 | using \<open>c \<in> - S\<close> \<open>S \<subseteq> T\<close> c_def interior_subset pimg_sbs by fastforce | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3581 | have "closed_segment c d \<le> cball c \<epsilon>" | 
| 72256 | 3582 | by (metis \<open>0 < \<epsilon>\<close> centre_in_cball closed_segment_subset convex_cball d dist_commute less_eq_real_def mem_cball) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3583 | with \<epsilon> have "closed_segment c d \<subseteq> -S" by blast | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3584 | moreover have con_gcd: "connected (path_image \<gamma> \<union> closed_segment c d)" | 
| 61808 | 3585 | by (rule connected_Un) (auto simp: c_def \<open>path \<gamma>\<close> connected_path_image) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3586 | ultimately have "connected_component (- S) a d" | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3587 | unfolding connected_component_def using pimg_sbs_cos ps by blast | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3588 |         then have "outside S \<inter> T \<noteq> {}"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3589 | using outside_same_component [OF _ a] by (metis IntI \<open>d \<in> T\<close> empty_iff) | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3590 | } note * = this | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3591 | have pal: "pathstart (linepath a b) \<in> closure (- T)" | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3592 | by (auto simp: False closure_def) | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3593 | show ?thesis | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3594 | by (rule exists_path_subpath_to_frontier [OF path_linepath pal _ *]) (auto simp: b) | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3595 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3596 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3597 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3598 | lemma inside_inside_compact_connected: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3599 | fixes S :: "'a :: euclidean_space set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3600 | assumes S: "closed S" and T: "compact T" and "connected T" "S \<subseteq> inside T" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3601 | shows "inside S \<subseteq> inside T" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3602 | proof (cases "inside T = {}")
 | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3603 | case True with assms show ?thesis by auto | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3604 | next | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3605 | case False | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3606 |   consider "DIM('a) = 1" | "DIM('a) \<ge> 2"
 | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3607 | using antisym not_less_eq_eq by fastforce | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3608 | then show ?thesis | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3609 | proof cases | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3610 | case 1 then show ?thesis | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3611 | using connected_convex_1_gen assms False inside_convex by blast | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3612 | next | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3613 | case 2 | 
| 72256 | 3614 | have "bounded S" | 
| 3615 | using assms by (meson bounded_inside bounded_subset compact_imp_bounded) | |
| 3616 | then have coms: "compact S" | |
| 3617 | by (simp add: S compact_eq_bounded_closed) | |
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3618 | then have bst: "bounded (S \<union> T)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3619 | by (simp add: compact_imp_bounded T) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3620 | then obtain r where "0 < r" and r: "S \<union> T \<subseteq> ball 0 r" | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3621 | using bounded_subset_ballD by blast | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3622 |     have outst: "outside S \<inter> outside T \<noteq> {}"
 | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3623 | by (metis bounded_Un bounded_subset bst cobounded_outside disjoint_eq_subset_Compl unbounded_outside) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3624 |     have "S \<inter> T = {}" using assms
 | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3625 | by (metis disjoint_iff_not_equal inside_no_overlap subsetCE) | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3626 |     moreover have "outside S \<inter> inside T \<noteq> {}"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3627 | by (meson False assms(4) compact_eq_bounded_closed coms open_inside outside_compact_in_open T) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3628 |     ultimately have "inside S \<inter> T = {}"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3629 | using inside_outside_intersect_connected [OF \<open>connected T\<close>, of S] | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3630 | by (metis "2" compact_eq_bounded_closed coms connected_outside inf.commute inside_outside_intersect_connected outst) | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3631 | then show ?thesis | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3632 | using inside_inside [OF \<open>S \<subseteq> inside T\<close>] by blast | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3633 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3634 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3635 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3636 | lemma connected_with_inside: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3637 | fixes S :: "'a :: real_normed_vector set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3638 | assumes S: "closed S" and cons: "connected S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3639 | shows "connected(S \<union> inside S)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3640 | proof (cases "S \<union> inside S = UNIV") | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3641 | case True with assms show ?thesis by auto | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3642 | next | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3643 | case False | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3644 | then obtain b where b: "b \<notin> S" "b \<notin> inside S" by blast | 
| 72256 | 3645 | have *: "\<exists>y T. y \<in> S \<and> connected T \<and> a \<in> T \<and> y \<in> T \<and> T \<subseteq> (S \<union> inside S)" | 
| 3646 | if "a \<in> S \<union> inside S" for a | |
| 3647 | using that | |
| 3648 | proof | |
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3649 | assume "a \<in> S" then show ?thesis | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3650 | using cons by blast | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3651 | next | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3652 | assume a: "a \<in> inside S" | 
| 72256 | 3653 | then have ain: "a \<in> closure (inside S)" | 
| 3654 | by (simp add: closure_def) | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3655 | obtain h where h: "path h" "pathstart h = a" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3656 |                    "path_image h - {pathfinish h} \<subseteq> interior (inside S)"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3657 | "pathfinish h \<in> frontier (inside S)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3658 | using ain b | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3659 | by (metis exists_path_subpath_to_frontier path_linepath pathfinish_linepath pathstart_linepath) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3660 | moreover | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3661 | have h1S: "pathfinish h \<in> S" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3662 | using S h frontier_inside_subset by blast | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3663 | moreover | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3664 | have "path_image h \<subseteq> S \<union> inside S" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3665 | using IntD1 S h1S h interior_eq open_inside by fastforce | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3666 | ultimately show ?thesis by blast | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3667 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3668 | show ?thesis | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3669 | apply (simp add: connected_iff_connected_component) | 
| 72256 | 3670 | apply (clarsimp simp add: connected_component_def dest!: *) | 
| 3671 | subgoal for x y u u' T t' | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3672 | by (rule_tac x = "S \<union> T \<union> t'" in exI) (auto intro!: connected_Un cons) | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3673 | done | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3674 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3675 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3676 | text\<open>The proof is virtually the same as that above.\<close> | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3677 | lemma connected_with_outside: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3678 | fixes S :: "'a :: real_normed_vector set" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3679 | assumes S: "closed S" and cons: "connected S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3680 | shows "connected(S \<union> outside S)" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3681 | proof (cases "S \<union> outside S = UNIV") | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3682 | case True with assms show ?thesis by auto | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3683 | next | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3684 | case False | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3685 | then obtain b where b: "b \<notin> S" "b \<notin> outside S" by blast | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3686 | have *: "\<exists>y T. y \<in> S \<and> connected T \<and> a \<in> T \<and> y \<in> T \<and> T \<subseteq> (S \<union> outside S)" if "a \<in> (S \<union> outside S)" for a | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3687 | using that proof | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3688 | assume "a \<in> S" then show ?thesis | 
| 72256 | 3689 |       by (rule_tac x=a in exI, rule_tac x="{a}" in exI, simp)
 | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3690 | next | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3691 | assume a: "a \<in> outside S" | 
| 72256 | 3692 | then have ain: "a \<in> closure (outside S)" | 
| 3693 | by (simp add: closure_def) | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3694 | obtain h where h: "path h" "pathstart h = a" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3695 |                    "path_image h - {pathfinish h} \<subseteq> interior (outside S)"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3696 | "pathfinish h \<in> frontier (outside S)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3697 | using ain b | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3698 | by (metis exists_path_subpath_to_frontier path_linepath pathfinish_linepath pathstart_linepath) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3699 | moreover | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3700 | have h1S: "pathfinish h \<in> S" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3701 | using S frontier_outside_subset h(4) by blast | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3702 | moreover | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3703 | have "path_image h \<subseteq> S \<union> outside S" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3704 | using IntD1 S h1S h interior_eq open_outside by fastforce | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3705 | ultimately show ?thesis | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3706 | by blast | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3707 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3708 | show ?thesis | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3709 | apply (simp add: connected_iff_connected_component) | 
| 72256 | 3710 | apply (clarsimp simp add: connected_component_def dest!: *) | 
| 3711 | subgoal for x y u u' T t' | |
| 3712 | by (rule_tac x="(S \<union> T \<union> t')" in exI) (auto intro!: connected_Un cons) | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3713 | done | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3714 | qed | 
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3715 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3716 | lemma inside_inside_eq_empty [simp]: | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3717 |     fixes S :: "'a :: {real_normed_vector, perfect_space} set"
 | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3718 | assumes S: "closed S" and cons: "connected S" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3719 |     shows "inside (inside S) = {}"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3720 | proof - | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3721 | have "connected (- inside S)" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3722 | by (metis S connected_with_outside cons union_with_outside) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3723 | then show ?thesis | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3724 | by (metis bounded_Un inside_complement_unbounded_connected_empty unbounded_outside union_with_outside) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3725 | qed | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3726 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3727 | lemma inside_in_components: | 
| 72256 | 3728 |      "inside S \<in> components (- S) \<longleftrightarrow> connected(inside S) \<and> inside S \<noteq> {}" (is "?lhs = ?rhs")
 | 
| 3729 | proof | |
| 3730 | assume R: ?rhs | |
| 3731 | then have "\<And>x. \<lbrakk>x \<in> S; x \<in> inside S\<rbrakk> \<Longrightarrow> \<not> connected (inside S)" | |
| 3732 | by (simp add: inside_outside) | |
| 3733 | with R show ?lhs | |
| 3734 | unfolding in_components_maximal | |
| 3735 | by (auto intro: inside_same_component connected_componentI) | |
| 3736 | qed (simp add: in_components_maximal) | |
| 3737 | ||
| 3738 | text\<open>The proof is like that above.\<close> | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3739 | lemma outside_in_components: | 
| 72256 | 3740 |      "outside S \<in> components (- S) \<longleftrightarrow> connected(outside S) \<and> outside S \<noteq> {}" (is "?lhs = ?rhs")
 | 
| 3741 | proof | |
| 3742 | assume R: ?rhs | |
| 3743 | then have "\<And>x. \<lbrakk>x \<in> S; x \<in> outside S\<rbrakk> \<Longrightarrow> \<not> connected (outside S)" | |
| 3744 | by (meson disjoint_iff outside_no_overlap) | |
| 3745 | with R show ?lhs | |
| 3746 | unfolding in_components_maximal | |
| 3747 | by (auto intro: outside_same_component connected_componentI) | |
| 3748 | qed (simp add: in_components_maximal) | |
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3749 | |
| 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3750 | lemma bounded_unique_outside: | 
| 72256 | 3751 | fixes S :: "'a :: euclidean_space set" | 
| 3752 |   assumes "bounded S" "DIM('a) \<ge> 2"
 | |
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3753 | shows "(c \<in> components (- S) \<and> \<not> bounded c) \<longleftrightarrow> c = outside S" | 
| 72256 | 3754 | using assms | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3755 | by (metis cobounded_unique_unbounded_components connected_outside double_compl outside_bounded_nonempty | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3756 | outside_in_components unbounded_outside) | 
| 61518 
ff12606337e9
new lemmas about topology, etc., for Cauchy integral formula
 paulson parents: 
61426diff
changeset | 3757 | |
| 69514 | 3758 | |
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3759 | subsection\<open>Condition for an open map's image to contain a ball\<close> | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3760 | |
| 68607 
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
 immler parents: 
68532diff
changeset | 3761 | proposition ball_subset_open_map_image: | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3762 |   fixes f :: "'a::heine_borel \<Rightarrow> 'b :: {real_normed_vector,heine_borel}"
 | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3763 | assumes contf: "continuous_on (closure S) f" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3764 | and oint: "open (f ` interior S)" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3765 | and le_no: "\<And>z. z \<in> frontier S \<Longrightarrow> r \<le> norm(f z - f a)" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3766 | and "bounded S" "a \<in> S" "0 < r" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3767 | shows "ball (f a) r \<subseteq> f ` S" | 
| 68607 
67bb59e49834
make theorem, corollary, and proposition %important for HOL-Analysis manual
 immler parents: 
68532diff
changeset | 3768 | proof (cases "f ` S = UNIV") | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3769 | case True then show ?thesis by simp | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3770 | next | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3771 | case False | 
| 72256 | 3772 |   then have "closed (frontier (f ` S))" "frontier (f ` S) \<noteq> {}"
 | 
| 3773 | using \<open>a \<in> S\<close> by (auto simp: frontier_eq_empty) | |
| 3774 | then obtain w where w: "w \<in> frontier (f ` S)" | |
| 3775 | and dw_le: "\<And>y. y \<in> frontier (f ` S) \<Longrightarrow> norm (f a - w) \<le> norm (f a - y)" | |
| 3776 | by (auto simp add: dist_norm intro: distance_attains_inf [of "frontier(f ` S)" "f a"]) | |
| 3777 | then obtain \<xi> where \<xi>: "\<And>n. \<xi> n \<in> f ` S" and tendsw: "\<xi> \<longlonglongrightarrow> w" | |
| 3778 | by (metis Diff_iff frontier_def closure_sequential) | |
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3779 | then have "\<And>n. \<exists>x \<in> S. \<xi> n = f x" by force | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3780 | then obtain z where zs: "\<And>n. z n \<in> S" and fz: "\<And>n. \<xi> n = f (z n)" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3781 | by metis | 
| 66447 
a1f5c5c26fa6
Replaced subseq with strict_mono
 eberlm <eberlm@in.tum.de> parents: 
65038diff
changeset | 3782 | then obtain y K where y: "y \<in> closure S" and "strict_mono (K :: nat \<Rightarrow> nat)" | 
| 
a1f5c5c26fa6
Replaced subseq with strict_mono
 eberlm <eberlm@in.tum.de> parents: 
65038diff
changeset | 3783 | and Klim: "(z \<circ> K) \<longlonglongrightarrow> y" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3784 | using \<open>bounded S\<close> | 
| 72256 | 3785 | unfolding compact_closure [symmetric] compact_def by (meson closure_subset subset_iff) | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3786 | then have ftendsw: "((\<lambda>n. f (z n)) \<circ> K) \<longlonglongrightarrow> w" | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3787 | by (metis LIMSEQ_subseq_LIMSEQ fun.map_cong0 fz tendsw) | 
| 68096 | 3788 | have zKs: "\<And>n. (z \<circ> K) n \<in> S" by (simp add: zs) | 
| 63540 | 3789 | have fz: "f \<circ> z = \<xi>" "(\<lambda>n. f (z n)) = \<xi>" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3790 | using fz by auto | 
| 63540 | 3791 | then have "(\<xi> \<circ> K) \<longlonglongrightarrow> f y" | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3792 | by (metis (no_types) Klim zKs y contf comp_assoc continuous_on_closure_sequentially) | 
| 63540 | 3793 | with fz have wy: "w = f y" using fz LIMSEQ_unique ftendsw by auto | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3794 | have "r \<le> norm (f y - f a)" | 
| 72228 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3795 | proof (rule le_no) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3796 | show "y \<in> frontier S" | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3797 | using w wy oint by (force simp: imageI image_mono interiorI interior_subset frontier_def y) | 
| 
aa7cb84983e9
minor tidying, also s->S and t->T
 paulson <lp15@cam.ac.uk> parents: 
71633diff
changeset | 3798 | qed | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3799 | then have "\<And>y. \<lbrakk>norm (f a - y) < r; y \<in> frontier (f ` S)\<rbrakk> \<Longrightarrow> False" | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3800 | by (metis dw_le norm_minus_commute not_less order_trans wy) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3801 |     then have "ball (f a) r \<inter> frontier (f ` S) = {}"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3802 | by (metis disjoint_iff_not_equal dist_norm mem_ball) | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3803 | moreover | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3804 |     have "ball (f a) r \<inter> f ` S \<noteq> {}"
 | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3805 | using \<open>a \<in> S\<close> \<open>0 < r\<close> centre_in_ball by blast | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3806 | ultimately show ?thesis | 
| 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3807 | by (meson connected_Int_frontier connected_ball diff_shunt_var) | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3808 | qed | 
| 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 3809 | |
| 70196 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3810 | |
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3811 | subsubsection\<open>Special characterizations of classes of functions into and out of R.\<close> | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3812 | |
| 71200 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3813 | lemma Hausdorff_space_euclidean [simp]: "Hausdorff_space (euclidean :: 'a::metric_space topology)" | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3814 | proof - | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3815 | have "\<exists>U V. open U \<and> open V \<and> x \<in> U \<and> y \<in> V \<and> disjnt U V" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 3816 | if "x \<noteq> y" for x y :: 'a | 
| 71200 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3817 | proof (intro exI conjI) | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3818 | let ?r = "dist x y / 2" | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3819 | have [simp]: "?r > 0" | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3820 | by (simp add: that) | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3821 | show "open (ball x ?r)" "open (ball y ?r)" "x \<in> (ball x ?r)" "y \<in> (ball y ?r)" | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3822 | by (auto simp add: that) | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3823 | show "disjnt (ball x ?r) (ball y ?r)" | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3824 | unfolding disjnt_def by (simp add: disjoint_ballI) | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3825 | qed | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3826 | then show ?thesis | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3827 | by (simp add: Hausdorff_space_def) | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3828 | qed | 
| 
3548d54ce3ee
split off metric spaces part of Function_Topology: subsequent theories Product_Topology, T1_Spaces, Lindelof_Spaces are purely topological
 immler parents: 
71191diff
changeset | 3829 | |
| 70196 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3830 | proposition embedding_map_into_euclideanreal: | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3831 | assumes "path_connected_space X" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3832 | shows "embedding_map X euclideanreal f \<longleftrightarrow> | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3833 | continuous_map X euclideanreal f \<and> inj_on f (topspace X)" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3834 | proof safe | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3835 | show "continuous_map X euclideanreal f" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3836 | if "embedding_map X euclideanreal f" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3837 | using continuous_map_in_subtopology homeomorphic_imp_continuous_map that | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3838 | unfolding embedding_map_def by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3839 | show "inj_on f (topspace X)" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3840 | if "embedding_map X euclideanreal f" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3841 | using that homeomorphic_imp_injective_map | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3842 | unfolding embedding_map_def by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3843 | show "embedding_map X euclideanreal f" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3844 | if cont: "continuous_map X euclideanreal f" and inj: "inj_on f (topspace X)" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3845 | proof - | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3846 | obtain g where gf: "\<And>x. x \<in> topspace X \<Longrightarrow> g (f x) = x" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3847 | using inv_into_f_f [OF inj] by auto | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3848 | show ?thesis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3849 | unfolding embedding_map_def homeomorphic_map_maps homeomorphic_maps_def | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3850 | proof (intro exI conjI) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3851 | show "continuous_map X (top_of_set (f ` topspace X)) f" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3852 | by (simp add: cont continuous_map_in_subtopology) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3853 | let ?S = "f ` topspace X" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3854 |       have eq: "{x \<in> ?S. g x \<in> U} = f ` U" if "openin X U" for U
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3855 | using openin_subset [OF that] by (auto simp: gf) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3856 | have 1: "g ` ?S \<subseteq> topspace X" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3857 | using eq by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3858 |       have "openin (top_of_set ?S) {x \<in> ?S. g x \<in> T}"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3859 | if "openin X T" for T | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3860 | proof - | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3861 | have "T \<subseteq> topspace X" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3862 | by (simp add: openin_subset that) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3863 | have RR: "\<forall>x \<in> ?S \<inter> g -` T. \<exists>d>0. \<forall>x' \<in> ?S \<inter> ball x d. g x' \<in> T" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3864 | proof (clarsimp simp add: gf) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3865 | have pcS: "path_connectedin euclidean ?S" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3866 | using assms cont path_connectedin_continuous_map_image path_connectedin_topspace by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3867 | show "\<exists>d>0. \<forall>x'\<in>f ` topspace X \<inter> ball (f x) d. g x' \<in> T" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3868 | if "x \<in> T" for x | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3869 | proof - | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3870 | have x: "x \<in> topspace X" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3871 | using \<open>T \<subseteq> topspace X\<close> \<open>x \<in> T\<close> by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3872 | obtain u v d where "0 < d" "u \<in> topspace X" "v \<in> topspace X" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3873 |                          and sub_fuv: "?S \<inter> {f x - d .. f x + d} \<subseteq> {f u..f v}"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3874 | proof (cases "\<exists>u \<in> topspace X. f u < f x") | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3875 | case True | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3876 | then obtain u where u: "u \<in> topspace X" "f u < f x" .. | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3877 | show ?thesis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3878 | proof (cases "\<exists>v \<in> topspace X. f x < f v") | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3879 | case True | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3880 | then obtain v where v: "v \<in> topspace X" "f x < f v" .. | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3881 | show ?thesis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3882 | proof | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3883 | let ?d = "min (f x - f u) (f v - f x)" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3884 | show "0 < ?d" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3885 | by (simp add: \<open>f u < f x\<close> \<open>f x < f v\<close>) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3886 |                   show "f ` topspace X \<inter> {f x - ?d..f x + ?d} \<subseteq> {f u..f v}"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3887 | by fastforce | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3888 | qed (auto simp: u v) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3889 | next | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3890 | case False | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3891 | show ?thesis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3892 | proof | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3893 | let ?d = "f x - f u" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3894 | show "0 < ?d" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3895 | by (simp add: u) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3896 |                   show "f ` topspace X \<inter> {f x - ?d..f x + ?d} \<subseteq> {f u..f x}"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3897 | using x u False by auto | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3898 | qed (auto simp: x u) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3899 | qed | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3900 | next | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3901 | case False | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3902 | note no_u = False | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3903 | show ?thesis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3904 | proof (cases "\<exists>v \<in> topspace X. f x < f v") | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3905 | case True | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3906 | then obtain v where v: "v \<in> topspace X" "f x < f v" .. | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3907 | show ?thesis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3908 | proof | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3909 | let ?d = "f v - f x" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3910 | show "0 < ?d" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3911 | by (simp add: v) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3912 |                   show "f ` topspace X \<inter> {f x - ?d..f x + ?d} \<subseteq> {f x..f v}"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3913 | using False by auto | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3914 | qed (auto simp: x v) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3915 | next | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3916 | case False | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3917 | show ?thesis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3918 | proof | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3919 |                   show "f ` topspace X \<inter> {f x - 1..f x + 1} \<subseteq> {f x..f x}"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3920 | using False no_u by fastforce | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3921 | qed (auto simp: x) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3922 | qed | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3923 | qed | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3924 | then obtain h where "pathin X h" "h 0 = u" "h 1 = v" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3925 | using assms unfolding path_connected_space_def by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3926 | obtain C where "compactin X C" "connectedin X C" "u \<in> C" "v \<in> C" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3927 | proof | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3928 |               show "compactin X (h ` {0..1})"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3929 | using that by (simp add: \<open>pathin X h\<close> compactin_path_image) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3930 |               show "connectedin X (h ` {0..1})"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3931 | using \<open>pathin X h\<close> connectedin_path_image by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3932 | qed (use \<open>h 0 = u\<close> \<open>h 1 = v\<close> in auto) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3933 |             have "continuous_map (subtopology euclideanreal (?S \<inter> {f x - d .. f x + d})) (subtopology X C) g"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3934 | proof (rule continuous_inverse_map) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3935 | show "compact_space (subtopology X C)" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3936 | using \<open>compactin X C\<close> compactin_subspace by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3937 | show "continuous_map (subtopology X C) euclideanreal f" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3938 | by (simp add: cont continuous_map_from_subtopology) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3939 |               have "{f u .. f v} \<subseteq> f ` topspace (subtopology X C)"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3940 | proof (rule connected_contains_Icc) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3941 | show "connected (f ` topspace (subtopology X C))" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3942 | using connectedin_continuous_map_image [OF cont] | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3943 | by (simp add: \<open>compactin X C\<close> \<open>connectedin X C\<close> compactin_subset_topspace inf_absorb2) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3944 | show "f u \<in> f ` topspace (subtopology X C)" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3945 | by (simp add: \<open>u \<in> C\<close> \<open>u \<in> topspace X\<close>) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3946 | show "f v \<in> f ` topspace (subtopology X C)" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3947 | by (simp add: \<open>v \<in> C\<close> \<open>v \<in> topspace X\<close>) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3948 | qed | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3949 |               then show "f ` topspace X \<inter> {f x - d..f x + d} \<subseteq> f ` topspace (subtopology X C)"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3950 | using sub_fuv by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3951 | qed (auto simp: gf) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3952 |             then have contg: "continuous_map (subtopology euclideanreal (?S \<inter> {f x - d .. f x + d})) X g"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3953 | using continuous_map_in_subtopology by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3954 |             have "\<exists>e>0. \<forall>x \<in> ?S \<inter> {f x - d .. f x + d} \<inter> ball (f x) e. g x \<in> T"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3955 | using openin_continuous_map_preimage [OF contg \<open>openin X T\<close>] x \<open>x \<in> T\<close> \<open>0 < d\<close> | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3956 | unfolding openin_euclidean_subtopology_iff | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3957 | by (force simp: gf dist_commute) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3958 |             then obtain e where "e > 0 \<and> (\<forall>x\<in>f ` topspace X \<inter> {f x - d..f x + d} \<inter> ball (f x) e. g x \<in> T)"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3959 | by metis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3960 | with \<open>0 < d\<close> have "min d e > 0" "\<forall>u. u \<in> topspace X \<longrightarrow> \<bar>f x - f u\<bar> < min d e \<longrightarrow> u \<in> T" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3961 | using dist_real_def gf by force+ | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3962 | then show ?thesis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3963 | by (metis (full_types) Int_iff dist_real_def image_iff mem_ball gf) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3964 | qed | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3965 | qed | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3966 | then obtain d where d: "\<And>r. r \<in> ?S \<inter> g -` T \<Longrightarrow> | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3967 | d r > 0 \<and> (\<forall>x \<in> ?S \<inter> ball r (d r). g x \<in> T)" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3968 | by metis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3969 | show ?thesis | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3970 | unfolding openin_subtopology | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3971 | proof (intro exI conjI) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3972 |           show "{x \<in> ?S. g x \<in> T} = (\<Union>r \<in> ?S \<inter> g -` T. ball r (d r)) \<inter> f ` topspace X"
 | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3973 | using d by (auto simp: gf) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3974 | qed auto | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3975 | qed | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3976 | then show "continuous_map (top_of_set ?S) X g" | 
| 78320 
eb9a9690b8f5
cosmetic improvements, new lemmas, especially more uses of function space
 paulson <lp15@cam.ac.uk> parents: 
78248diff
changeset | 3977 | by (simp add: "1" continuous_map) | 
| 70196 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3978 | qed (auto simp: gf) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3979 | qed | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3980 | qed | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3981 | |
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3982 | subsubsection \<open>An injective function into R is a homeomorphism and so an open map.\<close> | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3983 | |
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3984 | lemma injective_into_1d_eq_homeomorphism: | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3985 | fixes f :: "'a::topological_space \<Rightarrow> real" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3986 | assumes f: "continuous_on S f" and S: "path_connected S" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3987 | shows "inj_on f S \<longleftrightarrow> (\<exists>g. homeomorphism S (f ` S) f g)" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3988 | proof | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3989 | show "\<exists>g. homeomorphism S (f ` S) f g" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3990 | if "inj_on f S" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3991 | proof - | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3992 | have "embedding_map (top_of_set S) euclideanreal f" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3993 | using that embedding_map_into_euclideanreal [of "top_of_set S" f] assms by auto | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3994 | then show ?thesis | 
| 78517 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3995 | unfolding embedding_map_def topspace_euclidean_subtopology | 
| 
28c1f4f5335f
Numerous minor tweaks and simplifications
 paulson <lp15@cam.ac.uk> parents: 
78336diff
changeset | 3996 | by (metis f homeomorphic_map_closedness_eq homeomorphism_injective_closed_map that) | 
| 70196 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3997 | qed | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3998 | qed (metis homeomorphism_def inj_onI) | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 3999 | |
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4000 | lemma injective_into_1d_imp_open_map: | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4001 | fixes f :: "'a::topological_space \<Rightarrow> real" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4002 | assumes "continuous_on S f" "path_connected S" "inj_on f S" "openin (subtopology euclidean S) T" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4003 | shows "openin (subtopology euclidean (f ` S)) (f ` T)" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4004 | using assms homeomorphism_imp_open_map injective_into_1d_eq_homeomorphism by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4005 | |
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4006 | lemma homeomorphism_into_1d: | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4007 | fixes f :: "'a::topological_space \<Rightarrow> real" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4008 | assumes "path_connected S" "continuous_on S f" "f ` S = T" "inj_on f S" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4009 | shows "\<exists>g. homeomorphism S T f g" | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4010 | using assms injective_into_1d_eq_homeomorphism by blast | 
| 
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
 paulson <lp15@cam.ac.uk> parents: 
70178diff
changeset | 4011 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4012 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Rectangular paths\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4013 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4014 | definition\<^marker>\<open>tag unimportant\<close> rectpath where | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4015 | "rectpath a1 a3 = (let a2 = Complex (Re a3) (Im a1); a4 = Complex (Re a1) (Im a3) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4016 | in linepath a1 a2 +++ linepath a2 a3 +++ linepath a3 a4 +++ linepath a4 a1)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4017 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4018 | lemma path_rectpath [simp, intro]: "path (rectpath a b)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4019 | by (simp add: Let_def rectpath_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4020 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4021 | lemma pathstart_rectpath [simp]: "pathstart (rectpath a1 a3) = a1" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4022 | by (simp add: rectpath_def Let_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4023 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4024 | lemma pathfinish_rectpath [simp]: "pathfinish (rectpath a1 a3) = a1" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4025 | by (simp add: rectpath_def Let_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4026 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4027 | lemma simple_path_rectpath [simp, intro]: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4028 | assumes "Re a1 \<noteq> Re a3" "Im a1 \<noteq> Im a3" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4029 | shows "simple_path (rectpath a1 a3)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4030 | unfolding rectpath_def Let_def using assms | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4031 | by (intro simple_path_join_loop arc_join arc_linepath) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4032 | (auto simp: complex_eq_iff path_image_join closed_segment_same_Re closed_segment_same_Im) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4033 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4034 | lemma path_image_rectpath: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4035 | assumes "Re a1 \<le> Re a3" "Im a1 \<le> Im a3" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4036 | shows "path_image (rectpath a1 a3) = | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4037 |            {z. Re z \<in> {Re a1, Re a3} \<and> Im z \<in> {Im a1..Im a3}} \<union>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4038 |            {z. Im z \<in> {Im a1, Im a3} \<and> Re z \<in> {Re a1..Re a3}}" (is "?lhs = ?rhs")
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4039 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4040 | define a2 a4 where "a2 = Complex (Re a3) (Im a1)" and "a4 = Complex (Re a1) (Im a3)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4041 | have "?lhs = closed_segment a1 a2 \<union> closed_segment a2 a3 \<union> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4042 | closed_segment a4 a3 \<union> closed_segment a1 a4" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4043 | by (simp_all add: rectpath_def Let_def path_image_join closed_segment_commute | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4044 | a2_def a4_def Un_assoc) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4045 | also have "\<dots> = ?rhs" using assms | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4046 | by (auto simp: rectpath_def Let_def path_image_join a2_def a4_def | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4047 | closed_segment_same_Re closed_segment_same_Im closed_segment_eq_real_ivl) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4048 | finally show ?thesis . | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4049 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4050 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4051 | lemma path_image_rectpath_subset_cbox: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4052 | assumes "Re a \<le> Re b" "Im a \<le> Im b" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4053 | shows "path_image (rectpath a b) \<subseteq> cbox a b" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4054 | using assms by (auto simp: path_image_rectpath in_cbox_complex_iff) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4055 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4056 | lemma path_image_rectpath_inter_box: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4057 | assumes "Re a \<le> Re b" "Im a \<le> Im b" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4058 |   shows   "path_image (rectpath a b) \<inter> box a b = {}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4059 | using assms by (auto simp: path_image_rectpath in_box_complex_iff) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4060 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4061 | lemma path_image_rectpath_cbox_minus_box: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4062 | assumes "Re a \<le> Re b" "Im a \<le> Im b" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71172diff
changeset | 4063 | shows "path_image (rectpath a b) = cbox a b - box a b" | 
| 76874 
d6b02d54dbf8
Tidying up of paths, introducing "loop_free" as a separate predicate in the definition of "simple_path"
 paulson <lp15@cam.ac.uk> parents: 
76837diff
changeset | 4064 | using assms by (auto simp: path_image_rectpath in_cbox_complex_iff in_box_complex_iff) | 
| 71184 
d62fdaafdafc
renamed Analysis/Winding_Numbers to Winding_Numbers_2; reorganised Analysis/Cauchy_Integral_Theorem by splitting it into Contour_Integration, Winding_Numbers,Cauchy_Integral_Theorem and Cauchy_Integral_Formula.
 Wenda Li <wl302@cam.ac.uk> parents: 
71172diff
changeset | 4065 | |
| 36583 | 4066 | end |