835 using w by blast |
835 using w by blast |
836 moreover have "winding_number \<gamma> constant_on outside (path_image \<gamma>)" |
836 moreover have "winding_number \<gamma> constant_on outside (path_image \<gamma>)" |
837 using winding_number_constant [OF \<gamma> loop, of "outside(path_image \<gamma>)"] connected_outside |
837 using winding_number_constant [OF \<gamma> loop, of "outside(path_image \<gamma>)"] connected_outside |
838 by (metis DIM_complex bounded_path_image dual_order.refl \<gamma> outside_no_overlap) |
838 by (metis DIM_complex bounded_path_image dual_order.refl \<gamma> outside_no_overlap) |
839 ultimately have "winding_number \<gamma> z = winding_number \<gamma> w" |
839 ultimately have "winding_number \<gamma> z = winding_number \<gamma> w" |
840 by (metis (no_types, hide_lams) constant_on_def z) |
840 by (metis (no_types, opaque_lifting) constant_on_def z) |
841 also have "\<dots> = 0" |
841 also have "\<dots> = 0" |
842 proof - |
842 proof - |
843 have wnot: "w \<notin> path_image \<gamma>" using wout by (simp add: outside_def) |
843 have wnot: "w \<notin> path_image \<gamma>" using wout by (simp add: outside_def) |
844 { fix e::real assume "0<e" |
844 { fix e::real assume "0<e" |
845 obtain p where p: "polynomial_function p" "pathstart p = pathstart \<gamma>" "pathfinish p = pathfinish \<gamma>" |
845 obtain p where p: "polynomial_function p" "pathstart p = pathstart \<gamma>" "pathfinish p = pathfinish \<gamma>" |
1575 then show 3: "path_image p \<inter> path_image (linepath (a + e) c +++ linepath c (a - e)) = {a + e, a - e}" |
1575 then show 3: "path_image p \<inter> path_image (linepath (a + e) c +++ linepath c (a - e)) = {a + e, a - e}" |
1576 using "1" "2" by blast |
1576 using "1" "2" by blast |
1577 show 4: "path_image (linepath (a + e) c +++ linepath c (a - e)) \<inter> |
1577 show 4: "path_image (linepath (a + e) c +++ linepath c (a - e)) \<inter> |
1578 inside (path_image (linepath (a + e) (a - e)) \<union> path_image p) \<noteq> {}" |
1578 inside (path_image (linepath (a + e) (a - e)) \<union> path_image p) \<noteq> {}" |
1579 apply (clarsimp simp: path_image_join segment_convex_hull disjoint_iff_not_equal) |
1579 apply (clarsimp simp: path_image_join segment_convex_hull disjoint_iff_not_equal) |
1580 by (metis (no_types, hide_lams) UnI1 Un_commute c closed_segment_commute ends_in_segment(1) path_image_join |
1580 by (metis (no_types, opaque_lifting) UnI1 Un_commute c closed_segment_commute ends_in_segment(1) path_image_join |
1581 path_image_linepath pathstart_linepath pfp segment_convex_hull) |
1581 path_image_linepath pathstart_linepath pfp segment_convex_hull) |
1582 show zin_inside: "z \<in> inside (path_image (linepath (a + e) (a - e)) \<union> |
1582 show zin_inside: "z \<in> inside (path_image (linepath (a + e) (a - e)) \<union> |
1583 path_image (linepath (a + e) c +++ linepath c (a - e)))" |
1583 path_image (linepath (a + e) c +++ linepath c (a - e)))" |
1584 proof (simp add: path_image_join) |
1584 proof (simp add: path_image_join) |
1585 show "z \<in> inside (closed_segment (a + e) (a - e) \<union> (closed_segment (a + e) c \<union> closed_segment c (a - e)))" |
1585 show "z \<in> inside (closed_segment (a + e) (a - e) \<union> (closed_segment (a + e) c \<union> closed_segment c (a - e)))" |
1623 obtains z where "z \<in> inside (path_image (p +++ linepath (a - d) (a + e)))" |
1623 obtains z where "z \<in> inside (path_image (p +++ linepath (a - d) (a + e)))" |
1624 "cmod (winding_number (p +++ linepath (a - d) (a + e)) z) = 1" |
1624 "cmod (winding_number (p +++ linepath (a - d) (a + e)) z) = 1" |
1625 proof - |
1625 proof - |
1626 have [simp]: "a + of_real x \<in> closed_segment (a - \<alpha>) (a - \<beta>) \<longleftrightarrow> x \<in> closed_segment (-\<alpha>) (-\<beta>)" for x \<alpha> \<beta>::real |
1626 have [simp]: "a + of_real x \<in> closed_segment (a - \<alpha>) (a - \<beta>) \<longleftrightarrow> x \<in> closed_segment (-\<alpha>) (-\<beta>)" for x \<alpha> \<beta>::real |
1627 using closed_segment_translation_eq [of a] |
1627 using closed_segment_translation_eq [of a] |
1628 by (metis (no_types, hide_lams) add_uminus_conv_diff of_real_minus of_real_closed_segment) |
1628 by (metis (no_types, opaque_lifting) add_uminus_conv_diff of_real_minus of_real_closed_segment) |
1629 have [simp]: "a - of_real x \<in> closed_segment (a + \<alpha>) (a + \<beta>) \<longleftrightarrow> -x \<in> closed_segment \<alpha> \<beta>" for x \<alpha> \<beta>::real |
1629 have [simp]: "a - of_real x \<in> closed_segment (a + \<alpha>) (a + \<beta>) \<longleftrightarrow> -x \<in> closed_segment \<alpha> \<beta>" for x \<alpha> \<beta>::real |
1630 by (metis closed_segment_translation_eq diff_conv_add_uminus of_real_closed_segment of_real_minus) |
1630 by (metis closed_segment_translation_eq diff_conv_add_uminus of_real_closed_segment of_real_minus) |
1631 have "arc p" and arc_lp: "arc (linepath (a - d) (a + e))" and "path p" |
1631 have "arc p" and arc_lp: "arc (linepath (a - d) (a + e))" and "path p" |
1632 and pap: "path_image p \<inter> closed_segment (a - d) (a + e) \<subseteq> {a+e, a-d}" |
1632 and pap: "path_image p \<inter> closed_segment (a - d) (a + e) \<subseteq> {a+e, a-d}" |
1633 using simple_path_join_loop_eq [of "linepath (a - d) (a + e)" p] assms arc_imp_path by auto |
1633 using simple_path_join_loop_eq [of "linepath (a - d) (a + e)" p] assms arc_imp_path by auto |
1801 by (metis ComplD Un_iff Un_closed_segment a_diff_kde inside_Un_outside path_image_join path_image_linepath pathstart_linepath pfp zzin) |
1801 by (metis ComplD Un_iff Un_closed_segment a_diff_kde inside_Un_outside path_image_join path_image_linepath pathstart_linepath pfp zzin) |
1802 have znotin_d_e: "z \<notin> closed_segment (a - d) (a + e)" |
1802 have znotin_d_e: "z \<notin> closed_segment (a - d) (a + e)" |
1803 by (metis IntI UnCI emptyE inside_no_overlap path_image_join path_image_linepath pathstart_linepath pfp zzin) |
1803 by (metis IntI UnCI emptyE inside_no_overlap path_image_join path_image_linepath pathstart_linepath pfp zzin) |
1804 have znotin_kde_e: "z \<notin> closed_segment (a + kde) (a + e)" and znotin_d_kde': "z \<notin> closed_segment (a - d) (a - kde)" |
1804 have znotin_kde_e: "z \<notin> closed_segment (a + kde) (a + e)" and znotin_d_kde': "z \<notin> closed_segment (a - d) (a - kde)" |
1805 using clsub1 clsub2 zzin |
1805 using clsub1 clsub2 zzin |
1806 by (metis (no_types, hide_lams) IntI Un_iff emptyE inside_no_overlap path_image_join path_image_linepath pathstart_linepath pfp subsetD)+ |
1806 by (metis (no_types, opaque_lifting) IntI Un_iff emptyE inside_no_overlap path_image_join path_image_linepath pathstart_linepath pfp subsetD)+ |
1807 have "winding_number (linepath (a - d) (a + e)) z = |
1807 have "winding_number (linepath (a - d) (a + e)) z = |
1808 winding_number (linepath (a - d) (a + kde)) z + winding_number (linepath (a + kde) (a + e)) z" |
1808 winding_number (linepath (a - d) (a + kde)) z + winding_number (linepath (a + kde) (a + e)) z" |
1809 proof (rule winding_number_split_linepath) |
1809 proof (rule winding_number_split_linepath) |
1810 show "a + complex_of_real kde \<in> closed_segment (a - d) (a + e)" |
1810 show "a + complex_of_real kde \<in> closed_segment (a - d) (a + e)" |
1811 by (simp add: a_diff_kde) |
1811 by (simp add: a_diff_kde) |
1950 "(path_image (subpath 0 t q) \<union> path_image (subpath 1 t q)) \<inter> closed_segment (a - d) (a + e) = {a - d, a + e}" |
1950 "(path_image (subpath 0 t q) \<union> path_image (subpath 1 t q)) \<inter> closed_segment (a - d) (a + e) = {a - d, a + e}" |
1951 by metis |
1951 by metis |
1952 have z_notin_ed: "z \<notin> closed_segment (a + e) (a - d)" |
1952 have z_notin_ed: "z \<notin> closed_segment (a + e) (a - d)" |
1953 using zin q01 by (simp add: path_image_join closed_segment_commute inside_def) |
1953 using zin q01 by (simp add: path_image_join closed_segment_commute inside_def) |
1954 have z_notin_0t: "z \<notin> path_image (subpath 0 t q)" |
1954 have z_notin_0t: "z \<notin> path_image (subpath 0 t q)" |
1955 by (metis (no_types, hide_lams) IntI Un_upper1 subsetD empty_iff inside_no_overlap path_image_join |
1955 by (metis (no_types, opaque_lifting) IntI Un_upper1 subsetD empty_iff inside_no_overlap path_image_join |
1956 path_image_subpath_commute pathfinish_subpath pathstart_def pathstart_linepath q_ends(1) qt subpath_trivial zin) |
1956 path_image_subpath_commute pathfinish_subpath pathstart_def pathstart_linepath q_ends(1) qt subpath_trivial zin) |
1957 have [simp]: "- winding_number (subpath t 0 q) z = winding_number (subpath 0 t q) z" |
1957 have [simp]: "- winding_number (subpath t 0 q) z = winding_number (subpath 0 t q) z" |
1958 by (metis \<open>0 \<le> t\<close> \<open>simple_path q\<close> \<open>t \<le> 1\<close> atLeastAtMost_iff zero_le_one |
1958 by (metis \<open>0 \<le> t\<close> \<open>simple_path q\<close> \<open>t \<le> 1\<close> atLeastAtMost_iff zero_le_one |
1959 path_image_subpath_commute path_subpath real_eq_0_iff_le_ge_0 |
1959 path_image_subpath_commute path_subpath real_eq_0_iff_le_ge_0 |
1960 reversepath_subpath simple_path_imp_path winding_number_reversepath z_notin_0t) |
1960 reversepath_subpath simple_path_imp_path winding_number_reversepath z_notin_0t) |