| author | Fabian Huch <huch@in.tum.de> | 
| Fri, 05 Jul 2024 10:38:17 +0200 | |
| changeset 80502 | db89ef6a8a42 | 
| parent 74362 | 0135a0c77b64 | 
| child 82529 | ff4b062aae57 | 
| permissions | -rw-r--r-- | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1 | theory Complex_Residues | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2 | imports Complex_Singularities | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3 | begin | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 5 | subsection \<open>Definition of residues\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 6 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 7 | text\<open>Wenda Li and LC Paulson (2016). A Formal Proof of Cauchy's Residue Theorem. | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 8 | Interactive Theorem Proving\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 9 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 10 | definition\<^marker>\<open>tag important\<close> residue :: "(complex \<Rightarrow> complex) \<Rightarrow> complex \<Rightarrow> complex" where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 11 | "residue f z = (SOME int. \<exists>e>0. \<forall>\<epsilon>>0. \<epsilon><e | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 12 | \<longrightarrow> (f has_contour_integral 2*pi* \<i> *int) (circlepath z \<epsilon>))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 13 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 14 | lemma residue_cong: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 15 | assumes eq: "eventually (\<lambda>z. f z = g z) (at z)" and "z = z'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 16 | shows "residue f z = residue g z'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 17 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 18 | from assms have eq': "eventually (\<lambda>z. g z = f z) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 19 | by (simp add: eq_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 20 | let ?P = "\<lambda>f c e. (\<forall>\<epsilon>>0. \<epsilon> < e \<longrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 21 | (f has_contour_integral of_real (2 * pi) * \<i> * c) (circlepath z \<epsilon>))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 22 | have "residue f z = residue g z" unfolding residue_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 23 | proof (rule Eps_cong) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 24 | fix c :: complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 25 | have "\<exists>e>0. ?P g c e" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 26 | if "\<exists>e>0. ?P f c e" and "eventually (\<lambda>z. f z = g z) (at z)" for f g | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 27 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 28 | from that(1) obtain e where e: "e > 0" "?P f c e" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 29 | by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 30 | from that(2) obtain e' where e': "e' > 0" "\<And>z'. z' \<noteq> z \<Longrightarrow> dist z' z < e' \<Longrightarrow> f z' = g z'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 31 | unfolding eventually_at by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 32 | have "?P g c (min e e')" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 33 | proof (intro allI exI impI, goal_cases) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 34 | case (1 \<epsilon>) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 35 | hence "(f has_contour_integral of_real (2 * pi) * \<i> * c) (circlepath z \<epsilon>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 36 | using e(2) by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 37 | thus ?case | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 38 | proof (rule has_contour_integral_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 39 | fix z' assume "z' \<in> path_image (circlepath z \<epsilon>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 40 | hence "dist z' z < e'" and "z' \<noteq> z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 41 | using 1 by (auto simp: dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 42 | with e'(2)[of z'] show "f z' = g z'" by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 43 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 44 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 45 | moreover from e and e' have "min e e' > 0" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 46 | ultimately show ?thesis by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 47 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 48 | from this[OF _ eq] and this[OF _ eq'] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 49 | show "(\<exists>e>0. ?P f c e) \<longleftrightarrow> (\<exists>e>0. ?P g c e)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 50 | by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 51 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 52 | with assms show ?thesis by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 53 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 54 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 55 | lemma contour_integral_circlepath_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 56 |   assumes "open s" and f_holo:"f holomorphic_on (s-{z})" and "0<e1" "e1\<le>e2"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 57 | and e2_cball:"cball z e2 \<subseteq> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 58 | shows | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 59 | "f contour_integrable_on circlepath z e1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 60 | "f contour_integrable_on circlepath z e2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 61 | "contour_integral (circlepath z e2) f = contour_integral (circlepath z e1) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 62 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 63 | define l where "l \<equiv> linepath (z+e2) (z+e1)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 64 | have [simp]:"valid_path l" "pathstart l=z+e2" "pathfinish l=z+e1" unfolding l_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 65 | have "e2>0" using \<open>e1>0\<close> \<open>e1\<le>e2\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 66 | have zl_img:"z\<notin>path_image l" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 67 | proof | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 68 | assume "z \<in> path_image l" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 69 | then have "e2 \<le> cmod (e2 - e1)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 70 | using segment_furthest_le[of z "z+e2" "z+e1" "z+e2",simplified] \<open>e1>0\<close> \<open>e2>0\<close> unfolding l_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 71 | by (auto simp add:closed_segment_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 72 | thus False using \<open>e2>0\<close> \<open>e1>0\<close> \<open>e1\<le>e2\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 73 | apply (subst (asm) norm_of_real) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 74 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 75 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 76 | define g where "g \<equiv> circlepath z e2 +++ l +++ reversepath (circlepath z e1) +++ reversepath l" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 77 | show [simp]: "f contour_integrable_on circlepath z e2" "f contour_integrable_on (circlepath z e1)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 78 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 79 | show "f contour_integrable_on circlepath z e2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 80 | apply (intro contour_integrable_continuous_circlepath[OF | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 81 | continuous_on_subset[OF holomorphic_on_imp_continuous_on[OF f_holo]]]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 82 | using \<open>e2>0\<close> e2_cball by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 83 | show "f contour_integrable_on (circlepath z e1)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 84 | apply (intro contour_integrable_continuous_circlepath[OF | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 85 | continuous_on_subset[OF holomorphic_on_imp_continuous_on[OF f_holo]]]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 86 | using \<open>e1>0\<close> \<open>e1\<le>e2\<close> e2_cball by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 87 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 88 | have [simp]:"f contour_integrable_on l" | 
| 
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 "closed_segment (z + e2) (z + e1) \<subseteq> cball z e2" using \<open>e2>0\<close> \<open>e1>0\<close> \<open>e1\<le>e2\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 91 | by (intro closed_segment_subset,auto simp add:dist_norm) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 92 |       hence "closed_segment (z + e2) (z + e1) \<subseteq> s - {z}" using zl_img e2_cball unfolding l_def
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 93 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 94 | then show "f contour_integrable_on l" unfolding l_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 95 | apply (intro contour_integrable_continuous_linepath[OF | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 96 | continuous_on_subset[OF holomorphic_on_imp_continuous_on[OF f_holo]]]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 97 | by auto | 
| 
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 | let ?ig="\<lambda>g. contour_integral g f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 100 | have "(f has_contour_integral 0) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 101 | proof (rule Cauchy_theorem_global[OF _ f_holo]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 102 |       show "open (s - {z})" using \<open>open s\<close> by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 103 | show "valid_path g" unfolding g_def l_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 104 | show "pathfinish g = pathstart g" unfolding g_def l_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 105 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 106 | have path_img:"path_image g \<subseteq> cball z e2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 107 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 108 | have "closed_segment (z + e2) (z + e1) \<subseteq> cball z e2" using \<open>e2>0\<close> \<open>e1>0\<close> \<open>e1\<le>e2\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 109 | by (intro closed_segment_subset,auto simp add:dist_norm) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 110 | moreover have "sphere z \<bar>e1\<bar> \<subseteq> cball z e2" using \<open>e2>0\<close> \<open>e1\<le>e2\<close> \<open>e1>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 111 | ultimately show ?thesis unfolding g_def l_def using \<open>e2>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 112 | by (simp add: path_image_join closed_segment_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 113 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 114 |       show "path_image g \<subseteq> s - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 115 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 116 | have "z\<notin>path_image g" using zl_img | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 117 | unfolding g_def l_def by (auto simp add: path_image_join closed_segment_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 118 | moreover note \<open>cball z e2 \<subseteq> s\<close> and path_img | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 119 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 120 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 121 |       show "winding_number g w = 0" when"w \<notin> s - {z}" for w
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 122 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 123 | have "winding_number g w = 0" when "w\<notin>s" using that e2_cball | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 124 | apply (intro winding_number_zero_outside[OF _ _ _ _ path_img]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 125 | by (auto simp add:g_def l_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 126 | moreover have "winding_number g z=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 127 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 128 | let ?Wz="\<lambda>g. winding_number g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 129 | have "?Wz g = ?Wz (circlepath z e2) + ?Wz l + ?Wz (reversepath (circlepath z e1)) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 130 | + ?Wz (reversepath l)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 131 | using \<open>e2>0\<close> \<open>e1>0\<close> zl_img unfolding g_def l_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 132 | by (subst winding_number_join,auto simp add:path_image_join closed_segment_commute)+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 133 | also have "... = ?Wz (circlepath z e2) + ?Wz (reversepath (circlepath z e1))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 134 | using zl_img | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 135 | apply (subst (2) winding_number_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 136 | by (auto simp add:l_def closed_segment_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 137 | also have "... = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 138 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 139 | have "?Wz (circlepath z e2) = 1" using \<open>e2>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 140 | by (auto intro: winding_number_circlepath_centre) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 141 | moreover have "?Wz (reversepath (circlepath z e1)) = -1" using \<open>e1>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 142 | apply (subst winding_number_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 143 | by (auto intro: winding_number_circlepath_centre) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 144 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 145 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 146 | finally show ?thesis . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 147 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 148 | ultimately show ?thesis using that by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 149 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 150 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 151 | then have "0 = ?ig g" using contour_integral_unique by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 152 | also have "... = ?ig (circlepath z e2) + ?ig l + ?ig (reversepath (circlepath z e1)) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 153 | + ?ig (reversepath l)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 154 | unfolding g_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 155 | by (auto simp add:contour_integrable_reversepath_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 156 | also have "... = ?ig (circlepath z e2) - ?ig (circlepath z e1)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 157 | by (auto simp add:contour_integral_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 158 | finally show "contour_integral (circlepath z e2) f = contour_integral (circlepath z e1) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 159 | by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 160 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 161 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 162 | lemma base_residue: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 163 |   assumes "open s" "z\<in>s" "r>0" and f_holo:"f holomorphic_on (s - {z})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 164 | and r_cball:"cball z r \<subseteq> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 165 | shows "(f has_contour_integral 2 * pi * \<i> * (residue f z)) (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 166 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 167 | obtain e where "e>0" and e_cball:"cball z e \<subseteq> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 168 | using open_contains_cball[of s] \<open>open s\<close> \<open>z\<in>s\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 169 | define c where "c \<equiv> 2 * pi * \<i>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 170 | define i where "i \<equiv> contour_integral (circlepath z e) f / c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 171 | have "(f has_contour_integral c*i) (circlepath z \<epsilon>)" when "\<epsilon>>0" "\<epsilon><e" for \<epsilon> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 172 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 173 | have "contour_integral (circlepath z e) f = contour_integral (circlepath z \<epsilon>) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 174 | "f contour_integrable_on circlepath z \<epsilon>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 175 | "f contour_integrable_on circlepath z e" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 176 | using \<open>\<epsilon><e\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 177 | by (intro contour_integral_circlepath_eq[OF \<open>open s\<close> f_holo \<open>\<epsilon>>0\<close> _ e_cball],auto)+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 178 | then show ?thesis unfolding i_def c_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 179 | by (auto intro:has_contour_integral_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 180 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 181 | then have "\<exists>e>0. \<forall>\<epsilon>>0. \<epsilon><e \<longrightarrow> (f has_contour_integral c * (residue f z)) (circlepath z \<epsilon>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 182 | unfolding residue_def c_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 183 | apply (rule_tac someI[of _ i],intro exI[where x=e]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 184 | by (auto simp add:\<open>e>0\<close> c_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 185 | then obtain e' where "e'>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 186 | and e'_def:"\<forall>\<epsilon>>0. \<epsilon><e' \<longrightarrow> (f has_contour_integral c * (residue f z)) (circlepath z \<epsilon>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 187 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 188 | let ?int="\<lambda>e. contour_integral (circlepath z e) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 189 |   define  \<epsilon> where "\<epsilon> \<equiv> Min {r,e'} / 2"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 190 | have "\<epsilon>>0" "\<epsilon>\<le>r" "\<epsilon><e'" using \<open>r>0\<close> \<open>e'>0\<close> unfolding \<epsilon>_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 191 | have "(f has_contour_integral c * (residue f z)) (circlepath z \<epsilon>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 192 | using e'_def[rule_format,OF \<open>\<epsilon>>0\<close> \<open>\<epsilon><e'\<close>] . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 193 | then show ?thesis unfolding c_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 194 | using contour_integral_circlepath_eq[OF \<open>open s\<close> f_holo \<open>\<epsilon>>0\<close> \<open>\<epsilon>\<le>r\<close> r_cball] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 195 | by (auto elim: has_contour_integral_eqpath[of _ _ "circlepath z \<epsilon>" "circlepath z r"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 196 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 197 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 198 | lemma residue_holo: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 199 | assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 200 | shows "residue f z = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 201 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 202 | define c where "c \<equiv> 2 * pi * \<i>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 203 | obtain e where "e>0" and e_cball:"cball z e \<subseteq> s" using \<open>open s\<close> \<open>z\<in>s\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 204 | using open_contains_cball_eq by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 205 | have "(f has_contour_integral c*residue f z) (circlepath z e)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 206 | using f_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 207 | by (auto intro: base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 208 | moreover have "(f has_contour_integral 0) (circlepath z e)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 209 | using f_holo e_cball \<open>e>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 210 | by (auto intro: Cauchy_theorem_convex_simple[of _ "cball z e"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 211 | ultimately have "c*residue f z =0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 212 | using has_contour_integral_unique by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 213 | thus ?thesis unfolding c_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 214 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 215 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 216 | lemma residue_const:"residue (\<lambda>_. c) z = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 217 | by (intro residue_holo[of "UNIV::complex set"],auto intro:holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 218 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 219 | lemma residue_add: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 220 |   assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 221 |       and g_holo:"g holomorphic_on s - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 222 | shows "residue (\<lambda>z. f z + g z) z= residue f z + residue g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 223 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 224 | define c where "c \<equiv> 2 * pi * \<i>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 225 | define fg where "fg \<equiv> (\<lambda>z. f z+g z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 226 | obtain e where "e>0" and e_cball:"cball z e \<subseteq> s" using \<open>open s\<close> \<open>z\<in>s\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 227 | using open_contains_cball_eq by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 228 | have "(fg has_contour_integral c * residue fg z) (circlepath z e)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 229 | unfolding fg_def using f_holo g_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 230 | apply (intro base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 231 | by (auto intro:holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 232 | moreover have "(fg has_contour_integral c*residue f z + c* residue g z) (circlepath z e)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 233 | unfolding fg_def using f_holo g_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 234 | by (auto intro: has_contour_integral_add base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 235 | ultimately have "c*(residue f z + residue g z) = c * residue fg z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 236 | using has_contour_integral_unique by (auto simp add:distrib_left) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 237 | thus ?thesis unfolding fg_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 238 | by (auto simp add:c_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 239 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 240 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 241 | lemma residue_lmul: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 242 |   assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 243 | shows "residue (\<lambda>z. c * (f z)) z= c * residue f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 244 | proof (cases "c=0") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 245 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 246 | thus ?thesis using residue_const by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 247 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 248 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 249 | define c' where "c' \<equiv> 2 * pi * \<i>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 250 | define f' where "f' \<equiv> (\<lambda>z. c * (f z))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 251 | obtain e where "e>0" and e_cball:"cball z e \<subseteq> s" using \<open>open s\<close> \<open>z\<in>s\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 252 | using open_contains_cball_eq by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 253 | have "(f' has_contour_integral c' * residue f' z) (circlepath z e)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 254 | unfolding f'_def using f_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 255 | apply (intro base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c'_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 256 | by (auto intro:holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 257 | moreover have "(f' has_contour_integral c * (c' * residue f z)) (circlepath z e)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 258 | unfolding f'_def using f_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 259 | by (auto intro: has_contour_integral_lmul | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 260 | base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c'_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 261 | ultimately have "c' * residue f' z = c * (c' * residue f z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 262 | using has_contour_integral_unique by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 263 | thus ?thesis unfolding f'_def c'_def using False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 264 | by (auto simp add:field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 265 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 266 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 267 | lemma residue_rmul: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 268 |   assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 269 | shows "residue (\<lambda>z. (f z) * c) z= residue f z * c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 270 | using residue_lmul[OF assms,of c] by (auto simp add:algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 271 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 272 | lemma residue_div: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 273 |   assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 274 | shows "residue (\<lambda>z. (f z) / c) z= residue f z / c " | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 275 | using residue_lmul[OF assms,of "1/c"] by (auto simp add:algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 276 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 277 | lemma residue_neg: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 278 |   assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 279 | shows "residue (\<lambda>z. - (f z)) z= - residue f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 280 | using residue_lmul[OF assms,of "-1"] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 281 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 282 | lemma residue_diff: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 283 |   assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 284 |       and g_holo:"g holomorphic_on s - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 285 | shows "residue (\<lambda>z. f z - g z) z= residue f z - residue g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 286 | using residue_add[OF assms(1,2,3),of "\<lambda>z. - g z"] residue_neg[OF assms(1,2,4)] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 287 | by (auto intro:holomorphic_intros g_holo) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 288 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 289 | lemma residue_simple: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 290 | assumes "open s" "z\<in>s" and f_holo:"f holomorphic_on s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 291 | shows "residue (\<lambda>w. f w / (w - z)) z = f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 292 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 293 | define c where "c \<equiv> 2 * pi * \<i>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 294 | define f' where "f' \<equiv> \<lambda>w. f w / (w - z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 295 | obtain e where "e>0" and e_cball:"cball z e \<subseteq> s" using \<open>open s\<close> \<open>z\<in>s\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 296 | using open_contains_cball_eq by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 297 | have "(f' has_contour_integral c * f z) (circlepath z e)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 298 | unfolding f'_def c_def using \<open>e>0\<close> f_holo e_cball | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 299 | by (auto intro!: Cauchy_integral_circlepath_simple holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 300 | moreover have "(f' has_contour_integral c * residue f' z) (circlepath z e)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 301 | unfolding f'_def using f_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 302 | apply (intro base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 303 | by (auto intro!:holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 304 | ultimately have "c * f z = c * residue f' z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 305 | using has_contour_integral_unique by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 306 | thus ?thesis unfolding c_def f'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 307 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 308 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 309 | lemma residue_simple': | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 310 |   assumes s: "open s" "z \<in> s" and holo: "f holomorphic_on (s - {z})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 311 | and lim: "((\<lambda>w. f w * (w - z)) \<longlongrightarrow> c) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 312 | shows "residue f z = c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 313 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 314 | define g where "g = (\<lambda>w. if w = z then c else f w * (w - z))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 315 |   from holo have "(\<lambda>w. f w * (w - z)) holomorphic_on (s - {z})" (is "?P")
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 316 | by (force intro: holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 317 |   also have "?P \<longleftrightarrow> g holomorphic_on (s - {z})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 318 | by (intro holomorphic_cong refl) (simp_all add: g_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 319 |   finally have *: "g holomorphic_on (s - {z})" .
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 320 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 321 | note lim | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 322 | also have "(\<lambda>w. f w * (w - z)) \<midarrow>z\<rightarrow> c \<longleftrightarrow> g \<midarrow>z\<rightarrow> g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 323 | by (intro filterlim_cong refl) (simp_all add: g_def [abs_def] eventually_at_filter) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 324 | finally have **: "g \<midarrow>z\<rightarrow> g z" . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 325 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 326 | have g_holo: "g holomorphic_on s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 327 |     by (rule no_isolated_singularity'[where K = "{z}"])
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 328 | (insert assms * **, simp_all add: at_within_open_NO_MATCH) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 329 | from s and this have "residue (\<lambda>w. g w / (w - z)) z = g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 330 | by (rule residue_simple) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 331 | also have "\<forall>\<^sub>F za in at z. g za / (za - z) = f za" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 332 | unfolding eventually_at by (auto intro!: exI[of _ 1] simp: field_simps g_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 333 | hence "residue (\<lambda>w. g w / (w - z)) z = residue f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 334 | by (intro residue_cong refl) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 335 | finally show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 336 | by (simp add: g_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 337 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 338 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 339 | lemma residue_holomorphic_over_power: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 340 | assumes "open A" "z0 \<in> A" "f holomorphic_on A" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 341 | shows "residue (\<lambda>z. f z / (z - z0) ^ Suc n) z0 = (deriv ^^ n) f z0 / fact n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 342 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 343 | let ?f = "\<lambda>z. f z / (z - z0) ^ Suc n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 344 | from assms(1,2) obtain r where r: "r > 0" "cball z0 r \<subseteq> A" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 345 | by (auto simp: open_contains_cball) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 346 | have "(?f has_contour_integral 2 * pi * \<i> * residue ?f z0) (circlepath z0 r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 347 | using r assms by (intro base_residue[of A]) (auto intro!: holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 348 | moreover have "(?f has_contour_integral 2 * pi * \<i> / fact n * (deriv ^^ n) f z0) (circlepath z0 r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 349 | using assms r | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 350 | by (intro Cauchy_has_contour_integral_higher_derivative_circlepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 351 | (auto intro!: holomorphic_on_subset[OF assms(3)] holomorphic_on_imp_continuous_on) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 352 | ultimately have "2 * pi * \<i> * residue ?f z0 = 2 * pi * \<i> / fact n * (deriv ^^ n) f z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 353 | by (rule has_contour_integral_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 354 | thus ?thesis by (simp add: field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 355 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 356 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 357 | lemma residue_holomorphic_over_power': | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 358 | assumes "open A" "0 \<in> A" "f holomorphic_on A" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 359 | shows "residue (\<lambda>z. f z / z ^ Suc n) 0 = (deriv ^^ n) f 0 / fact n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 360 | using residue_holomorphic_over_power[OF assms] by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 361 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 362 | theorem residue_fps_expansion_over_power_at_0: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 363 | assumes "f has_fps_expansion F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 364 | shows "residue (\<lambda>z. f z / z ^ Suc n) 0 = fps_nth F n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 365 | proof - | 
| 74362 | 366 | from has_fps_expansion_imp_holomorphic[OF assms] obtain s | 
| 367 | where "open s" "0 \<in> s" "f holomorphic_on s" "\<And>z. z \<in> s \<Longrightarrow> f z = eval_fps F z" | |
| 368 | by auto | |
| 369 | with assms have "residue (\<lambda>z. f z / (z - 0) ^ Suc n) 0 = (deriv ^^ n) f 0 / fact n" | |
| 370 | unfolding has_fps_expansion_def | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 371 | by (intro residue_holomorphic_over_power[of s]) (auto simp: zero_ereal_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 372 | also from assms have "\<dots> = fps_nth F n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 373 | by (subst fps_nth_fps_expansion) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 374 | finally show ?thesis by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 375 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 376 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 377 | lemma residue_pole_order: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 378 | fixes f::"complex \<Rightarrow> complex" and z::complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 379 | defines "n \<equiv> nat (- zorder f z)" and "h \<equiv> zor_poly f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 380 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 381 | and pole:"is_pole f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 382 | shows "residue f z = ((deriv ^^ (n - 1)) h z / fact (n-1))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 383 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 384 | define g where "g \<equiv> \<lambda>x. if x=z then 0 else inverse (f x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 385 |   obtain e where [simp]:"e>0" and f_holo:"f holomorphic_on ball z e - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 386 | using f_iso analytic_imp_holomorphic unfolding isolated_singularity_at_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 387 | obtain r where "0 < n" "0 < r" and r_cball:"cball z r \<subseteq> ball z e" and h_holo: "h holomorphic_on cball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 388 | and h_divide:"(\<forall>w\<in>cball z r. (w\<noteq>z \<longrightarrow> f w = h w / (w - z) ^ n) \<and> h w \<noteq> 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 389 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 390 | obtain r where r:"zorder f z < 0" "h z \<noteq> 0" "r>0" "cball z r \<subseteq> ball z e" "h holomorphic_on cball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 391 |         "(\<forall>w\<in>cball z r - {z}. f w = h w / (w - z) ^ n \<and> h w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 392 | using zorder_exist_pole[OF f_holo,simplified,OF \<open>is_pole f z\<close>,folded n_def h_def] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 393 | have "n>0" using \<open>zorder f z < 0\<close> unfolding n_def by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 394 | moreover have "(\<forall>w\<in>cball z r. (w\<noteq>z \<longrightarrow> f w = h w / (w - z) ^ n) \<and> h w \<noteq> 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 395 | using \<open>h z\<noteq>0\<close> r(6) by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 396 | ultimately show ?thesis using r(3,4,5) that by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 397 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 398 |   have r_nonzero:"\<And>w. w \<in> ball z r - {z} \<Longrightarrow> f w \<noteq> 0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 399 | using h_divide by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 400 | define c where "c \<equiv> 2 * pi * \<i>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 401 | define der_f where "der_f \<equiv> ((deriv ^^ (n - 1)) h z / fact (n-1))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 402 | define h' where "h' \<equiv> \<lambda>u. h u / (u - z) ^ n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 403 | have "(h' has_contour_integral c / fact (n - 1) * (deriv ^^ (n - 1)) h z) (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 404 | unfolding h'_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 405 | proof (rule Cauchy_has_contour_integral_higher_derivative_circlepath[of z r h z "n-1", | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 406 | folded c_def Suc_pred'[OF \<open>n>0\<close>]]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 407 | show "continuous_on (cball z r) h" using holomorphic_on_imp_continuous_on h_holo by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 408 | show "h holomorphic_on ball z r" using h_holo by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 409 | show " z \<in> ball z r" using \<open>r>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 410 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 411 | then have "(h' has_contour_integral c * der_f) (circlepath z r)" unfolding der_f_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 412 | then have "(f has_contour_integral c * der_f) (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 413 | proof (elim has_contour_integral_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 414 | fix x assume "x \<in> path_image (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 415 |       hence "x\<in>cball z r - {z}" using \<open>r>0\<close> by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 416 | then show "h' x = f x" using h_divide unfolding h'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 417 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 418 | moreover have "(f has_contour_integral c * residue f z) (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 419 | using base_residue[of \<open>ball z e\<close> z,simplified,OF \<open>r>0\<close> f_holo r_cball,folded c_def] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 420 | unfolding c_def by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 421 | ultimately have "c * der_f = c * residue f z" using has_contour_integral_unique by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 422 | hence "der_f = residue f z" unfolding c_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 423 | thus ?thesis unfolding der_f_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 424 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 425 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 426 | lemma residue_simple_pole: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 427 | assumes "isolated_singularity_at f z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 428 | assumes "is_pole f z0" "zorder f z0 = - 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 429 | shows "residue f z0 = zor_poly f z0 z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 430 | using assms by (subst residue_pole_order) simp_all | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 431 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 432 | lemma residue_simple_pole_limit: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 433 | assumes "isolated_singularity_at f z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 434 | assumes "is_pole f z0" "zorder f z0 = - 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 435 | assumes "((\<lambda>x. f (g x) * (g x - z0)) \<longlongrightarrow> c) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 436 | assumes "filterlim g (at z0) F" "F \<noteq> bot" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 437 | shows "residue f z0 = c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 438 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 439 | have "residue f z0 = zor_poly f z0 z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 440 | by (rule residue_simple_pole assms)+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 441 | also have "\<dots> = c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 442 | apply (rule zor_poly_pole_eqI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 443 | using assms by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 444 | finally show ?thesis . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 445 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 446 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 447 | lemma | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 448 | assumes f_holo:"f holomorphic_on s" and g_holo:"g holomorphic_on s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 449 | and "open s" "connected s" "z \<in> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 450 | assumes g_deriv:"(g has_field_derivative g') (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 451 | assumes "f z \<noteq> 0" "g z = 0" "g' \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 452 | shows porder_simple_pole_deriv: "zorder (\<lambda>w. f w / g w) z = - 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 453 | and residue_simple_pole_deriv: "residue (\<lambda>w. f w / g w) z = f z / g'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 454 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 455 | have [simp]:"isolated_singularity_at f z" "isolated_singularity_at g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 456 | using isolated_singularity_at_holomorphic[OF _ \<open>open s\<close> \<open>z\<in>s\<close>] f_holo g_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 457 | by (meson Diff_subset holomorphic_on_subset)+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 458 | have [simp]:"not_essential f z" "not_essential g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 459 | unfolding not_essential_def using f_holo g_holo assms(3,5) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 460 | by (meson continuous_on_eq_continuous_at continuous_within holomorphic_on_imp_continuous_on)+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 461 | have g_nconst:"\<exists>\<^sub>F w in at z. g w \<noteq>0 " | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 462 | proof (rule ccontr) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 463 | assume "\<not> (\<exists>\<^sub>F w in at z. g w \<noteq> 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 464 | then have "\<forall>\<^sub>F w in nhds z. g w = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 465 | unfolding eventually_at eventually_nhds frequently_at using \<open>g z = 0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 466 | by (metis open_ball UNIV_I centre_in_ball dist_commute mem_ball) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 467 | then have "deriv g z = deriv (\<lambda>_. 0) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 468 | by (intro deriv_cong_ev) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 469 | then have "deriv g z = 0" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 470 | then have "g' = 0" using g_deriv DERIV_imp_deriv by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 471 | then show False using \<open>g'\<noteq>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 472 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 473 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 474 | have "zorder (\<lambda>w. f w / g w) z = zorder f z - zorder g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 475 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 476 | have "\<forall>\<^sub>F w in at z. f w \<noteq>0 \<and> w\<in>s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 477 | apply (rule non_zero_neighbour_alt) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 478 | using assms by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 479 | with g_nconst have "\<exists>\<^sub>F w in at z. f w * g w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 480 | by (elim frequently_rev_mp eventually_rev_mp,auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 481 | then show ?thesis using zorder_divide[of f z g] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 482 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 483 | moreover have "zorder f z=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 484 | apply (rule zorder_zero_eqI[OF f_holo \<open>open s\<close> \<open>z\<in>s\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 485 | using \<open>f z\<noteq>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 486 | moreover have "zorder g z=1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 487 | apply (rule zorder_zero_eqI[OF g_holo \<open>open s\<close> \<open>z\<in>s\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 488 | subgoal using assms(8) by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 489 | subgoal using DERIV_imp_deriv assms(9) g_deriv by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 490 | subgoal by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 491 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 492 | ultimately show "zorder (\<lambda>w. f w / g w) z = - 1" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 493 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 494 | show "residue (\<lambda>w. f w / g w) z = f z / g'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 495 | proof (rule residue_simple_pole_limit[where g=id and F="at z",simplified]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 496 | show "zorder (\<lambda>w. f w / g w) z = - 1" by fact | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 497 | show "isolated_singularity_at (\<lambda>w. f w / g w) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 498 | by (auto intro: singularity_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 499 | show "is_pole (\<lambda>w. f w / g w) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 500 | proof (rule is_pole_divide) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 501 | have "\<forall>\<^sub>F x in at z. g x \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 502 | apply (rule non_zero_neighbour) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 503 | using g_nconst by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 504 | moreover have "g \<midarrow>z\<rightarrow> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 505 | using DERIV_isCont assms(8) continuous_at g_deriv by force | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 506 | ultimately show "filterlim g (at 0) (at z)" unfolding filterlim_at by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 507 | show "isCont f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 508 | using assms(3,5) continuous_on_eq_continuous_at f_holo holomorphic_on_imp_continuous_on | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 509 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 510 | show "f z \<noteq> 0" by fact | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 511 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 512 | show "filterlim id (at z) (at z)" by (simp add: filterlim_iff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 513 | have "((\<lambda>w. (f w * (w - z)) / g w) \<longlongrightarrow> f z / g') (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 514 | proof (rule lhopital_complex_simple) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 515 | show "((\<lambda>w. f w * (w - z)) has_field_derivative f z) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 516 | using assms by (auto intro!: derivative_eq_intros holomorphic_derivI[OF f_holo]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 517 | show "(g has_field_derivative g') (at z)" by fact | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 518 | qed (insert assms, auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 519 | then show "((\<lambda>w. (f w / g w) * (w - z)) \<longlongrightarrow> f z / g') (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 520 | by (simp add: field_split_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 521 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 522 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 523 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 524 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 525 | subsection \<open>Poles and residues of some well-known functions\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 526 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 527 | (* TODO: add more material here for other functions *) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 528 | lemma is_pole_Gamma: "is_pole Gamma (-of_nat n)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 529 | unfolding is_pole_def using Gamma_poles . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 530 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 531 | lemma Gamma_residue: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 532 | "residue Gamma (-of_nat n) = (-1) ^ n / fact n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 533 | proof (rule residue_simple') | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 534 |   show "open (- (\<int>\<^sub>\<le>\<^sub>0 - {-of_nat n}) :: complex set)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 535 | by (intro open_Compl closed_subset_Ints) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 536 |   show "Gamma holomorphic_on (- (\<int>\<^sub>\<le>\<^sub>0 - {-of_nat n}) - {- of_nat n})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 537 | by (rule holomorphic_Gamma) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 538 | show "(\<lambda>w. Gamma w * (w - (-of_nat n))) \<midarrow>(-of_nat n)\<rightarrow> (- 1) ^ n / fact n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 539 | using Gamma_residues[of n] by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 540 | qed auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 541 | |
| 73924 | 542 | end |