| author | wenzelm | 
| Sun, 27 Oct 2024 12:13:34 +0100 | |
| changeset 81273 | d96c9cd44b60 | 
| 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  |