src/HOL/Analysis/Winding_Numbers.thy
changeset 70136 f03a01a18c6e
parent 69986 f2d327275065
child 70817 dd675800469d
equal deleted inserted replaced
70135:ad6d4a14adb5 70136:f03a01a18c6e
   837     by (auto simp: closed_segment_def scaleR_conv_of_real algebra_simps)
   837     by (auto simp: closed_segment_def scaleR_conv_of_real algebra_simps)
   838   from u(1) show "z \<in> closed_segment a b" using assms
   838   from u(1) show "z \<in> closed_segment a b" using assms
   839     by (intro closed_segmentI[of u]) (auto simp: u algebra_simps scaleR_conv_of_real complex_eq_iff)
   839     by (intro closed_segmentI[of u]) (auto simp: u algebra_simps scaleR_conv_of_real complex_eq_iff)
   840 qed
   840 qed
   841 
   841 
   842 definition%important rectpath where
   842 definition\<^marker>\<open>tag important\<close> rectpath where
   843   "rectpath a1 a3 = (let a2 = Complex (Re a3) (Im a1); a4 = Complex (Re a1) (Im a3)
   843   "rectpath a1 a3 = (let a2 = Complex (Re a3) (Im a1); a4 = Complex (Re a1) (Im a3)
   844                       in linepath a1 a2 +++ linepath a2 a3 +++ linepath a3 a4 +++ linepath a4 a1)"
   844                       in linepath a1 a2 +++ linepath a2 a3 +++ linepath a3 a4 +++ linepath a4 a1)"
   845 
   845 
   846 lemma path_rectpath [simp, intro]: "path (rectpath a b)"
   846 lemma path_rectpath [simp, intro]: "path (rectpath a b)"
   847   by (simp add: Let_def rectpath_def)
   847   by (simp add: Let_def rectpath_def)
   927   shows   "winding_number (rectpath a1 a3) z = 0"
   927   shows   "winding_number (rectpath a1 a3) z = 0"
   928   using assms by (intro winding_number_zero_outside[OF _ _ _ assms(3)]
   928   using assms by (intro winding_number_zero_outside[OF _ _ _ assms(3)]
   929                      path_image_rectpath_subset_cbox) simp_all
   929                      path_image_rectpath_subset_cbox) simp_all
   930 
   930 
   931 text\<open>A per-function version for continuous logs, a kind of monodromy\<close>
   931 text\<open>A per-function version for continuous logs, a kind of monodromy\<close>
   932 proposition%unimportant winding_number_compose_exp:
   932 proposition\<^marker>\<open>tag unimportant\<close> winding_number_compose_exp:
   933   assumes "path p"
   933   assumes "path p"
   934   shows "winding_number (exp \<circ> p) 0 = (pathfinish p - pathstart p) / (2 * of_real pi * \<i>)"
   934   shows "winding_number (exp \<circ> p) 0 = (pathfinish p - pathstart p) / (2 * of_real pi * \<i>)"
   935 proof -
   935 proof -
   936   obtain e where "0 < e" and e: "\<And>t. t \<in> {0..1} \<Longrightarrow> e \<le> norm(exp(p t))"
   936   obtain e where "0 < e" and e: "\<And>t. t \<in> {0..1} \<Longrightarrow> e \<le> norm(exp(p t))"
   937   proof
   937   proof
  1018       using \<open>g 0 = p 0\<close> \<open>g 1 = p 1\<close> by auto
  1018       using \<open>g 0 = p 0\<close> \<open>g 1 = p 1\<close> by auto
  1019   qed
  1019   qed
  1020   finally show ?thesis .
  1020   finally show ?thesis .
  1021 qed
  1021 qed
  1022 
  1022 
  1023 subsection%unimportant \<open>The winding number defines a continuous logarithm for the path itself\<close>
  1023 subsection\<^marker>\<open>tag unimportant\<close> \<open>The winding number defines a continuous logarithm for the path itself\<close>
  1024 
  1024 
  1025 lemma winding_number_as_continuous_log:
  1025 lemma winding_number_as_continuous_log:
  1026   assumes "path p" and \<zeta>: "\<zeta> \<notin> path_image p"
  1026   assumes "path p" and \<zeta>: "\<zeta> \<notin> path_image p"
  1027   obtains q where "path q"
  1027   obtains q where "path q"
  1028                   "pathfinish q - pathstart q = 2 * of_real pi * \<i> * winding_number p \<zeta>"
  1028                   "pathfinish q - pathstart q = 2 * of_real pi * \<i> * winding_number p \<zeta>"