| author | haftmann | 
| Sun, 28 Feb 2021 20:13:07 +0000 | |
| changeset 73327 | fd32f08f4fb5 | 
| parent 73048 | 7ad9f197ca7e | 
| child 77223 | 607e1e345e8f | 
| permissions | -rw-r--r-- | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1 | section \<open>The Residue Theorem, the Argument Principle and Rouch\'{e}'s Theorem\<close>
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2 | theory Residue_Theorem | 
| 73048 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 3 | imports Complex_Residues "HOL-Library.Landau_Symbols" | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4 | begin | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 5 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 6 | subsection \<open>Cauchy's residue theorem\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 7 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 8 | lemma get_integrable_path: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 9 | assumes "open s" "connected (s-pts)" "finite pts" "f holomorphic_on (s-pts) " "a\<in>s-pts" "b\<in>s-pts" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 10 | obtains g where "valid_path g" "pathstart g = a" "pathfinish g = b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 11 | "path_image g \<subseteq> s-pts" "f contour_integrable_on g" using assms | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 12 | proof (induct arbitrary:s thesis a rule:finite_induct[OF \<open>finite pts\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 13 | case 1 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 14 | obtain g where "valid_path g" "path_image g \<subseteq> s" "pathstart g = a" "pathfinish g = b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 15 |     using connected_open_polynomial_connected[OF \<open>open s\<close>,of a b ] \<open>connected (s - {})\<close>
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 16 | valid_path_polynomial_function "1.prems"(6) "1.prems"(7) by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 17 | moreover have "f contour_integrable_on g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 18 | using contour_integrable_holomorphic_simple[OF _ \<open>open s\<close> \<open>valid_path g\<close> \<open>path_image g \<subseteq> s\<close>,of f] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 19 |       \<open>f holomorphic_on s - {}\<close>
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 20 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 21 | ultimately show ?case using "1"(1)[of g] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 22 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 23 | case idt:(2 p pts) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 24 | obtain e where "e>0" and e:"\<forall>w\<in>ball a e. w \<in> s \<and> (w \<noteq> a \<longrightarrow> w \<notin> insert p pts)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 25 | using finite_ball_avoid[OF \<open>open s\<close> \<open>finite (insert p pts)\<close>, of a] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 26 | \<open>a \<in> s - insert p pts\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 27 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 28 | define a' where "a' \<equiv> a+e/2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 29 |   have "a'\<in>s-{p} -pts"  using e[rule_format,of "a+e/2"] \<open>e>0\<close>
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 30 | by (auto simp add:dist_complex_def a'_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 31 | then obtain g' where g'[simp]:"valid_path g'" "pathstart g' = a'" "pathfinish g' = b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 32 |     "path_image g' \<subseteq> s - {p} - pts" "f contour_integrable_on g'"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 33 |     using idt.hyps(3)[of a' "s-{p}"] idt.prems idt.hyps(1)
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 34 | by (metis Diff_insert2 open_delete) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 35 | define g where "g \<equiv> linepath a a' +++ g'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 36 | have "valid_path g" unfolding g_def by (auto intro: valid_path_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 37 | moreover have "pathstart g = a" and "pathfinish g = b" unfolding g_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 38 | moreover have "path_image g \<subseteq> s - insert p pts" unfolding g_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 39 | proof (rule subset_path_image_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 40 | have "closed_segment a a' \<subseteq> ball a e" using \<open>e>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 41 | by (auto dest!:segment_bound1 simp:a'_def dist_complex_def norm_minus_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 42 | then show "path_image (linepath a a') \<subseteq> s - insert p pts" using e idt(9) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 43 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 44 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 45 | show "path_image g' \<subseteq> s - insert p pts" using g'(4) by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 46 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 47 | moreover have "f contour_integrable_on g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 48 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 49 | have "closed_segment a a' \<subseteq> ball a e" using \<open>e>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 50 | by (auto dest!:segment_bound1 simp:a'_def dist_complex_def norm_minus_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 51 | then have "continuous_on (closed_segment a a') f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 52 | using e idt.prems(6) holomorphic_on_imp_continuous_on[OF idt.prems(5)] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 53 | apply (elim continuous_on_subset) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 54 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 55 | then have "f contour_integrable_on linepath a a'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 56 | using contour_integrable_continuous_linepath by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 57 | then show ?thesis unfolding g_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 58 | apply (rule contour_integrable_joinI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 59 | by (auto simp add: \<open>e>0\<close>) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 60 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 61 | ultimately show ?case using idt.prems(1)[of g] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 62 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 63 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 64 | lemma Cauchy_theorem_aux: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 65 | assumes "open s" "connected (s-pts)" "finite pts" "pts \<subseteq> s" "f holomorphic_on s-pts" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 66 | "valid_path g" "pathfinish g = pathstart g" "path_image g \<subseteq> s-pts" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 67 | "\<forall>z. (z \<notin> s) \<longrightarrow> winding_number g z = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 68 | "\<forall>p\<in>s. h p>0 \<and> (\<forall>w\<in>cball p (h p). w\<in>s \<and> (w\<noteq>p \<longrightarrow> w \<notin> pts))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 69 | shows "contour_integral g f = (\<Sum>p\<in>pts. winding_number g p * contour_integral (circlepath p (h p)) f)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 70 | using assms | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 71 | proof (induct arbitrary:s g rule:finite_induct[OF \<open>finite pts\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 72 | case 1 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 73 | then show ?case by (simp add: Cauchy_theorem_global contour_integral_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 74 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 75 | case (2 p pts) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 76 | note fin[simp] = \<open>finite (insert p pts)\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 77 | and connected = \<open>connected (s - insert p pts)\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 78 | and valid[simp] = \<open>valid_path g\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 79 | and g_loop[simp] = \<open>pathfinish g = pathstart g\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 80 | and holo[simp]= \<open>f holomorphic_on s - insert p pts\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 81 | and path_img = \<open>path_image g \<subseteq> s - insert p pts\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 82 | and winding = \<open>\<forall>z. z \<notin> s \<longrightarrow> winding_number g z = 0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 83 | and h = \<open>\<forall>pa\<in>s. 0 < h pa \<and> (\<forall>w\<in>cball pa (h pa). w \<in> s \<and> (w \<noteq> pa \<longrightarrow> w \<notin> insert p pts))\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 84 | have "h p>0" and "p\<in>s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 85 | and h_p: "\<forall>w\<in>cball p (h p). w \<in> s \<and> (w \<noteq> p \<longrightarrow> w \<notin> insert p pts)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 86 | using h \<open>insert p pts \<subseteq> s\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 87 | obtain pg where pg[simp]: "valid_path pg" "pathstart pg = pathstart g" "pathfinish pg=p+h p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 88 | "path_image pg \<subseteq> s-insert p pts" "f contour_integrable_on pg" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 89 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 90 | have "p + h p\<in>cball p (h p)" using h[rule_format,of p] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 91 | by (simp add: \<open>p \<in> s\<close> dist_norm) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 92 | then have "p + h p \<in> s - insert p pts" using h[rule_format,of p] \<open>insert p pts \<subseteq> s\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 93 | by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 94 | moreover have "pathstart g \<in> s - insert p pts " using path_img by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 95 | ultimately show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 96 | using get_integrable_path[OF \<open>open s\<close> connected fin holo,of "pathstart g" "p+h p"] that | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 97 | by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 98 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 99 | obtain n::int where "n=winding_number g p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 100 | using integer_winding_number[OF _ g_loop,of p] valid path_img | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 101 | by (metis DiffD2 Ints_cases insertI1 subset_eq valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 102 | define p_circ where "p_circ \<equiv> circlepath p (h p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 103 | define p_circ_pt where "p_circ_pt \<equiv> linepath (p+h p) (p+h p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 104 | define n_circ where "n_circ \<equiv> \<lambda>n. ((+++) p_circ ^^ n) p_circ_pt" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 105 | define cp where "cp \<equiv> if n\<ge>0 then reversepath (n_circ (nat n)) else n_circ (nat (- n))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 106 | have n_circ:"valid_path (n_circ k)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 107 | "winding_number (n_circ k) p = k" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 108 | "pathstart (n_circ k) = p + h p" "pathfinish (n_circ k) = p + h p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 109 |       "path_image (n_circ k) =  (if k=0 then {p + h p} else sphere p (h p))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 110 | "p \<notin> path_image (n_circ k)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 111 | "\<And>p'. p'\<notin>s - pts \<Longrightarrow> winding_number (n_circ k) p'=0 \<and> p'\<notin>path_image (n_circ k)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 112 | "f contour_integrable_on (n_circ k)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 113 | "contour_integral (n_circ k) f = k * contour_integral p_circ f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 114 | for k | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 115 | proof (induct k) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 116 | case 0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 117 | show "valid_path (n_circ 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 118 |         and "path_image (n_circ 0) =  (if 0=0 then {p + h p} else sphere p (h p))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 119 | and "winding_number (n_circ 0) p = of_nat 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 120 | and "pathstart (n_circ 0) = p + h p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 121 | and "pathfinish (n_circ 0) = p + h p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 122 | and "p \<notin> path_image (n_circ 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 123 | unfolding n_circ_def p_circ_pt_def using \<open>h p > 0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 124 | by (auto simp add: dist_norm) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 125 | show "winding_number (n_circ 0) p'=0 \<and> p'\<notin>path_image (n_circ 0)" when "p'\<notin>s- pts" for p' | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 126 | unfolding n_circ_def p_circ_pt_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 127 | apply (auto intro!:winding_number_trivial) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 128 | by (metis Diff_iff pathfinish_in_path_image pg(3) pg(4) subsetCE subset_insertI that)+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 129 | show "f contour_integrable_on (n_circ 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 130 | unfolding n_circ_def p_circ_pt_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 131 | by (auto intro!:contour_integrable_continuous_linepath simp add:continuous_on_sing) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 132 | show "contour_integral (n_circ 0) f = of_nat 0 * contour_integral p_circ f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 133 | unfolding n_circ_def p_circ_pt_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 134 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 135 | case (Suc k) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 136 | have n_Suc:"n_circ (Suc k) = p_circ +++ n_circ k" unfolding n_circ_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 137 | have pcirc:"p \<notin> path_image p_circ" "valid_path p_circ" "pathfinish p_circ = pathstart (n_circ k)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 138 | using Suc(3) unfolding p_circ_def using \<open>h p > 0\<close> by (auto simp add: p_circ_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 139 | have pcirc_image:"path_image p_circ \<subseteq> s - insert p pts" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 140 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 141 | have "path_image p_circ \<subseteq> cball p (h p)" using \<open>0 < h p\<close> p_circ_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 142 | then show ?thesis using h_p pcirc(1) by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 143 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 144 | have pcirc_integrable:"f contour_integrable_on p_circ" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 145 | by (auto simp add:p_circ_def intro!: pcirc_image[unfolded p_circ_def] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 146 | contour_integrable_continuous_circlepath holomorphic_on_imp_continuous_on | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 147 | holomorphic_on_subset[OF holo]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 148 | show "valid_path (n_circ (Suc k))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 149 | using valid_path_join[OF pcirc(2) Suc(1) pcirc(3)] unfolding n_circ_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 150 | show "path_image (n_circ (Suc k)) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 151 |           = (if Suc k = 0 then {p + complex_of_real (h p)} else sphere p (h p))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 152 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 153 | have "path_image p_circ = sphere p (h p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 154 | unfolding p_circ_def using \<open>0 < h p\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 155 | then show ?thesis unfolding n_Suc using Suc.hyps(5) \<open>h p>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 156 | by (auto simp add: path_image_join[OF pcirc(3)] dist_norm) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 157 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 158 | then show "p \<notin> path_image (n_circ (Suc k))" using \<open>h p>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 159 | show "winding_number (n_circ (Suc k)) p = of_nat (Suc k)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 160 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 161 | have "winding_number p_circ p = 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 162 | by (simp add: \<open>h p > 0\<close> p_circ_def winding_number_circlepath_centre) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 163 | moreover have "p \<notin> path_image (n_circ k)" using Suc(5) \<open>h p>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 164 | then have "winding_number (p_circ +++ n_circ k) p | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 165 | = winding_number p_circ p + winding_number (n_circ k) p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 166 | using valid_path_imp_path Suc.hyps(1) Suc.hyps(2) pcirc | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 167 | apply (intro winding_number_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 168 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 169 | ultimately show ?thesis using Suc(2) unfolding n_circ_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 170 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 171 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 172 | show "pathstart (n_circ (Suc k)) = p + h p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 173 | by (simp add: n_circ_def p_circ_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 174 | show "pathfinish (n_circ (Suc k)) = p + h p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 175 | using Suc(4) unfolding n_circ_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 176 | show "winding_number (n_circ (Suc k)) p'=0 \<and> p'\<notin>path_image (n_circ (Suc k))" when "p'\<notin>s-pts" for p' | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 177 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 178 | have " p' \<notin> path_image p_circ" using \<open>p \<in> s\<close> h p_circ_def that using pcirc_image by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 179 | moreover have "p' \<notin> path_image (n_circ k)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 180 | using Suc.hyps(7) that by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 181 | moreover have "winding_number p_circ p' = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 182 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 183 | have "path_image p_circ \<subseteq> cball p (h p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 184 | using h unfolding p_circ_def using \<open>p \<in> s\<close> by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 185 | moreover have "p'\<notin>cball p (h p)" using \<open>p \<in> s\<close> h that "2.hyps"(2) by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 186 | ultimately show ?thesis unfolding p_circ_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 187 | apply (intro winding_number_zero_outside) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 188 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 189 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 190 | ultimately show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 191 | unfolding n_Suc | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 192 | apply (subst winding_number_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 193 | by (auto simp: valid_path_imp_path pcirc Suc that not_in_path_image_join Suc.hyps(7)[OF that]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 194 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 195 | show "f contour_integrable_on (n_circ (Suc k))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 196 | unfolding n_Suc | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 197 | by (rule contour_integrable_joinI[OF pcirc_integrable Suc(8) pcirc(2) Suc(1)]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 198 | show "contour_integral (n_circ (Suc k)) f = (Suc k) * contour_integral p_circ f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 199 | unfolding n_Suc | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 200 | by (auto simp add:contour_integral_join[OF pcirc_integrable Suc(8) pcirc(2) Suc(1)] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 201 | Suc(9) algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 202 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 203 | have cp[simp]:"pathstart cp = p + h p" "pathfinish cp = p + h p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 204 | "valid_path cp" "path_image cp \<subseteq> s - insert p pts" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 205 | "winding_number cp p = - n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 206 | "\<And>p'. p'\<notin>s - pts \<Longrightarrow> winding_number cp p'=0 \<and> p' \<notin> path_image cp" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 207 | "f contour_integrable_on cp" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 208 | "contour_integral cp f = - n * contour_integral p_circ f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 209 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 210 | show "pathstart cp = p + h p" and "pathfinish cp = p + h p" and "valid_path cp" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 211 | using n_circ unfolding cp_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 212 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 213 | have "sphere p (h p) \<subseteq> s - insert p pts" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 214 | using h[rule_format,of p] \<open>insert p pts \<subseteq> s\<close> by force | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 215 | moreover have "p + complex_of_real (h p) \<in> s - insert p pts" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 216 | using pg(3) pg(4) by (metis pathfinish_in_path_image subsetCE) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 217 | ultimately show "path_image cp \<subseteq> s - insert p pts" unfolding cp_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 218 | using n_circ(5) by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 219 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 220 | show "winding_number cp p = - n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 221 | unfolding cp_def using winding_number_reversepath n_circ \<open>h p>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 222 | by (auto simp: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 223 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 224 | show "winding_number cp p'=0 \<and> p' \<notin> path_image cp" when "p'\<notin>s - pts" for p' | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 225 | unfolding cp_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 226 | apply (auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 227 | apply (subst winding_number_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 228 | by (auto simp add: valid_path_imp_path n_circ(7)[OF that] n_circ(1)) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 229 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 230 | show "f contour_integrable_on cp" unfolding cp_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 231 | using contour_integrable_reversepath_eq n_circ(1,8) by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 232 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 233 | show "contour_integral cp f = - n * contour_integral p_circ f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 234 | unfolding cp_def using contour_integral_reversepath[OF n_circ(1)] n_circ(9) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 235 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 236 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 237 | define g' where "g' \<equiv> g +++ pg +++ cp +++ (reversepath pg)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 238 | have "contour_integral g' f = (\<Sum>p\<in>pts. winding_number g' p * contour_integral (circlepath p (h p)) f)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 239 |     proof (rule "2.hyps"(3)[of "s-{p}" "g'",OF _ _ \<open>finite pts\<close> ])
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 240 |       show "connected (s - {p} - pts)" using connected by (metis Diff_insert2)
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 241 |       show "open (s - {p})" using \<open>open s\<close> by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 242 |       show " pts \<subseteq> s - {p}" using \<open>insert p pts \<subseteq> s\<close> \<open> p \<notin> pts\<close>  by blast
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 243 |       show "f holomorphic_on s - {p} - pts" using holo \<open>p \<notin> pts\<close> by (metis Diff_insert2)
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 244 | show "valid_path g'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 245 | unfolding g'_def cp_def using n_circ valid pg g_loop | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 246 | by (auto intro!:valid_path_join ) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 247 | show "pathfinish g' = pathstart g'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 248 | unfolding g'_def cp_def using pg(2) by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 249 |       show "path_image g' \<subseteq> s - {p} - pts"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 250 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 251 |           define s' where "s' \<equiv> s - {p} - pts"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 252 | have s':"s' = s-insert p pts " unfolding s'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 253 | then show ?thesis using path_img pg(4) cp(4) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 254 | unfolding g'_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 255 | apply (fold s'_def s') | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 256 | apply (intro subset_path_image_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 257 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 258 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 259 | note path_join_imp[simp] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 260 |       show "\<forall>z. z \<notin> s - {p} \<longrightarrow> winding_number g' z = 0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 261 | proof clarify | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 262 |           fix z assume z:"z\<notin>s - {p}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 263 | have "winding_number (g +++ pg +++ cp +++ reversepath pg) z = winding_number g z | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 264 | + winding_number (pg +++ cp +++ (reversepath pg)) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 265 | proof (rule winding_number_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 266 | show "path g" using \<open>valid_path g\<close> by (simp add: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 267 | show "z \<notin> path_image g" using z path_img by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 268 | show "path (pg +++ cp +++ reversepath pg)" using pg(3) cp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 269 | by (simp add: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 270 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 271 | have "path_image (pg +++ cp +++ reversepath pg) \<subseteq> s - insert p pts" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 272 | using pg(4) cp(4) by (auto simp:subset_path_image_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 273 | then show "z \<notin> path_image (pg +++ cp +++ reversepath pg)" using z by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 274 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 275 | show "pathfinish g = pathstart (pg +++ cp +++ reversepath pg)" using g_loop by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 276 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 277 | also have "... = winding_number g z + (winding_number pg z | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 278 | + winding_number (cp +++ (reversepath pg)) z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 279 | proof (subst add_left_cancel,rule winding_number_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 280 | show "path pg" and "path (cp +++ reversepath pg)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 281 | and "pathfinish pg = pathstart (cp +++ reversepath pg)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 282 | by (auto simp add: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 283 | show "z \<notin> path_image pg" using pg(4) z by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 284 | show "z \<notin> path_image (cp +++ reversepath pg)" using z | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 285 | by (metis Diff_iff \<open>z \<notin> path_image pg\<close> contra_subsetD cp(4) insertI1 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 286 | not_in_path_image_join path_image_reversepath singletonD) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 287 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 288 | also have "... = winding_number g z + (winding_number pg z | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 289 | + (winding_number cp z + winding_number (reversepath pg) z))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 290 | apply (auto intro!:winding_number_join simp: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 291 | apply (metis Diff_iff contra_subsetD cp(4) insertI1 singletonD z) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 292 | by (metis Diff_insert2 Diff_subset contra_subsetD pg(4) z) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 293 | also have "... = winding_number g z + winding_number cp z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 294 | apply (subst winding_number_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 295 | apply (auto simp: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 296 | by (metis Diff_iff contra_subsetD insertI1 pg(4) singletonD z) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 297 | finally have "winding_number g' z = winding_number g z + winding_number cp z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 298 | unfolding g'_def . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 299 | moreover have "winding_number g z + winding_number cp z = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 300 | using winding z \<open>n=winding_number g p\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 301 | ultimately show "winding_number g' z = 0" unfolding g'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 302 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 303 |       show "\<forall>pa\<in>s - {p}. 0 < h pa \<and> (\<forall>w\<in>cball pa (h pa). w \<in> s - {p} \<and> (w \<noteq> pa \<longrightarrow> w \<notin> pts))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 304 | using h by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 305 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 306 | moreover have "contour_integral g' f = contour_integral g f | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 307 | - winding_number g p * contour_integral p_circ f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 308 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 309 | have "contour_integral g' f = contour_integral g f | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 310 | + contour_integral (pg +++ cp +++ reversepath pg) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 311 | unfolding g'_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 312 | apply (subst contour_integral_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 313 | by (auto simp add:open_Diff[OF \<open>open s\<close>,OF finite_imp_closed[OF fin]] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 314 | intro!: contour_integrable_holomorphic_simple[OF holo _ _ path_img] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 315 | contour_integrable_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 316 | also have "... = contour_integral g f + contour_integral pg f | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 317 | + contour_integral (cp +++ reversepath pg) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 318 | apply (subst contour_integral_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 319 | by (auto simp add:contour_integrable_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 320 | also have "... = contour_integral g f + contour_integral pg f | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 321 | + contour_integral cp f + contour_integral (reversepath pg) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 322 | apply (subst contour_integral_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 323 | by (auto simp add:contour_integrable_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 324 | also have "... = contour_integral g f + contour_integral cp f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 325 | using contour_integral_reversepath | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 326 | by (auto simp add:contour_integrable_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 327 | also have "... = contour_integral g f - winding_number g p * contour_integral p_circ f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 328 | using \<open>n=winding_number g p\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 329 | finally show ?thesis . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 330 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 331 | moreover have "winding_number g' p' = winding_number g p'" when "p'\<in>pts" for p' | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 332 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 333 | have [simp]: "p' \<notin> path_image g" "p' \<notin> path_image pg" "p'\<notin>path_image cp" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 334 | using "2.prems"(8) that | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 335 | apply blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 336 | apply (metis Diff_iff Diff_insert2 contra_subsetD pg(4) that) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 337 | by (meson DiffD2 cp(4) rev_subsetD subset_insertI that) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 338 | have "winding_number g' p' = winding_number g p' | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 339 | + winding_number (pg +++ cp +++ reversepath pg) p'" unfolding g'_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 340 | apply (subst winding_number_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 341 | apply (simp_all add: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 342 | apply (intro not_in_path_image_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 343 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 344 | also have "... = winding_number g p' + winding_number pg p' | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 345 | + winding_number (cp +++ reversepath pg) p'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 346 | apply (subst winding_number_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 347 | apply (simp_all add: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 348 | apply (intro not_in_path_image_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 349 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 350 | also have "... = winding_number g p' + winding_number pg p'+ winding_number cp p' | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 351 | + winding_number (reversepath pg) p'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 352 | apply (subst winding_number_join) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 353 | by (simp_all add: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 354 | also have "... = winding_number g p' + winding_number cp p'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 355 | apply (subst winding_number_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 356 | by (simp_all add: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 357 | also have "... = winding_number g p'" using that by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 358 | finally show ?thesis . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 359 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 360 | ultimately show ?case unfolding p_circ_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 361 | apply (subst (asm) sum.cong[OF refl, | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 362 | of pts _ "\<lambda>p. winding_number g p * contour_integral (circlepath p (h p)) f"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 363 | by (auto simp add:sum.insert[OF \<open>finite pts\<close> \<open>p\<notin>pts\<close>] algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 364 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 365 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 366 | lemma Cauchy_theorem_singularities: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 367 | assumes "open s" "connected s" "finite pts" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 368 | holo:"f holomorphic_on s-pts" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 369 | "valid_path g" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 370 | loop:"pathfinish g = pathstart g" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 371 | "path_image g \<subseteq> s-pts" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 372 | homo:"\<forall>z. (z \<notin> s) \<longrightarrow> winding_number g z = 0" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 373 | avoid:"\<forall>p\<in>s. h p>0 \<and> (\<forall>w\<in>cball p (h p). w\<in>s \<and> (w\<noteq>p \<longrightarrow> w \<notin> pts))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 374 | shows "contour_integral g f = (\<Sum>p\<in>pts. winding_number g p * contour_integral (circlepath p (h p)) f)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 375 | (is "?L=?R") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 376 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 377 | define circ where "circ \<equiv> \<lambda>p. winding_number g p * contour_integral (circlepath p (h p)) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 378 | define pts1 where "pts1 \<equiv> pts \<inter> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 379 | define pts2 where "pts2 \<equiv> pts - pts1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 380 |   have "pts=pts1 \<union> pts2" "pts1 \<inter> pts2 = {}" "pts2 \<inter> s={}" "pts1\<subseteq>s"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 381 | unfolding pts1_def pts2_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 382 | have "contour_integral g f = (\<Sum>p\<in>pts1. circ p)" unfolding circ_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 383 | proof (rule Cauchy_theorem_aux[OF \<open>open s\<close> _ _ \<open>pts1\<subseteq>s\<close> _ \<open>valid_path g\<close> loop _ homo]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 384 | have "finite pts1" unfolding pts1_def using \<open>finite pts\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 385 | then show "connected (s - pts1)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 386 | using \<open>open s\<close> \<open>connected s\<close> connected_open_delete_finite[of s] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 387 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 388 | show "finite pts1" using \<open>pts = pts1 \<union> pts2\<close> assms(3) by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 389 | show "f holomorphic_on s - pts1" by (metis Diff_Int2 Int_absorb holo pts1_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 390 | show "path_image g \<subseteq> s - pts1" using assms(7) pts1_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 391 | show "\<forall>p\<in>s. 0 < h p \<and> (\<forall>w\<in>cball p (h p). w \<in> s \<and> (w \<noteq> p \<longrightarrow> w \<notin> pts1))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 392 | by (simp add: avoid pts1_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 393 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 394 | moreover have "sum circ pts2=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 395 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 396 | have "winding_number g p=0" when "p\<in>pts2" for p | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 397 |         using  \<open>pts2 \<inter> s={}\<close> that homo[rule_format,of p] by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 398 | thus ?thesis unfolding circ_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 399 | apply (intro sum.neutral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 400 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 401 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 402 | moreover have "?R=sum circ pts1 + sum circ pts2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 403 | unfolding circ_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 404 |     using sum.union_disjoint[OF _ _ \<open>pts1 \<inter> pts2 = {}\<close>] \<open>finite pts\<close> \<open>pts=pts1 \<union> pts2\<close>
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 405 | by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 406 | ultimately show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 407 | apply (fold circ_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 408 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 409 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 410 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 411 | theorem Residue_theorem: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 412 | fixes s pts::"complex set" and f::"complex \<Rightarrow> complex" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 413 | and g::"real \<Rightarrow> complex" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 414 | assumes "open s" "connected s" "finite pts" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 415 | holo:"f holomorphic_on s-pts" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 416 | "valid_path g" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 417 | loop:"pathfinish g = pathstart g" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 418 | "path_image g \<subseteq> s-pts" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 419 | homo:"\<forall>z. (z \<notin> s) \<longrightarrow> winding_number g z = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 420 | shows "contour_integral g f = 2 * pi * \<i> *(\<Sum>p\<in>pts. winding_number g p * residue f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 421 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 422 | define c where "c \<equiv> 2 * pi * \<i>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 423 | obtain h where avoid:"\<forall>p\<in>s. h p>0 \<and> (\<forall>w\<in>cball p (h p). w\<in>s \<and> (w\<noteq>p \<longrightarrow> w \<notin> pts))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 424 | using finite_cball_avoid[OF \<open>open s\<close> \<open>finite pts\<close>] by metis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 425 | have "contour_integral g f | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 426 | = (\<Sum>p\<in>pts. winding_number g p * contour_integral (circlepath p (h p)) f)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 427 | using Cauchy_theorem_singularities[OF assms avoid] . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 428 | also have "... = (\<Sum>p\<in>pts. c * winding_number g p * residue f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 429 | proof (intro sum.cong) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 430 | show "pts = pts" by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 431 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 432 | fix x assume "x \<in> pts" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 433 | show "winding_number g x * contour_integral (circlepath x (h x)) f | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 434 | = c * winding_number g x * residue f x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 435 | proof (cases "x\<in>s") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 436 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 437 | then have "winding_number g x=0" using homo by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 438 | thus ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 439 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 440 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 441 | have "contour_integral (circlepath x (h x)) f = c* residue f x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 442 | using \<open>x\<in>pts\<close> \<open>finite pts\<close> avoid[rule_format,OF True] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 443 |             apply (intro base_residue[of "s-(pts-{x})",THEN contour_integral_unique,folded c_def])
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 444 | by (auto intro:holomorphic_on_subset[OF holo] open_Diff[OF \<open>open s\<close> finite_imp_closed]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 445 | then show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 446 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 447 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 448 | also have "... = c * (\<Sum>p\<in>pts. winding_number g p * residue f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 449 | by (simp add: sum_distrib_left algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 450 | finally show ?thesis unfolding c_def . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 451 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 452 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 453 | subsection \<open>The argument principle\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 454 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 455 | theorem argument_principle: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 456 | fixes f::"complex \<Rightarrow> complex" and poles s:: "complex set" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 457 |   defines "pz \<equiv> {w. f w = 0 \<or> w \<in> poles}" \<comment> \<open>\<^term>\<open>pz\<close> is the set of poles and zeros\<close>
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 458 | assumes "open s" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 459 | "connected s" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 460 | f_holo:"f holomorphic_on s-poles" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 461 | h_holo:"h holomorphic_on s" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 462 | "valid_path g" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 463 | loop:"pathfinish g = pathstart g" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 464 | path_img:"path_image g \<subseteq> s - pz" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 465 | homo:"\<forall>z. (z \<notin> s) \<longrightarrow> winding_number g z = 0" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 466 | finite:"finite pz" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 467 | poles:"\<forall>p\<in>poles. is_pole f p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 468 | shows "contour_integral g (\<lambda>x. deriv f x * h x / f x) = 2 * pi * \<i> * | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 469 | (\<Sum>p\<in>pz. winding_number g p * h p * zorder f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 470 | (is "?L=?R") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 471 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 472 | define c where "c \<equiv> 2 * complex_of_real pi * \<i> " | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 473 | define ff where "ff \<equiv> (\<lambda>x. deriv f x * h x / f x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 474 | define cont where "cont \<equiv> \<lambda>ff p e. (ff has_contour_integral c * zorder f p * h p ) (circlepath p e)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 475 | define avoid where "avoid \<equiv> \<lambda>p e. \<forall>w\<in>cball p e. w \<in> s \<and> (w \<noteq> p \<longrightarrow> w \<notin> pz)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 476 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 477 | have "\<exists>e>0. avoid p e \<and> (p\<in>pz \<longrightarrow> cont ff p e)" when "p\<in>s" for p | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 478 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 479 | obtain e1 where "e1>0" and e1_avoid:"avoid p e1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 480 | using finite_cball_avoid[OF \<open>open s\<close> finite] \<open>p\<in>s\<close> unfolding avoid_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 481 | have "\<exists>e2>0. cball p e2 \<subseteq> ball p e1 \<and> cont ff p e2" when "p\<in>pz" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 482 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 483 | define po where "po \<equiv> zorder f p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 484 | define pp where "pp \<equiv> zor_poly f p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 485 | define f' where "f' \<equiv> \<lambda>w. pp w * (w - p) powr po" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 486 | define ff' where "ff' \<equiv> (\<lambda>x. deriv f' x * h x / f' x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 487 | obtain r where "pp p\<noteq>0" "r>0" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 488 | "r<e1" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 489 | pp_holo:"pp holomorphic_on cball p r" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 490 |           pp_po:"(\<forall>w\<in>cball p r-{p}. f w = pp w * (w - p) powr po \<and> pp w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 491 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 492 | have "isolated_singularity_at f p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 493 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 494 |           have "f holomorphic_on ball p e1 - {p}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 495 | apply (intro holomorphic_on_subset[OF f_holo]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 496 | using e1_avoid \<open>p\<in>pz\<close> unfolding avoid_def pz_def by force | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 497 | then show ?thesis unfolding isolated_singularity_at_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 498 | using \<open>e1>0\<close> analytic_on_open open_delete by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 499 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 500 | moreover have "not_essential f p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 501 | proof (cases "is_pole f p") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 502 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 503 | then show ?thesis unfolding not_essential_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 504 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 505 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 506 | then have "p\<in>s-poles" using \<open>p\<in>s\<close> poles unfolding pz_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 507 | moreover have "open (s-poles)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 508 | using \<open>open s\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 509 | apply (elim open_Diff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 510 | apply (rule finite_imp_closed) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 511 | using finite unfolding pz_def by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 512 | ultimately have "isCont f p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 513 | using holomorphic_on_imp_continuous_on[OF f_holo] continuous_on_eq_continuous_at | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 514 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 515 | then show ?thesis unfolding isCont_def not_essential_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 516 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 517 | moreover have "\<exists>\<^sub>F w in at p. f w \<noteq> 0 " | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 518 | proof (rule ccontr) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 519 | assume "\<not> (\<exists>\<^sub>F w in at p. f w \<noteq> 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 520 | then have "\<forall>\<^sub>F w in at p. f w= 0" unfolding frequently_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 521 |           then obtain rr where "rr>0" "\<forall>w\<in>ball p rr - {p}. f w =0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 522 | unfolding eventually_at by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 523 |           then have "ball p rr - {p} \<subseteq> {w\<in>ball p rr-{p}. f w=0}" by blast
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 524 |           moreover have "infinite (ball p rr - {p})" using \<open>rr>0\<close> using finite_imp_not_open by fastforce
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 525 |           ultimately have "infinite {w\<in>ball p rr-{p}. f w=0}" using infinite_super by blast
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 526 | then have "infinite pz" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 527 | unfolding pz_def infinite_super by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 528 | then show False using \<open>finite pz\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 529 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 530 | ultimately obtain r where "pp p \<noteq> 0" and r:"r>0" "pp holomorphic_on cball p r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 531 |                   "(\<forall>w\<in>cball p r - {p}. f w = pp w * (w - p) powr of_int po \<and> pp w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 532 | using zorder_exist[of f p,folded po_def pp_def] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 533 | define r1 where "r1=min r e1 / 2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 534 | have "r1<e1" unfolding r1_def using \<open>e1>0\<close> \<open>r>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 535 | moreover have "r1>0" "pp holomorphic_on cball p r1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 536 |                   "(\<forall>w\<in>cball p r1 - {p}. f w = pp w * (w - p) powr of_int po \<and> pp w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 537 | unfolding r1_def using \<open>e1>0\<close> r by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 538 | ultimately show ?thesis using that \<open>pp p\<noteq>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 539 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 540 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 541 | define e2 where "e2 \<equiv> r/2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 542 | have "e2>0" using \<open>r>0\<close> unfolding e2_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 543 | define anal where "anal \<equiv> \<lambda>w. deriv pp w * h w / pp w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 544 | define prin where "prin \<equiv> \<lambda>w. po * h w / (w - p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 545 | have "((\<lambda>w. prin w + anal w) has_contour_integral c * po * h p) (circlepath p e2)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 546 | proof (rule has_contour_integral_add[of _ _ _ _ 0,simplified]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 547 | have "ball p r \<subseteq> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 548 | using \<open>r<e1\<close> avoid_def ball_subset_cball e1_avoid by (simp add: subset_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 549 | then have "cball p e2 \<subseteq> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 550 | using \<open>r>0\<close> unfolding e2_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 551 | then have "(\<lambda>w. po * h w) holomorphic_on cball p e2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 552 | using h_holo by (auto intro!: holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 553 | then show "(prin has_contour_integral c * po * h p ) (circlepath p e2)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 554 | using Cauchy_integral_circlepath_simple[folded c_def, of "\<lambda>w. po * h w"] \<open>e2>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 555 | unfolding prin_def by (auto simp add: mult.assoc) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 556 | have "anal holomorphic_on ball p r" unfolding anal_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 557 | using pp_holo h_holo pp_po \<open>ball p r \<subseteq> s\<close> \<open>pp p\<noteq>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 558 | by (auto intro!: holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 559 | then show "(anal has_contour_integral 0) (circlepath p e2)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 560 | using e2_def \<open>r>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 561 | by (auto elim!: Cauchy_theorem_disc_simple) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 562 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 563 | then have "cont ff' p e2" unfolding cont_def po_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 564 | proof (elim has_contour_integral_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 565 | fix w assume "w \<in> path_image (circlepath p e2)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 566 | then have "w\<in>ball p r" and "w\<noteq>p" unfolding e2_def using \<open>r>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 567 | define wp where "wp \<equiv> w-p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 568 | have "wp\<noteq>0" and "pp w \<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 569 | unfolding wp_def using \<open>w\<noteq>p\<close> \<open>w\<in>ball p r\<close> pp_po by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 570 | moreover have der_f':"deriv f' w = po * pp w * (w-p) powr (po - 1) + deriv pp w * (w-p) powr po" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 571 | proof (rule DERIV_imp_deriv) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 572 | have "(pp has_field_derivative (deriv pp w)) (at w)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 573 | using DERIV_deriv_iff_has_field_derivative pp_holo \<open>w\<noteq>p\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 574 | by (meson open_ball \<open>w \<in> ball p r\<close> ball_subset_cball holomorphic_derivI holomorphic_on_subset) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 575 | then show " (f' has_field_derivative of_int po * pp w * (w - p) powr of_int (po - 1) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 576 | + deriv pp w * (w - p) powr of_int po) (at w)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 577 | unfolding f'_def using \<open>w\<noteq>p\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 578 | by (auto intro!: derivative_eq_intros DERIV_cong[OF has_field_derivative_powr_of_int]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 579 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 580 | ultimately show "prin w + anal w = ff' w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 581 | unfolding ff'_def prin_def anal_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 582 | apply simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 583 | apply (unfold f'_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 584 | apply (fold wp_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 585 | apply (auto simp add:field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 586 | by (metis (no_types, lifting) diff_add_cancel mult.commute powr_add powr_to_1) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 587 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 588 | then have "cont ff p e2" unfolding cont_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 589 | proof (elim has_contour_integral_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 590 | fix w assume "w \<in> path_image (circlepath p e2)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 591 | then have "w\<in>ball p r" and "w\<noteq>p" unfolding e2_def using \<open>r>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 592 | have "deriv f' w = deriv f w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 593 |         proof (rule complex_derivative_transform_within_open[where s="ball p r - {p}"])
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 594 |           show "f' holomorphic_on ball p r - {p}" unfolding f'_def using pp_holo
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 595 | by (auto intro!: holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 596 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 597 |           have "ball p e1 - {p} \<subseteq> s - poles"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 598 | using ball_subset_cball e1_avoid[unfolded avoid_def] unfolding pz_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 599 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 600 |           then have "ball p r - {p} \<subseteq> s - poles"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 601 | apply (elim dual_order.trans) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 602 | using \<open>r<e1\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 603 |           then show "f holomorphic_on ball p r - {p}" using f_holo
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 604 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 605 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 606 |           show "open (ball p r - {p})" by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 607 |           show "w \<in> ball p r - {p}" using \<open>w\<in>ball p r\<close> \<open>w\<noteq>p\<close> by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 608 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 609 |           fix x assume "x \<in> ball p r - {p}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 610 | then show "f' x = f x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 611 | using pp_po unfolding f'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 612 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 613 | moreover have " f' w = f w " | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 614 | using \<open>w \<in> ball p r\<close> ball_subset_cball subset_iff pp_po \<open>w\<noteq>p\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 615 | unfolding f'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 616 | ultimately show "ff' w = ff w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 617 | unfolding ff'_def ff_def by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 618 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 619 | moreover have "cball p e2 \<subseteq> ball p e1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 620 | using \<open>0 < r\<close> \<open>r<e1\<close> e2_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 621 | ultimately show ?thesis using \<open>e2>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 622 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 623 | then obtain e2 where e2:"p\<in>pz \<longrightarrow> e2>0 \<and> cball p e2 \<subseteq> ball p e1 \<and> cont ff p e2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 624 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 625 | define e4 where "e4 \<equiv> if p\<in>pz then e2 else e1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 626 | have "e4>0" using e2 \<open>e1>0\<close> unfolding e4_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 627 | moreover have "avoid p e4" using e2 \<open>e1>0\<close> e1_avoid unfolding e4_def avoid_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 628 | moreover have "p\<in>pz \<longrightarrow> cont ff p e4" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 629 | by (auto simp add: e2 e4_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 630 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 631 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 632 | then obtain get_e where get_e:"\<forall>p\<in>s. get_e p>0 \<and> avoid p (get_e p) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 633 | \<and> (p\<in>pz \<longrightarrow> cont ff p (get_e p))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 634 | by metis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 635 | define ci where "ci \<equiv> \<lambda>p. contour_integral (circlepath p (get_e p)) ff" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 636 | define w where "w \<equiv> \<lambda>p. winding_number g p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 637 | have "contour_integral g ff = (\<Sum>p\<in>pz. w p * ci p)" unfolding ci_def w_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 638 | proof (rule Cauchy_theorem_singularities[OF \<open>open s\<close> \<open>connected s\<close> finite _ \<open>valid_path g\<close> loop | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 639 | path_img homo]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 640 | have "open (s - pz)" using open_Diff[OF _ finite_imp_closed[OF finite]] \<open>open s\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 641 | then show "ff holomorphic_on s - pz" unfolding ff_def using f_holo h_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 642 | by (auto intro!: holomorphic_intros simp add:pz_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 643 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 644 | show "\<forall>p\<in>s. 0 < get_e p \<and> (\<forall>w\<in>cball p (get_e p). w \<in> s \<and> (w \<noteq> p \<longrightarrow> w \<notin> pz))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 645 | using get_e using avoid_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 646 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 647 | also have "... = (\<Sum>p\<in>pz. c * w p * h p * zorder f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 648 | proof (rule sum.cong[of pz pz,simplified]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 649 | fix p assume "p \<in> pz" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 650 | show "w p * ci p = c * w p * h p * (zorder f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 651 | proof (cases "p\<in>s") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 652 | assume "p \<in> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 653 | have "ci p = c * h p * (zorder f p)" unfolding ci_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 654 | apply (rule contour_integral_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 655 | using get_e \<open>p\<in>s\<close> \<open>p\<in>pz\<close> unfolding cont_def by (metis mult.assoc mult.commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 656 | thus ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 657 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 658 | assume "p\<notin>s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 659 | then have "w p=0" using homo unfolding w_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 660 | then show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 661 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 662 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 663 | also have "... = c*(\<Sum>p\<in>pz. w p * h p * zorder f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 664 | unfolding sum_distrib_left by (simp add:algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 665 | finally have "contour_integral g ff = c * (\<Sum>p\<in>pz. w p * h p * of_int (zorder f p))" . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 666 | then show ?thesis unfolding ff_def c_def w_def by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 667 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 668 | |
| 73048 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 669 | |
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 670 | subsection \<open>Coefficient asymptotics for generating functions\<close> | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 671 | |
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 672 | text \<open> | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 673 | For a formal power series that has a meromorphic continuation on some disc in the | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 674 | context plane, we can use the Residue Theorem to extract precise asymptotic information | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 675 | from the residues at the poles. This can be used to derive the asymptotic behaviour | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 676 | of the coefficients (\<open>a\<^sub>n \<sim> \<dots>\<close>). If the function is meromorphic on the entire | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 677 | complex plane, one can even derive a full asymptotic expansion. | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 678 | |
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 679 | We will first show the relationship between the coefficients and the sum over the residues | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 680 | with an explicit remainder term (the contour integral along the circle used in the | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 681 | Residue theorem). | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 682 | \<close> | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 683 | theorem | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 684 | fixes f :: "complex \<Rightarrow> complex" and n :: nat and r :: real | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 685 | defines "g \<equiv> (\<lambda>w. f w / w ^ Suc n)" and "\<gamma> \<equiv> circlepath 0 r" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 686 | assumes "open A" "connected A" "cball 0 r \<subseteq> A" "r > 0" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 687 | assumes "f holomorphic_on A - S" "S \<subseteq> ball 0 r" "finite S" "0 \<notin> S" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 688 | shows fps_coeff_conv_residues: | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 689 | "(deriv ^^ n) f 0 / fact n = | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 690 | contour_integral \<gamma> g / (2 * pi * \<i>) - (\<Sum>z\<in>S. residue g z)" (is ?thesis1) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 691 | and fps_coeff_residues_bound: | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 692 | "(\<And>z. norm z = r \<Longrightarrow> z \<notin> k \<Longrightarrow> norm (f z) \<le> C) \<Longrightarrow> C \<ge> 0 \<Longrightarrow> finite k \<Longrightarrow> | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 693 | norm ((deriv ^^ n) f 0 / fact n + (\<Sum>z\<in>S. residue g z)) \<le> C / r ^ n" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 694 | proof - | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 695 | have holo: "g holomorphic_on A - insert 0 S" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 696 | unfolding g_def using assms by (auto intro!: holomorphic_intros) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 697 | have "contour_integral \<gamma> g = 2 * pi * \<i> * (\<Sum>z\<in>insert 0 S. winding_number \<gamma> z * residue g z)" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 698 | proof (rule Residue_theorem) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 699 | show "g holomorphic_on A - insert 0 S" by fact | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 700 | from assms show "\<forall>z. z \<notin> A \<longrightarrow> winding_number \<gamma> z = 0" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 701 | unfolding \<gamma>_def by (intro allI impI winding_number_zero_outside[of _ "cball 0 r"]) auto | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 702 | qed (insert assms, auto simp: \<gamma>_def) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 703 | also have "winding_number \<gamma> z = 1" if "z \<in> insert 0 S" for z | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 704 | unfolding \<gamma>_def using assms that by (intro winding_number_circlepath) auto | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 705 | hence "(\<Sum>z\<in>insert 0 S. winding_number \<gamma> z * residue g z) = (\<Sum>z\<in>insert 0 S. residue g z)" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 706 | by (intro sum.cong) simp_all | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 707 | also have "\<dots> = residue g 0 + (\<Sum>z\<in>S. residue g z)" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 708 | using \<open>0 \<notin> S\<close> and \<open>finite S\<close> by (subst sum.insert) auto | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 709 | also from \<open>r > 0\<close> have "0 \<in> cball 0 r" by simp | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 710 | with assms have "0 \<in> A - S" by blast | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 711 | with assms have "residue g 0 = (deriv ^^ n) f 0 / fact n" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 712 | unfolding g_def by (subst residue_holomorphic_over_power'[of "A - S"]) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 713 | (auto simp: finite_imp_closed) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 714 | finally show ?thesis1 | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 715 | by (simp add: field_simps) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 716 | |
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 717 | assume C: "\<And>z. norm z = r \<Longrightarrow> z \<notin> k \<Longrightarrow> norm (f z) \<le> C" "C \<ge> 0" and k: "finite k" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 718 | have "(deriv ^^ n) f 0 / fact n + (\<Sum>z\<in>S. residue g z) = contour_integral \<gamma> g / (2 * pi * \<i>)" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 719 | using \<open>?thesis1\<close> by (simp add: algebra_simps) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 720 | also have "norm \<dots> = norm (contour_integral \<gamma> g) / (2 * pi)" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 721 | by (simp add: norm_divide norm_mult) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 722 | also have "norm (contour_integral \<gamma> g) \<le> C / r ^ Suc n * (2 * pi * r)" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 723 | proof (rule has_contour_integral_bound_circlepath_strong) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 724 | from \<open>open A\<close> and \<open>finite S\<close> have "open (A - insert 0 S)" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 725 | by (blast intro: finite_imp_closed) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 726 | with assms show "(g has_contour_integral contour_integral \<gamma> g) (circlepath 0 r)" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 727 | unfolding \<gamma>_def | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 728 | by (intro has_contour_integral_integral contour_integrable_holomorphic_simple [OF holo]) auto | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 729 | next | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 730 | fix z assume z: "norm (z - 0) = r" "z \<notin> k" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 731 | hence "norm (g z) = norm (f z) / r ^ Suc n" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 732 | by (simp add: norm_divide g_def norm_mult norm_power) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 733 | also have "\<dots> \<le> C / r ^ Suc n" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 734 | using k and \<open>r > 0\<close> and z by (intro divide_right_mono C zero_le_power) auto | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 735 | finally show "norm (g z) \<le> C / r ^ Suc n" . | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 736 | qed (insert C(2) k \<open>r > 0\<close>, auto) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 737 | also from \<open>r > 0\<close> have "C / r ^ Suc n * (2 * pi * r) / (2 * pi) = C / r ^ n" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 738 | by simp | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 739 | finally show "norm ((deriv ^^ n) f 0 / fact n + (\<Sum>z\<in>S. residue g z)) \<le> \<dots>" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 740 | by - (simp_all add: divide_right_mono) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 741 | qed | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 742 | |
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 743 | text \<open> | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 744 | Since the circle is fixed, we can get an upper bound on the values of the generating | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 745 |   function on the circle and therefore show that the integral is $O(r^{-n})$.
 | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 746 | \<close> | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 747 | corollary fps_coeff_residues_bigo: | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 748 | fixes f :: "complex \<Rightarrow> complex" and r :: real | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 749 | assumes "open A" "connected A" "cball 0 r \<subseteq> A" "r > 0" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 750 | assumes "f holomorphic_on A - S" "S \<subseteq> ball 0 r" "finite S" "0 \<notin> S" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 751 | assumes g: "eventually (\<lambda>n. g n = -(\<Sum>z\<in>S. residue (\<lambda>z. f z / z ^ Suc n) z)) sequentially" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 752 | (is "eventually (\<lambda>n. _ = -?g' n) _") | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 753 | shows "(\<lambda>n. (deriv ^^ n) f 0 / fact n - g n) \<in> O(\<lambda>n. 1 / r ^ n)" (is "(\<lambda>n. ?c n - _) \<in> O(_)") | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 754 | proof - | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 755 | from assms have "compact (f ` sphere 0 r)" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 756 | by (intro compact_continuous_image holomorphic_on_imp_continuous_on | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 757 | holomorphic_on_subset[OF \<open>f holomorphic_on A - S\<close>]) auto | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 758 | hence "bounded (f ` sphere 0 r)" by (rule compact_imp_bounded) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 759 | then obtain C where C: "\<And>z. z \<in> sphere 0 r \<Longrightarrow> norm (f z) \<le> C" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 760 | by (auto simp: bounded_iff sphere_def) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 761 | have "0 \<le> norm (f (of_real r))" by simp | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 762 | also from C[of "of_real r"] and \<open>r > 0\<close> have "\<dots> \<le> C" by simp | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 763 | finally have C_nonneg: "C \<ge> 0" . | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 764 | |
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 765 | have "(\<lambda>n. ?c n + ?g' n) \<in> O(\<lambda>n. of_real (1 / r ^ n))" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 766 | proof (intro bigoI[of _ C] always_eventually allI ) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 767 | fix n :: nat | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 768 | from assms and C and C_nonneg have "norm (?c n + ?g' n) \<le> C / r ^ n" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 769 |       by (intro fps_coeff_residues_bound[where A = A and k = "{}"]) auto
 | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 770 | also have "\<dots> = C * norm (complex_of_real (1 / r ^ n))" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 771 | using \<open>r > 0\<close> by (simp add: norm_divide norm_power) | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 772 | finally show "norm (?c n + ?g' n) \<le> \<dots>" . | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 773 | qed | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 774 | also have "?this \<longleftrightarrow> (\<lambda>n. ?c n - g n) \<in> O(\<lambda>n. of_real (1 / r ^ n))" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 775 | by (intro landau_o.big.in_cong eventually_mono[OF g]) simp_all | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 776 | finally show ?thesis . | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 777 | qed | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 778 | |
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 779 | corollary fps_coeff_residues_bigo': | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 780 | fixes f :: "complex \<Rightarrow> complex" and r :: real | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 781 | assumes exp: "f has_fps_expansion F" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 782 | assumes "open A" "connected A" "cball 0 r \<subseteq> A" "r > 0" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 783 | assumes "f holomorphic_on A - S" "S \<subseteq> ball 0 r" "finite S" "0 \<notin> S" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 784 | assumes "eventually (\<lambda>n. g n = -(\<Sum>z\<in>S. residue (\<lambda>z. f z / z ^ Suc n) z)) sequentially" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 785 | (is "eventually (\<lambda>n. _ = -?g' n) _") | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 786 | shows "(\<lambda>n. fps_nth F n - g n) \<in> O(\<lambda>n. 1 / r ^ n)" (is "(\<lambda>n. ?c n - _) \<in> O(_)") | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 787 | proof - | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 788 | have "fps_nth F = (\<lambda>n. (deriv ^^ n) f 0 / fact n)" | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 789 | using fps_nth_fps_expansion[OF exp] by (intro ext) simp_all | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 790 | with fps_coeff_residues_bigo[OF assms(2-)] show ?thesis by simp | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 791 | qed | 
| 
7ad9f197ca7e
HOL-Complex_Analysis: coefficient asymptotics for meromorphic functions
 Manuel Eberl <eberlm@in.tum.de> parents: 
71201diff
changeset | 792 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 793 | subsection \<open>Rouche's theorem \<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 794 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 795 | theorem Rouche_theorem: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 796 | fixes f g::"complex \<Rightarrow> complex" and s:: "complex set" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 797 | defines "fg\<equiv>(\<lambda>p. f p + g p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 798 |   defines "zeros_fg\<equiv>{p. fg p = 0}" and "zeros_f\<equiv>{p. f p = 0}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 799 | assumes | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 800 | "open s" and "connected s" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 801 | "finite zeros_fg" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 802 | "finite zeros_f" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 803 | f_holo:"f holomorphic_on s" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 804 | g_holo:"g holomorphic_on s" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 805 | "valid_path \<gamma>" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 806 | loop:"pathfinish \<gamma> = pathstart \<gamma>" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 807 | path_img:"path_image \<gamma> \<subseteq> s " and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 808 | path_less:"\<forall>z\<in>path_image \<gamma>. cmod(f z) > cmod(g z)" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 809 | homo:"\<forall>z. (z \<notin> s) \<longrightarrow> winding_number \<gamma> z = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 810 | shows "(\<Sum>p\<in>zeros_fg. winding_number \<gamma> p * zorder fg p) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 811 | = (\<Sum>p\<in>zeros_f. winding_number \<gamma> p * zorder f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 812 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 813 | have path_fg:"path_image \<gamma> \<subseteq> s - zeros_fg" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 814 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 815 | have False when "z\<in>path_image \<gamma>" and "f z + g z=0" for z | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 816 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 817 | have "cmod (f z) > cmod (g z)" using \<open>z\<in>path_image \<gamma>\<close> path_less by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 818 | moreover have "f z = - g z" using \<open>f z + g z =0\<close> by (simp add: eq_neg_iff_add_eq_0) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 819 | then have "cmod (f z) = cmod (g z)" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 820 | ultimately show False by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 821 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 822 | then show ?thesis unfolding zeros_fg_def fg_def using path_img by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 823 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 824 | have path_f:"path_image \<gamma> \<subseteq> s - zeros_f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 825 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 826 | have False when "z\<in>path_image \<gamma>" and "f z =0" for z | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 827 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 828 | have "cmod (g z) < cmod (f z) " using \<open>z\<in>path_image \<gamma>\<close> path_less by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 829 | then have "cmod (g z) < 0" using \<open>f z=0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 830 | then show False by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 831 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 832 | then show ?thesis unfolding zeros_f_def using path_img by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 833 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 834 | define w where "w \<equiv> \<lambda>p. winding_number \<gamma> p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 835 | define c where "c \<equiv> 2 * complex_of_real pi * \<i>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 836 | define h where "h \<equiv> \<lambda>p. g p / f p + 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 837 | obtain spikes | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 838 |     where "finite spikes" and spikes: "\<forall>x\<in>{0..1} - spikes. \<gamma> differentiable at x"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 839 | using \<open>valid_path \<gamma>\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 840 | by (auto simp: valid_path_def piecewise_C1_differentiable_on_def C1_differentiable_on_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 841 | have h_contour:"((\<lambda>x. deriv h x / h x) has_contour_integral 0) \<gamma>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 842 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 843 | have outside_img:"0 \<in> outside (path_image (h o \<gamma>))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 844 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 845 | have "h p \<in> ball 1 1" when "p\<in>path_image \<gamma>" for p | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 846 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 847 | have "cmod (g p/f p) <1" using path_less[rule_format,OF that] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 848 | apply (cases "cmod (f p) = 0") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 849 | by (auto simp add: norm_divide) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 850 | then show ?thesis unfolding h_def by (auto simp add:dist_complex_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 851 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 852 | then have "path_image (h o \<gamma>) \<subseteq> ball 1 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 853 | by (simp add: image_subset_iff path_image_compose) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 854 | moreover have " (0::complex) \<notin> ball 1 1" by (simp add: dist_norm) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 855 | ultimately show "?thesis" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 856 | using convex_in_outside[of "ball 1 1" 0] outside_mono by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 857 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 858 | have valid_h:"valid_path (h \<circ> \<gamma>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 859 | proof (rule valid_path_compose_holomorphic[OF \<open>valid_path \<gamma>\<close> _ _ path_f]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 860 | show "h holomorphic_on s - zeros_f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 861 | unfolding h_def using f_holo g_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 862 | by (auto intro!: holomorphic_intros simp add:zeros_f_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 863 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 864 | show "open (s - zeros_f)" using \<open>finite zeros_f\<close> \<open>open s\<close> finite_imp_closed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 865 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 866 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 867 | have "((\<lambda>z. 1/z) has_contour_integral 0) (h \<circ> \<gamma>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 868 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 869 | have "0 \<notin> path_image (h \<circ> \<gamma>)" using outside_img by (simp add: outside_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 870 | then have "((\<lambda>z. 1/z) has_contour_integral c * winding_number (h \<circ> \<gamma>) 0) (h \<circ> \<gamma>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 871 | using has_contour_integral_winding_number[of "h o \<gamma>" 0,simplified] valid_h | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 872 | unfolding c_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 873 | moreover have "winding_number (h o \<gamma>) 0 = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 874 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 875 | have "0 \<in> outside (path_image (h \<circ> \<gamma>))" using outside_img . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 876 | moreover have "path (h o \<gamma>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 877 | using valid_h by (simp add: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 878 | moreover have "pathfinish (h o \<gamma>) = pathstart (h o \<gamma>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 879 | by (simp add: loop pathfinish_compose pathstart_compose) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 880 | ultimately show ?thesis using winding_number_zero_in_outside by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 881 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 882 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 883 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 884 | moreover have "vector_derivative (h \<circ> \<gamma>) (at x) = vector_derivative \<gamma> (at x) * deriv h (\<gamma> x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 885 |       when "x\<in>{0..1} - spikes" for x
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 886 | proof (rule vector_derivative_chain_at_general) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 887 | show "\<gamma> differentiable at x" using that \<open>valid_path \<gamma>\<close> spikes by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 888 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 889 | define der where "der \<equiv> \<lambda>p. (deriv g p * f p - g p * deriv f p)/(f p * f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 890 | define t where "t \<equiv> \<gamma> x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 891 | have "f t\<noteq>0" unfolding zeros_f_def t_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 892 | by (metis DiffD1 image_eqI norm_not_less_zero norm_zero path_defs(4) path_less that) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 893 | moreover have "t\<in>s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 894 | using contra_subsetD path_image_def path_fg t_def that by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 895 | ultimately have "(h has_field_derivative der t) (at t)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 896 | unfolding h_def der_def using g_holo f_holo \<open>open s\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 897 | by (auto intro!: holomorphic_derivI derivative_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 898 | then show "h field_differentiable at (\<gamma> x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 899 | unfolding t_def field_differentiable_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 900 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 901 | then have " ((/) 1 has_contour_integral 0) (h \<circ> \<gamma>) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 902 | = ((\<lambda>x. deriv h x / h x) has_contour_integral 0) \<gamma>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 903 | unfolding has_contour_integral | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 904 | apply (intro has_integral_spike_eq[OF negligible_finite, OF \<open>finite spikes\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 905 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 906 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 907 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 908 | then have "contour_integral \<gamma> (\<lambda>x. deriv h x / h x) = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 909 | using contour_integral_unique by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 910 | moreover have "contour_integral \<gamma> (\<lambda>x. deriv fg x / fg x) = contour_integral \<gamma> (\<lambda>x. deriv f x / f x) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 911 | + contour_integral \<gamma> (\<lambda>p. deriv h p / h p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 912 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 913 | have "(\<lambda>p. deriv f p / f p) contour_integrable_on \<gamma>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 914 | proof (rule contour_integrable_holomorphic_simple[OF _ _ \<open>valid_path \<gamma>\<close> path_f]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 915 | show "open (s - zeros_f)" using finite_imp_closed[OF \<open>finite zeros_f\<close>] \<open>open s\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 916 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 917 | then show "(\<lambda>p. deriv f p / f p) holomorphic_on s - zeros_f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 918 | using f_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 919 | by (auto intro!: holomorphic_intros simp add:zeros_f_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 920 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 921 | moreover have "(\<lambda>p. deriv h p / h p) contour_integrable_on \<gamma>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 922 | using h_contour | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 923 | by (simp add: has_contour_integral_integrable) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 924 | ultimately have "contour_integral \<gamma> (\<lambda>x. deriv f x / f x + deriv h x / h x) = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 925 | contour_integral \<gamma> (\<lambda>p. deriv f p / f p) + contour_integral \<gamma> (\<lambda>p. deriv h p / h p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 926 | using contour_integral_add[of "(\<lambda>p. deriv f p / f p)" \<gamma> "(\<lambda>p. deriv h p / h p)" ] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 927 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 928 | moreover have "deriv fg p / fg p = deriv f p / f p + deriv h p / h p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 929 | when "p\<in> path_image \<gamma>" for p | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 930 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 931 | have "fg p\<noteq>0" and "f p\<noteq>0" using path_f path_fg that unfolding zeros_f_def zeros_fg_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 932 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 933 | have "h p\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 934 | proof (rule ccontr) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 935 | assume "\<not> h p \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 936 | then have "g p / f p= -1" unfolding h_def by (simp add: add_eq_0_iff2) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 937 | then have "cmod (g p/f p) = 1" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 938 | moreover have "cmod (g p/f p) <1" using path_less[rule_format,OF that] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 939 | apply (cases "cmod (f p) = 0") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 940 | by (auto simp add: norm_divide) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 941 | ultimately show False by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 942 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 943 | have der_fg:"deriv fg p = deriv f p + deriv g p" unfolding fg_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 944 | using f_holo g_holo holomorphic_on_imp_differentiable_at[OF _ \<open>open s\<close>] path_img that | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 945 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 946 | have der_h:"deriv h p = (deriv g p * f p - g p * deriv f p)/(f p * f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 947 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 948 | define der where "der \<equiv> \<lambda>p. (deriv g p * f p - g p * deriv f p)/(f p * f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 949 | have "p\<in>s" using path_img that by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 950 | then have "(h has_field_derivative der p) (at p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 951 | unfolding h_def der_def using g_holo f_holo \<open>open s\<close> \<open>f p\<noteq>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 952 | by (auto intro!: derivative_eq_intros holomorphic_derivI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 953 | then show ?thesis unfolding der_def using DERIV_imp_deriv by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 954 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 955 | show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 956 | apply (simp only:der_fg der_h) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 957 | apply (auto simp add:field_simps \<open>h p\<noteq>0\<close> \<open>f p\<noteq>0\<close> \<open>fg p\<noteq>0\<close>) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 958 | by (auto simp add:field_simps h_def \<open>f p\<noteq>0\<close> fg_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 959 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 960 | then have "contour_integral \<gamma> (\<lambda>p. deriv fg p / fg p) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 961 | = contour_integral \<gamma> (\<lambda>p. deriv f p / f p + deriv h p / h p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 962 | by (elim contour_integral_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 963 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 964 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 965 | moreover have "contour_integral \<gamma> (\<lambda>x. deriv fg x / fg x) = c * (\<Sum>p\<in>zeros_fg. w p * zorder fg p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 966 | unfolding c_def zeros_fg_def w_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 967 | proof (rule argument_principle[OF \<open>open s\<close> \<open>connected s\<close> _ _ \<open>valid_path \<gamma>\<close> loop _ homo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 968 |         , of _ "{}" "\<lambda>_. 1",simplified])
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 969 | show "fg holomorphic_on s" unfolding fg_def using f_holo g_holo holomorphic_on_add by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 970 |     show "path_image \<gamma> \<subseteq> s - {p. fg p = 0}" using path_fg unfolding zeros_fg_def .
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 971 |     show " finite {p. fg p = 0}" using \<open>finite zeros_fg\<close> unfolding zeros_fg_def .
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 972 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 973 | moreover have "contour_integral \<gamma> (\<lambda>x. deriv f x / f x) = c * (\<Sum>p\<in>zeros_f. w p * zorder f p)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 974 | unfolding c_def zeros_f_def w_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 975 | proof (rule argument_principle[OF \<open>open s\<close> \<open>connected s\<close> _ _ \<open>valid_path \<gamma>\<close> loop _ homo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 976 |         , of _ "{}" "\<lambda>_. 1",simplified])
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 977 | show "f holomorphic_on s" using f_holo g_holo holomorphic_on_add by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 978 |     show "path_image \<gamma> \<subseteq> s - {p. f p = 0}" using path_f unfolding zeros_f_def .
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 979 |     show " finite {p. f p = 0}" using \<open>finite zeros_f\<close> unfolding zeros_f_def .
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 980 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 981 | ultimately have " c* (\<Sum>p\<in>zeros_fg. w p * (zorder fg p)) = c* (\<Sum>p\<in>zeros_f. w p * (zorder f p))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 982 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 983 | then show ?thesis unfolding c_def using w_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 984 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 985 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 986 | end |