author | Manuel Eberl <manuel@pruvisto.org> |
Tue, 15 Apr 2025 15:17:25 +0200 | |
changeset 82517 | 111b1b2a2d13 |
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 |