| author | wenzelm | 
| Mon, 13 Dec 2021 22:13:22 +0100 | |
| changeset 74926 | 5cd2e6e17e6f | 
| parent 73932 | fd21b4a93043 | 
| child 76895 | 498d8babe716 | 
| permissions | -rw-r--r-- | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1 | theory Complex_Singularities | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2 | imports Conformal_Mappings | 
| 
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>Non-essential singular points\<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 | definition\<^marker>\<open>tag important\<close> is_pole :: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 8 |   "('a::topological_space \<Rightarrow> 'b::real_normed_vector) \<Rightarrow> 'a \<Rightarrow> bool" where
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 9 | "is_pole f a = (LIM x (at a). f x :> at_infinity)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 10 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 11 | lemma is_pole_cong: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 12 | assumes "eventually (\<lambda>x. f x = g x) (at a)" "a=b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 13 | shows "is_pole f a \<longleftrightarrow> is_pole g b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 14 | unfolding is_pole_def using assms by (intro filterlim_cong,auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 15 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 16 | lemma is_pole_transform: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 17 | assumes "is_pole f a" "eventually (\<lambda>x. f x = g x) (at a)" "a=b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 18 | shows "is_pole g b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 19 | using is_pole_cong assms by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 20 | |
| 73795 | 21 | lemma is_pole_shift_iff: | 
| 22 |   fixes f :: "('a::real_normed_vector \<Rightarrow> 'b::real_normed_vector)"
 | |
| 23 | shows "is_pole (f \<circ> (+) d) a = is_pole f (a + d)" | |
| 24 | by (metis add_diff_cancel_right' filterlim_shift_iff is_pole_def) | |
| 25 | ||
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 26 | lemma is_pole_tendsto: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 27 |   fixes f::"('a::topological_space \<Rightarrow> 'b::real_normed_div_algebra)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 28 | shows "is_pole f x \<Longrightarrow> ((inverse o f) \<longlongrightarrow> 0) (at x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 29 | unfolding is_pole_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 30 | by (auto simp add:filterlim_inverse_at_iff[symmetric] comp_def filterlim_at) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 31 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 32 | lemma is_pole_inverse_holomorphic: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 33 | assumes "open s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 34 |     and f_holo:"f holomorphic_on (s-{z})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 35 | and pole:"is_pole f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 36 |     and non_z:"\<forall>x\<in>s-{z}. f x\<noteq>0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 37 | shows "(\<lambda>x. if x=z then 0 else inverse (f x)) holomorphic_on s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 38 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 39 | 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 | 40 | have "isCont g z" unfolding isCont_def using is_pole_tendsto[OF pole] | 
| 72222 | 41 | by (simp add: g_def cong: LIM_cong) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 42 |   moreover have "continuous_on (s-{z}) f" using f_holo holomorphic_on_imp_continuous_on by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 43 |   hence "continuous_on (s-{z}) (inverse o f)" unfolding comp_def
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 44 | by (auto elim!:continuous_on_inverse simp add:non_z) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 45 |   hence "continuous_on (s-{z}) g" unfolding g_def
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 46 |     apply (subst continuous_on_cong[where t="s-{z}" and g="inverse o f"])
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 47 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 48 | ultimately have "continuous_on s g" using open_delete[OF \<open>open s\<close>] \<open>open s\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 49 | by (auto simp add:continuous_on_eq_continuous_at) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 50 |   moreover have "(inverse o f) holomorphic_on (s-{z})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 51 | unfolding comp_def using f_holo | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 52 | by (auto elim!:holomorphic_on_inverse simp add:non_z) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 53 |   hence "g holomorphic_on (s-{z})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 54 |     apply (subst holomorphic_cong[where t="s-{z}" and g="inverse o f"])
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 55 | by (auto simp add:g_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 56 | ultimately show ?thesis unfolding g_def using \<open>open s\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 57 | by (auto elim!: no_isolated_singularity) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 58 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 59 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 60 | lemma not_is_pole_holomorphic: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 61 | assumes "open A" "x \<in> A" "f holomorphic_on A" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 62 | shows "\<not>is_pole f x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 63 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 64 | have "continuous_on A f" by (intro holomorphic_on_imp_continuous_on) fact | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 65 | with assms have "isCont f x" by (simp add: continuous_on_eq_continuous_at) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 66 | hence "f \<midarrow>x\<rightarrow> f x" by (simp add: isCont_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 67 | thus "\<not>is_pole f x" unfolding is_pole_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 68 | using not_tendsto_and_filterlim_at_infinity[of "at x" f "f x"] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 69 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 70 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 71 | lemma is_pole_inverse_power: "n > 0 \<Longrightarrow> is_pole (\<lambda>z::complex. 1 / (z - a) ^ n) a" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 72 | unfolding is_pole_def inverse_eq_divide [symmetric] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 73 | by (intro filterlim_compose[OF filterlim_inverse_at_infinity] tendsto_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 74 | (auto simp: filterlim_at eventually_at intro!: exI[of _ 1] tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 75 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 76 | lemma is_pole_inverse: "is_pole (\<lambda>z::complex. 1 / (z - a)) a" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 77 | using is_pole_inverse_power[of 1 a] by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 78 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 79 | lemma is_pole_divide: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 80 | fixes f :: "'a :: t2_space \<Rightarrow> 'b :: real_normed_field" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 81 | assumes "isCont f z" "filterlim g (at 0) (at z)" "f z \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 82 | shows "is_pole (\<lambda>z. f z / g z) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 83 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 84 | have "filterlim (\<lambda>z. f z * inverse (g z)) at_infinity (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 85 | by (intro tendsto_mult_filterlim_at_infinity[of _ "f z"] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 86 | filterlim_compose[OF filterlim_inverse_at_infinity])+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 87 | (insert assms, auto simp: isCont_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 88 | thus ?thesis by (simp add: field_split_simps is_pole_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 89 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 90 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 91 | lemma is_pole_basic: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 92 | assumes "f holomorphic_on A" "open A" "z \<in> A" "f z \<noteq> 0" "n > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 93 | shows "is_pole (\<lambda>w. f w / (w - z) ^ n) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 94 | proof (rule is_pole_divide) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 95 | have "continuous_on A f" by (rule holomorphic_on_imp_continuous_on) fact | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 96 | with assms show "isCont f z" by (auto simp: continuous_on_eq_continuous_at) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 97 | have "filterlim (\<lambda>w. (w - z) ^ n) (nhds 0) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 98 | using assms by (auto intro!: tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 99 | thus "filterlim (\<lambda>w. (w - z) ^ n) (at 0) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 100 | by (intro filterlim_atI tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 101 | (insert assms, auto simp: eventually_at_filter) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 102 | qed fact+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 103 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 104 | lemma is_pole_basic': | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 105 | assumes "f holomorphic_on A" "open A" "0 \<in> A" "f 0 \<noteq> 0" "n > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 106 | shows "is_pole (\<lambda>w. f w / w ^ n) 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 107 | using is_pole_basic[of f A 0] assms by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 108 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 109 | text \<open>The proposition | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 110 | \<^term>\<open>\<exists>x. ((f::complex\<Rightarrow>complex) \<longlongrightarrow> x) (at z) \<or> is_pole f z\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 111 | can be interpreted as the complex function \<^term>\<open>f\<close> has a non-essential singularity at \<^term>\<open>z\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 112 | (i.e. the singularity is either removable or a pole).\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 113 | definition not_essential::"[complex \<Rightarrow> complex, complex] \<Rightarrow> bool" where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 114 | "not_essential f z = (\<exists>x. f\<midarrow>z\<rightarrow>x \<or> is_pole f z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 115 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 116 | definition isolated_singularity_at::"[complex \<Rightarrow> complex, complex] \<Rightarrow> bool" where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 117 |   "isolated_singularity_at f z = (\<exists>r>0. f analytic_on ball z r-{z})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 118 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 119 | named_theorems singularity_intros "introduction rules for singularities" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 120 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 121 | lemma holomorphic_factor_unique: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 122 | fixes f::"complex \<Rightarrow> complex" and z::complex and r::real and m n::int | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 123 | assumes "r>0" "g z\<noteq>0" "h z\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 124 |     and asm:"\<forall>w\<in>ball z r-{z}. f w = g w * (w-z) powr n \<and> g w\<noteq>0 \<and> f w =  h w * (w - z) powr m \<and> h w\<noteq>0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 125 | and g_holo:"g holomorphic_on ball z r" and h_holo:"h holomorphic_on ball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 126 | shows "n=m" | 
| 
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 | have [simp]:"at z within ball z r \<noteq> bot" using \<open>r>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 129 | by (auto simp add:at_within_ball_bot_iff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 130 | have False when "n>m" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 131 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 132 | have "(h \<longlongrightarrow> 0) (at z within ball z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 133 | proof (rule Lim_transform_within[OF _ \<open>r>0\<close>, where f="\<lambda>w. (w - z) powr (n - m) * g w"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 134 |       have "\<forall>w\<in>ball z r-{z}. h w = (w-z)powr(n-m) * g w"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 135 | using \<open>n>m\<close> asm \<open>r>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 136 | apply (auto simp add:field_simps powr_diff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 137 | by force | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 138 | then show "\<lbrakk>x' \<in> ball z r; 0 < dist x' z;dist x' z < r\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 139 | \<Longrightarrow> (x' - z) powr (n - m) * g x' = h x'" for x' by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 140 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 141 | define F where "F \<equiv> at z within ball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 142 | define f' where "f' \<equiv> \<lambda>x. (x - z) powr (n-m)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 143 | have "f' z=0" using \<open>n>m\<close> unfolding f'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 144 | moreover have "continuous F f'" unfolding f'_def F_def continuous_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 145 | apply (subst Lim_ident_at) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 146 | using \<open>n>m\<close> by (auto intro!:tendsto_powr_complex_0 tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 147 | ultimately have "(f' \<longlongrightarrow> 0) F" unfolding F_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 148 | by (simp add: continuous_within) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 149 | moreover have "(g \<longlongrightarrow> g z) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 150 | using holomorphic_on_imp_continuous_on[OF g_holo,unfolded continuous_on_def] \<open>r>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 151 | unfolding F_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 152 | ultimately show " ((\<lambda>w. f' w * g w) \<longlongrightarrow> 0) F" using tendsto_mult by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 153 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 154 | moreover have "(h \<longlongrightarrow> h z) (at z within ball z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 155 | using holomorphic_on_imp_continuous_on[OF h_holo] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 156 | by (auto simp add:continuous_on_def \<open>r>0\<close>) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 157 | ultimately have "h z=0" by (auto intro!: tendsto_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 158 | thus False using \<open>h z\<noteq>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 159 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 160 | moreover have False when "m>n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 161 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 162 | have "(g \<longlongrightarrow> 0) (at z within ball z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 163 | proof (rule Lim_transform_within[OF _ \<open>r>0\<close>, where f="\<lambda>w. (w - z) powr (m - n) * h w"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 164 |       have "\<forall>w\<in>ball z r -{z}. g w = (w-z) powr (m-n) * h w" using \<open>m>n\<close> asm
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 165 | apply (auto simp add:field_simps powr_diff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 166 | by force | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 167 | then show "\<lbrakk>x' \<in> ball z r; 0 < dist x' z;dist x' z < r\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 168 | \<Longrightarrow> (x' - z) powr (m - n) * h x' = g x'" for x' by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 169 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 170 | define F where "F \<equiv> at z within ball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 171 | define f' where "f' \<equiv>\<lambda>x. (x - z) powr (m-n)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 172 | have "f' z=0" using \<open>m>n\<close> unfolding f'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 173 | moreover have "continuous F f'" unfolding f'_def F_def continuous_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 174 | apply (subst Lim_ident_at) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 175 | using \<open>m>n\<close> by (auto intro!:tendsto_powr_complex_0 tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 176 | ultimately have "(f' \<longlongrightarrow> 0) F" unfolding F_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 177 | by (simp add: continuous_within) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 178 | moreover have "(h \<longlongrightarrow> h z) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 179 | using holomorphic_on_imp_continuous_on[OF h_holo,unfolded continuous_on_def] \<open>r>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 180 | unfolding F_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 181 | ultimately show " ((\<lambda>w. f' w * h w) \<longlongrightarrow> 0) F" using tendsto_mult by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 182 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 183 | moreover have "(g \<longlongrightarrow> g z) (at z within ball z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 184 | using holomorphic_on_imp_continuous_on[OF g_holo] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 185 | by (auto simp add:continuous_on_def \<open>r>0\<close>) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 186 | ultimately have "g z=0" by (auto intro!: tendsto_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 187 | thus False using \<open>g z\<noteq>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 188 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 189 | ultimately show "n=m" by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 190 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 191 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 192 | lemma holomorphic_factor_puncture: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 193 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 194 | and "not_essential f z" \<comment> \<open>\<^term>\<open>f\<close> has either a removable singularity or a pole at \<^term>\<open>z\<close>\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 195 | and non_zero:"\<exists>\<^sub>Fw in (at z). f w\<noteq>0" \<comment> \<open>\<^term>\<open>f\<close> will not be constantly zero in a neighbour of \<^term>\<open>z\<close>\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 196 | shows "\<exists>!n::int. \<exists>g r. 0 < r \<and> g holomorphic_on cball z r \<and> g z\<noteq>0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 197 |           \<and> (\<forall>w\<in>cball z r-{z}. f w = g w * (w-z) powr n \<and> g w\<noteq>0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 198 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 199 | define P where "P = (\<lambda>f n g r. 0 < r \<and> g holomorphic_on cball z r \<and> g z\<noteq>0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 200 |           \<and> (\<forall>w\<in>cball z r - {z}. f w = g w * (w-z) powr (of_int n)  \<and> g w\<noteq>0))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 201 | have imp_unique:"\<exists>!n::int. \<exists>g r. P f n g r" when "\<exists>n g r. P f n g r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 202 | proof (rule ex_ex1I[OF that]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 203 | fix n1 n2 :: int | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 204 | assume g1_asm:"\<exists>g1 r1. P f n1 g1 r1" and g2_asm:"\<exists>g2 r2. P f n2 g2 r2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 205 |     define fac where "fac \<equiv> \<lambda>n g r. \<forall>w\<in>cball z r-{z}. f w = g w * (w - z) powr (of_int n) \<and> g w \<noteq> 0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 206 | obtain g1 r1 where "0 < r1" and g1_holo: "g1 holomorphic_on cball z r1" and "g1 z\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 207 | and "fac n1 g1 r1" using g1_asm unfolding P_def fac_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 208 | obtain g2 r2 where "0 < r2" and g2_holo: "g2 holomorphic_on cball z r2" and "g2 z\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 209 | and "fac n2 g2 r2" using g2_asm unfolding P_def fac_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 210 | define r where "r \<equiv> min r1 r2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 211 | have "r>0" using \<open>r1>0\<close> \<open>r2>0\<close> unfolding r_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 212 |     moreover have "\<forall>w\<in>ball z r-{z}. f w = g1 w * (w-z) powr n1 \<and> g1 w\<noteq>0
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 213 | \<and> f w = g2 w * (w - z) powr n2 \<and> g2 w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 214 | using \<open>fac n1 g1 r1\<close> \<open>fac n2 g2 r2\<close> unfolding fac_def r_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 215 | by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 216 | ultimately show "n1=n2" using g1_holo g2_holo \<open>g1 z\<noteq>0\<close> \<open>g2 z\<noteq>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 217 | apply (elim holomorphic_factor_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 218 | by (auto simp add:r_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 219 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 220 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 221 | have P_exist:"\<exists> n g r. P h n g r" when | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 222 | "\<exists>z'. (h \<longlongrightarrow> z') (at z)" "isolated_singularity_at h z" "\<exists>\<^sub>Fw in (at z). h w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 223 | for h | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 224 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 225 |     from that(2) obtain r where "r>0" "h analytic_on ball z r - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 226 | unfolding isolated_singularity_at_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 227 | obtain z' where "(h \<longlongrightarrow> z') (at z)" using \<open>\<exists>z'. (h \<longlongrightarrow> z') (at z)\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 228 | define h' where "h'=(\<lambda>x. if x=z then z' else h x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 229 | have "h' holomorphic_on ball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 230 |       apply (rule no_isolated_singularity'[of "{z}"])
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 231 | subgoal by (metis LIM_equal Lim_at_imp_Lim_at_within \<open>h \<midarrow>z\<rightarrow> z'\<close> empty_iff h'_def insert_iff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 232 |       subgoal using \<open>h analytic_on ball z r - {z}\<close> analytic_imp_holomorphic h'_def holomorphic_transform
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 233 | by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 234 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 235 | have ?thesis when "z'=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 236 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 237 | have "h' z=0" using that unfolding h'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 238 | moreover have "\<not> h' constant_on ball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 239 | using \<open>\<exists>\<^sub>Fw in (at z). h w\<noteq>0\<close> unfolding constant_on_def frequently_def eventually_at h'_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 240 | apply simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 241 | by (metis \<open>0 < r\<close> centre_in_ball dist_commute mem_ball that) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 242 | moreover note \<open>h' holomorphic_on ball z r\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 243 | ultimately obtain g r1 n where "0 < n" "0 < r1" "ball z r1 \<subseteq> ball z r" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 244 | g:"g holomorphic_on ball z r1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 245 | "\<And>w. w \<in> ball z r1 \<Longrightarrow> h' w = (w - z) ^ n * g w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 246 | "\<And>w. w \<in> ball z r1 \<Longrightarrow> g w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 247 | using holomorphic_factor_zero_nonconstant[of _ "ball z r" z thesis,simplified, | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 248 | OF \<open>h' holomorphic_on ball z r\<close> \<open>r>0\<close> \<open>h' z=0\<close> \<open>\<not> h' constant_on ball z r\<close>] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 249 | by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 250 | define rr where "rr=r1/2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 251 | have "P h' n g rr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 252 | unfolding P_def rr_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 253 | using \<open>n>0\<close> \<open>r1>0\<close> g by (auto simp add:powr_nat) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 254 | then have "P h n g rr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 255 | unfolding h'_def P_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 256 | then show ?thesis unfolding P_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 257 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 258 | moreover have ?thesis when "z'\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 259 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 260 | have "h' z\<noteq>0" using that unfolding h'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 261 | obtain r1 where "r1>0" "cball z r1 \<subseteq> ball z r" "\<forall>x\<in>cball z r1. h' x\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 262 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 263 | have "isCont h' z" "h' z\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 264 | by (auto simp add: Lim_cong_within \<open>h \<midarrow>z\<rightarrow> z'\<close> \<open>z'\<noteq>0\<close> continuous_at h'_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 265 | then obtain r2 where r2:"r2>0" "\<forall>x\<in>ball z r2. h' x\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 266 | using continuous_at_avoid[of z h' 0 ] unfolding ball_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 267 | define r1 where "r1=min r2 r / 2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 268 | have "0 < r1" "cball z r1 \<subseteq> ball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 269 | using \<open>r2>0\<close> \<open>r>0\<close> unfolding r1_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 270 | moreover have "\<forall>x\<in>cball z r1. h' x \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 271 | using r2 unfolding r1_def by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 272 | ultimately show ?thesis using that by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 273 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 274 | then have "P h' 0 h' r1" using \<open>h' holomorphic_on ball z r\<close> unfolding P_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 275 | then have "P h 0 h' r1" unfolding P_def h'_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 276 | then show ?thesis unfolding P_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 277 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 278 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 279 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 280 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 281 | have ?thesis when "\<exists>x. (f \<longlongrightarrow> x) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 282 | apply (rule_tac imp_unique[unfolded P_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 283 | using P_exist[OF that(1) f_iso non_zero] unfolding P_def . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 284 | moreover have ?thesis when "is_pole f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 285 | proof (rule imp_unique[unfolded P_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 286 |     obtain e where [simp]:"e>0" and e_holo:"f holomorphic_on ball z e - {z}" and e_nz: "\<forall>x\<in>ball z e-{z}. f x\<noteq>0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 287 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 288 | have "\<forall>\<^sub>F z in at z. f z \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 289 | using \<open>is_pole f z\<close> filterlim_at_infinity_imp_eventually_ne unfolding is_pole_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 290 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 291 |       then obtain e1 where e1:"e1>0" "\<forall>x\<in>ball z e1-{z}. f x\<noteq>0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 292 | using that eventually_at[of "\<lambda>x. f x\<noteq>0" z UNIV,simplified] by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 293 |       obtain e2 where e2:"e2>0" "f holomorphic_on ball z e2 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 294 | using f_iso analytic_imp_holomorphic unfolding isolated_singularity_at_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 295 | define e where "e=min e1 e2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 296 | show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 297 | apply (rule that[of e]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 298 | using e1 e2 unfolding e_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 299 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 300 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 301 | define h where "h \<equiv> \<lambda>x. inverse (f x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 302 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 303 | have "\<exists>n g r. P h n g r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 304 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 305 | have "h \<midarrow>z\<rightarrow> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 306 | using Lim_transform_within_open assms(2) h_def is_pole_tendsto that by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 307 | moreover have "\<exists>\<^sub>Fw in (at z). h w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 308 | using non_zero | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 309 | apply (elim frequently_rev_mp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 310 | unfolding h_def eventually_at by (auto intro:exI[where x=1]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 311 | moreover have "isolated_singularity_at h z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 312 | unfolding isolated_singularity_at_def h_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 313 | apply (rule exI[where x=e]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 314 | using e_holo e_nz \<open>e>0\<close> by (metis open_ball analytic_on_open | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 315 | holomorphic_on_inverse open_delete) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 316 | ultimately show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 317 | using P_exist[of h] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 318 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 319 | then obtain n g r | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 320 | where "0 < r" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 321 | g_holo:"g holomorphic_on cball z r" and "g z\<noteq>0" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 322 |             g_fac:"(\<forall>w\<in>cball z r-{z}. h w = g w * (w - z) powr of_int n  \<and> g w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 323 | unfolding P_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 324 | have "P f (-n) (inverse o g) r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 325 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 326 |       have "f w = inverse (g w) * (w - z) powr of_int (- n)" when "w\<in>cball z r - {z}" for w
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 327 | using g_fac[rule_format,of w] that unfolding h_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 328 | apply (auto simp add:powr_minus ) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 329 | by (metis inverse_inverse_eq inverse_mult_distrib) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 330 | then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 331 | unfolding P_def comp_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 332 | using \<open>r>0\<close> g_holo g_fac \<open>g z\<noteq>0\<close> by (auto intro:holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 333 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 334 | then show "\<exists>x g r. 0 < r \<and> g holomorphic_on cball z r \<and> g z \<noteq> 0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 335 |                   \<and> (\<forall>w\<in>cball z r - {z}. f w = g w * (w - z) powr of_int x  \<and> g w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 336 | unfolding P_def by blast | 
| 
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 | ultimately show ?thesis using \<open>not_essential f z\<close> unfolding not_essential_def by presburger | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 339 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 340 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 341 | lemma not_essential_transform: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 342 | assumes "not_essential g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 343 | assumes "\<forall>\<^sub>F w in (at z). g w = f w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 344 | shows "not_essential f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 345 | using assms unfolding not_essential_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 346 | by (simp add: filterlim_cong is_pole_cong) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 347 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 348 | lemma isolated_singularity_at_transform: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 349 | assumes "isolated_singularity_at g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 350 | assumes "\<forall>\<^sub>F w in (at z). g w = f w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 351 | shows "isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 352 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 353 |   obtain r1 where "r1>0" and r1:"g analytic_on ball z r1 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 354 | using assms(1) unfolding isolated_singularity_at_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 355 | obtain r2 where "r2>0" and r2:" \<forall>x. x \<noteq> z \<and> dist x z < r2 \<longrightarrow> g x = f x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 356 | using assms(2) unfolding eventually_at by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 357 | define r3 where "r3=min r1 r2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 358 | have "r3>0" unfolding r3_def using \<open>r1>0\<close> \<open>r2>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 359 |   moreover have "f analytic_on ball z r3 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 360 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 361 |     have "g holomorphic_on ball z r3 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 362 | using r1 unfolding r3_def by (subst (asm) analytic_on_open,auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 363 |     then have "f holomorphic_on ball z r3 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 364 | using r2 unfolding r3_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 365 | by (auto simp add:dist_commute elim!:holomorphic_transform) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 366 | then show ?thesis by (subst analytic_on_open,auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 367 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 368 | ultimately show ?thesis unfolding isolated_singularity_at_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 369 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 370 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 371 | lemma not_essential_powr[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 372 | assumes "LIM w (at z). f w :> (at x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 373 | shows "not_essential (\<lambda>w. (f w) powr (of_int n)) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 374 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 375 | define fp where "fp=(\<lambda>w. (f w) powr (of_int n))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 376 | have ?thesis when "n>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 377 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 378 | have "(\<lambda>w. (f w) ^ (nat n)) \<midarrow>z\<rightarrow> x ^ nat n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 379 | using that assms unfolding filterlim_at by (auto intro!:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 380 | then have "fp \<midarrow>z\<rightarrow> x ^ nat n" unfolding fp_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 381 | apply (elim Lim_transform_within[where d=1],simp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 382 | by (metis less_le powr_0 powr_of_int that zero_less_nat_eq zero_power) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 383 | then show ?thesis unfolding not_essential_def fp_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 384 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 385 | moreover have ?thesis when "n=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 386 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 387 | have "fp \<midarrow>z\<rightarrow> 1 " | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 388 | apply (subst tendsto_cong[where g="\<lambda>_.1"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 389 | using that filterlim_at_within_not_equal[OF assms,of 0] unfolding fp_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 390 | then show ?thesis unfolding fp_def not_essential_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 391 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 392 | moreover have ?thesis when "n<0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 393 | proof (cases "x=0") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 394 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 395 | have "LIM w (at z). inverse ((f w) ^ (nat (-n))) :> at_infinity" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 396 | apply (subst filterlim_inverse_at_iff[symmetric],simp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 397 | apply (rule filterlim_atI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 398 | subgoal using assms True that unfolding filterlim_at by (auto intro!:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 399 | subgoal using filterlim_at_within_not_equal[OF assms,of 0] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 400 | by (eventually_elim,insert that,auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 401 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 402 | then have "LIM w (at z). fp w :> at_infinity" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 403 | proof (elim filterlim_mono_eventually) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 404 | show "\<forall>\<^sub>F x in at z. inverse (f x ^ nat (- n)) = fp x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 405 | using filterlim_at_within_not_equal[OF assms,of 0] unfolding fp_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 406 | apply eventually_elim | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 407 | using powr_of_int that by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 408 | qed auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 409 | then show ?thesis unfolding fp_def not_essential_def is_pole_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 410 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 411 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 412 | let ?xx= "inverse (x ^ (nat (-n)))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 413 | have "(\<lambda>w. inverse ((f w) ^ (nat (-n)))) \<midarrow>z\<rightarrow>?xx" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 414 | using assms False unfolding filterlim_at by (auto intro!:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 415 | then have "fp \<midarrow>z\<rightarrow>?xx" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 416 | apply (elim Lim_transform_within[where d=1],simp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 417 | unfolding fp_def by (metis inverse_zero nat_mono_iff nat_zero_as_int neg_0_less_iff_less | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 418 | not_le power_eq_0_iff powr_0 powr_of_int that) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 419 | then show ?thesis unfolding fp_def not_essential_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 420 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 421 | ultimately show ?thesis by linarith | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 422 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 423 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 424 | lemma isolated_singularity_at_powr[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 425 | assumes "isolated_singularity_at f z" "\<forall>\<^sub>F w in (at z). f w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 426 | shows "isolated_singularity_at (\<lambda>w. (f w) powr (of_int n)) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 427 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 428 |   obtain r1 where "r1>0" "f analytic_on ball z r1 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 429 | using assms(1) unfolding isolated_singularity_at_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 430 |   then have r1:"f holomorphic_on ball z r1 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 431 |     using analytic_on_open[of "ball z r1-{z}" f] by blast
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 432 | obtain r2 where "r2>0" and r2:"\<forall>w. w \<noteq> z \<and> dist w z < r2 \<longrightarrow> f w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 433 | using assms(2) unfolding eventually_at by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 434 | define r3 where "r3=min r1 r2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 435 |   have "(\<lambda>w. (f w) powr of_int n) holomorphic_on ball z r3 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 436 | apply (rule holomorphic_on_powr_of_int) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 437 | subgoal unfolding r3_def using r1 by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 438 | subgoal unfolding r3_def using r2 by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 439 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 440 | moreover have "r3>0" unfolding r3_def using \<open>0 < r1\<close> \<open>0 < r2\<close> by linarith | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 441 | ultimately show ?thesis unfolding isolated_singularity_at_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 442 | apply (subst (asm) analytic_on_open[symmetric]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 443 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 444 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 445 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 446 | lemma non_zero_neighbour: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 447 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 448 | and f_ness:"not_essential f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 449 | and f_nconst:"\<exists>\<^sub>Fw in (at z). f w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 450 | shows "\<forall>\<^sub>F w in (at z). f w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 451 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 452 | obtain fn fp fr where [simp]:"fp z \<noteq> 0" and "fr > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 453 | and fr: "fp holomorphic_on cball z fr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 454 |                   "\<forall>w\<in>cball z fr - {z}. f w = fp w * (w - z) powr of_int fn \<and> fp w \<noteq> 0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 455 | using holomorphic_factor_puncture[OF f_iso f_ness f_nconst,THEN ex1_implies_ex] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 456 | have "f w \<noteq> 0" when " w \<noteq> z" "dist w z < fr" for w | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 457 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 458 | have "f w = fp w * (w - z) powr of_int fn" "fp w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 459 | using fr(2)[rule_format, of w] using that by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 460 | moreover have "(w - z) powr of_int fn \<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 461 | unfolding powr_eq_0_iff using \<open>w\<noteq>z\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 462 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 463 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 464 | then show ?thesis using \<open>fr>0\<close> unfolding eventually_at by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 465 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 466 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 467 | lemma non_zero_neighbour_pole: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 468 | assumes "is_pole f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 469 | shows "\<forall>\<^sub>F w in (at z). f w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 470 | using assms filterlim_at_infinity_imp_eventually_ne[of f "at z" 0] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 471 | unfolding is_pole_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 472 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 473 | lemma non_zero_neighbour_alt: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 474 | assumes holo: "f holomorphic_on S" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 475 | and "open S" "connected S" "z \<in> S" "\<beta> \<in> S" "f \<beta> \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 476 | shows "\<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 | proof (cases "f z = 0") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 478 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 479 | from isolated_zeros[OF holo \<open>open S\<close> \<open>connected S\<close> \<open>z \<in> S\<close> True \<open>\<beta> \<in> S\<close> \<open>f \<beta> \<noteq> 0\<close>] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 480 |   obtain r where "0 < r" "ball z r \<subseteq> S" "\<forall>w \<in> ball z r - {z}.f w \<noteq> 0" by metis
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 481 | then show ?thesis unfolding eventually_at | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 482 | apply (rule_tac x=r in exI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 483 | by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 484 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 485 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 486 | obtain r1 where r1:"r1>0" "\<forall>y. dist z y < r1 \<longrightarrow> f y \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 487 | using continuous_at_avoid[of z f, OF _ False] assms(2,4) continuous_on_eq_continuous_at | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 488 | holo holomorphic_on_imp_continuous_on by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 489 | obtain r2 where r2:"r2>0" "ball z r2 \<subseteq> S" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 490 | using assms(2) assms(4) openE by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 491 | show ?thesis unfolding eventually_at | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 492 | apply (rule_tac x="min r1 r2" in exI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 493 | using r1 r2 by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 494 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 495 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 496 | lemma not_essential_times[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 497 | assumes f_ness:"not_essential f z" and g_ness:"not_essential g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 498 | assumes f_iso:"isolated_singularity_at f z" and g_iso:"isolated_singularity_at g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 499 | shows "not_essential (\<lambda>w. f w * g w) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 500 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 501 | define fg where "fg = (\<lambda>w. f w * g w)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 502 | have ?thesis when "\<not> ((\<exists>\<^sub>Fw in (at z). f w\<noteq>0) \<and> (\<exists>\<^sub>Fw in (at z). g w\<noteq>0))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 503 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 504 | have "\<forall>\<^sub>Fw in (at z). fg w=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 505 | using that[unfolded frequently_def, simplified] unfolding fg_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 506 | by (auto elim: eventually_rev_mp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 507 | from tendsto_cong[OF this] have "fg \<midarrow>z\<rightarrow>0" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 508 | then show ?thesis unfolding not_essential_def fg_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 509 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 510 | moreover have ?thesis when f_nconst:"\<exists>\<^sub>Fw in (at z). f w\<noteq>0" and g_nconst:"\<exists>\<^sub>Fw in (at z). g w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 511 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 512 | obtain fn fp fr where [simp]:"fp z \<noteq> 0" and "fr > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 513 | and fr: "fp holomorphic_on cball z fr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 514 |                   "\<forall>w\<in>cball z fr - {z}. f w = fp w * (w - z) powr of_int fn \<and> fp w \<noteq> 0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 515 | using holomorphic_factor_puncture[OF f_iso f_ness f_nconst,THEN ex1_implies_ex] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 516 | obtain gn gp gr where [simp]:"gp z \<noteq> 0" and "gr > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 517 | and gr: "gp holomorphic_on cball z gr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 518 |                   "\<forall>w\<in>cball z gr - {z}. g w = gp w * (w - z) powr of_int gn \<and> gp w \<noteq> 0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 519 | using holomorphic_factor_puncture[OF g_iso g_ness g_nconst,THEN ex1_implies_ex] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 520 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 521 | define r1 where "r1=(min fr gr)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 522 | have "r1>0" unfolding r1_def using \<open>fr>0\<close> \<open>gr>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 523 | have fg_times:"fg w = (fp w * gp w) * (w - z) powr (of_int (fn+gn))" and fgp_nz:"fp w*gp w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 524 |       when "w\<in>ball z r1 - {z}" for w
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 525 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 526 | have "f w = fp w * (w - z) powr of_int fn" "fp w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 527 | using fr(2)[rule_format,of w] that unfolding r1_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 528 | moreover have "g w = gp w * (w - z) powr of_int gn" "gp w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 529 | using gr(2)[rule_format, of w] that unfolding r1_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 530 | ultimately show "fg w = (fp w * gp w) * (w - z) powr (of_int (fn+gn))" "fp w*gp w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 531 | unfolding fg_def by (auto simp add:powr_add) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 532 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 533 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 534 | have [intro]: "fp \<midarrow>z\<rightarrow>fp z" "gp \<midarrow>z\<rightarrow>gp z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 535 | using fr(1) \<open>fr>0\<close> gr(1) \<open>gr>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 536 | by (meson open_ball ball_subset_cball centre_in_ball | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 537 | 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 | 538 | holomorphic_on_subset)+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 539 | have ?thesis when "fn+gn>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 540 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 541 | have "(\<lambda>w. (fp w * gp w) * (w - z) ^ (nat (fn+gn))) \<midarrow>z\<rightarrow>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 542 | using that by (auto intro!:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 543 | then have "fg \<midarrow>z\<rightarrow> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 544 | apply (elim Lim_transform_within[OF _ \<open>r1>0\<close>]) | 
| 73932 
fd21b4a93043
added opaque_combs and renamed hide_lams to opaque_lifting
 desharna parents: 
73795diff
changeset | 545 | by (metis (no_types, opaque_lifting) Diff_iff cball_trivial dist_commute dist_self | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 546 | eq_iff_diff_eq_0 fg_times less_le linorder_not_le mem_ball mem_cball powr_of_int | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 547 | that) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 548 | then show ?thesis unfolding not_essential_def fg_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 549 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 550 | moreover have ?thesis when "fn+gn=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 551 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 552 | have "(\<lambda>w. fp w * gp w) \<midarrow>z\<rightarrow>fp z*gp z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 553 | using that by (auto intro!:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 554 | then have "fg \<midarrow>z\<rightarrow> fp z*gp z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 555 | apply (elim Lim_transform_within[OF _ \<open>r1>0\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 556 | apply (subst fg_times) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 557 | by (auto simp add:dist_commute that) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 558 | then show ?thesis unfolding not_essential_def fg_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 559 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 560 | moreover have ?thesis when "fn+gn<0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 561 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 562 | have "LIM w (at z). fp w * gp w / (w-z)^nat (-(fn+gn)) :> at_infinity" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 563 | apply (rule filterlim_divide_at_infinity) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 564 | apply (insert that, auto intro!:tendsto_eq_intros filterlim_atI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 565 | using eventually_at_topological by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 566 | then have "is_pole fg z" unfolding is_pole_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 567 | apply (elim filterlim_transform_within[OF _ _ \<open>r1>0\<close>],simp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 568 | apply (subst fg_times,simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 569 | apply (subst powr_of_int) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 570 | using that by (auto simp add:field_split_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 571 | then show ?thesis unfolding not_essential_def fg_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 572 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 573 | ultimately show ?thesis unfolding not_essential_def fg_def by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 574 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 575 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 576 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 577 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 578 | lemma not_essential_inverse[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 579 | assumes f_ness:"not_essential f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 580 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 581 | shows "not_essential (\<lambda>w. inverse (f w)) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 582 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 583 | define vf where "vf = (\<lambda>w. inverse (f w))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 584 | have ?thesis when "\<not>(\<exists>\<^sub>Fw in (at z). f w\<noteq>0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 585 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 586 | have "\<forall>\<^sub>Fw in (at z). f w=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 587 | using that[unfolded frequently_def, simplified] by (auto elim: eventually_rev_mp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 588 | then have "\<forall>\<^sub>Fw in (at z). vf w=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 589 | unfolding vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 590 | from tendsto_cong[OF this] have "vf \<midarrow>z\<rightarrow>0" unfolding vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 591 | then show ?thesis unfolding not_essential_def vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 592 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 593 | moreover have ?thesis when "is_pole f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 594 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 595 | have "vf \<midarrow>z\<rightarrow>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 596 | using that filterlim_at filterlim_inverse_at_iff unfolding is_pole_def vf_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 597 | then show ?thesis unfolding not_essential_def vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 598 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 599 | moreover have ?thesis when "\<exists>x. f\<midarrow>z\<rightarrow>x " and f_nconst:"\<exists>\<^sub>Fw in (at z). f w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 600 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 601 | from that obtain fz where fz:"f\<midarrow>z\<rightarrow>fz" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 602 | have ?thesis when "fz=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 603 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 604 | have "(\<lambda>w. inverse (vf w)) \<midarrow>z\<rightarrow>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 605 | using fz that unfolding vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 606 | moreover have "\<forall>\<^sub>F w in at z. inverse (vf w) \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 607 | using non_zero_neighbour[OF f_iso f_ness f_nconst] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 608 | unfolding vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 609 | ultimately have "is_pole vf z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 610 | using filterlim_inverse_at_iff[of vf "at z"] unfolding filterlim_at is_pole_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 611 | then show ?thesis unfolding not_essential_def vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 612 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 613 | moreover have ?thesis when "fz\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 614 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 615 | have "vf \<midarrow>z\<rightarrow>inverse fz" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 616 | using fz that unfolding vf_def by (auto intro:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 617 | then show ?thesis unfolding not_essential_def vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 618 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 619 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 620 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 621 | ultimately show ?thesis using f_ness unfolding not_essential_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 622 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 623 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 624 | lemma isolated_singularity_at_inverse[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 625 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 626 | and f_ness:"not_essential f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 627 | shows "isolated_singularity_at (\<lambda>w. inverse (f w)) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 628 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 629 | define vf where "vf = (\<lambda>w. inverse (f w))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 630 | have ?thesis when "\<not>(\<exists>\<^sub>Fw in (at z). f w\<noteq>0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 631 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 632 | have "\<forall>\<^sub>Fw in (at z). f w=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 633 | using that[unfolded frequently_def, simplified] by (auto elim: eventually_rev_mp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 634 | then have "\<forall>\<^sub>Fw in (at z). vf w=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 635 | unfolding vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 636 | then obtain d1 where "d1>0" and d1:"\<forall>x. x \<noteq> z \<and> dist x z < d1 \<longrightarrow> vf x = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 637 | unfolding eventually_at by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 638 |     then have "vf holomorphic_on ball z d1-{z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 639 | apply (rule_tac holomorphic_transform[of "\<lambda>_. 0"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 640 | by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 641 |     then have "vf analytic_on ball z d1 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 642 | by (simp add: analytic_on_open open_delete) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 643 | then show ?thesis using \<open>d1>0\<close> unfolding isolated_singularity_at_def vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 644 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 645 | moreover have ?thesis when f_nconst:"\<exists>\<^sub>Fw in (at z). f w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 646 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 647 | have "\<forall>\<^sub>F w in at z. f w \<noteq> 0" using non_zero_neighbour[OF f_iso f_ness f_nconst] . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 648 | then obtain d1 where d1:"d1>0" "\<forall>x. x \<noteq> z \<and> dist x z < d1 \<longrightarrow> f x \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 649 | unfolding eventually_at by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 650 |     obtain d2 where "d2>0" and d2:"f analytic_on ball z d2 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 651 | using f_iso unfolding isolated_singularity_at_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 652 | define d3 where "d3=min d1 d2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 653 | have "d3>0" unfolding d3_def using \<open>d1>0\<close> \<open>d2>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 654 |     moreover have "vf analytic_on ball z d3 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 655 | unfolding vf_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 656 | apply (rule analytic_on_inverse) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 657 | subgoal using d2 unfolding d3_def by (elim analytic_on_subset) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 658 | subgoal for w using d1 unfolding d3_def by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 659 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 660 | ultimately show ?thesis unfolding isolated_singularity_at_def vf_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 661 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 662 | ultimately show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 663 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 664 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 665 | lemma not_essential_divide[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 666 | assumes f_ness:"not_essential f z" and g_ness:"not_essential g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 667 | assumes f_iso:"isolated_singularity_at f z" and g_iso:"isolated_singularity_at g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 668 | shows "not_essential (\<lambda>w. f w / g w) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 669 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 670 | have "not_essential (\<lambda>w. f w * inverse (g w)) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 671 | apply (rule not_essential_times[where g="\<lambda>w. inverse (g w)"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 672 | using assms by (auto intro: isolated_singularity_at_inverse not_essential_inverse) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 673 | then show ?thesis by (simp add:field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 674 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 675 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 676 | lemma | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 677 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 678 | and g_iso:"isolated_singularity_at g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 679 | shows isolated_singularity_at_times[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 680 | "isolated_singularity_at (\<lambda>w. f w * g w) z" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 681 | isolated_singularity_at_add[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 682 | "isolated_singularity_at (\<lambda>w. f w + g w) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 683 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 684 | obtain d1 d2 where "d1>0" "d2>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 685 |       and d1:"f analytic_on ball z d1 - {z}" and d2:"g analytic_on ball z d2 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 686 | using f_iso g_iso unfolding isolated_singularity_at_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 687 | define d3 where "d3=min d1 d2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 688 | have "d3>0" unfolding d3_def using \<open>d1>0\<close> \<open>d2>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 689 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 690 |   have "(\<lambda>w. f w * g w) analytic_on ball z d3 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 691 | apply (rule analytic_on_mult) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 692 | using d1 d2 unfolding d3_def by (auto elim:analytic_on_subset) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 693 | then 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 | 694 | using \<open>d3>0\<close> unfolding isolated_singularity_at_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 695 |   have "(\<lambda>w. f w + g w) analytic_on ball z d3 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 696 | apply (rule analytic_on_add) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 697 | using d1 d2 unfolding d3_def by (auto elim:analytic_on_subset) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 698 | then 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 | 699 | using \<open>d3>0\<close> unfolding isolated_singularity_at_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 700 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 701 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 702 | lemma isolated_singularity_at_uminus[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 703 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 704 | shows "isolated_singularity_at (\<lambda>w. - f w) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 705 | using assms unfolding isolated_singularity_at_def using analytic_on_neg by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 706 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 707 | lemma isolated_singularity_at_id[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 708 | "isolated_singularity_at (\<lambda>w. w) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 709 | unfolding isolated_singularity_at_def by (simp add: gt_ex) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 710 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 711 | lemma isolated_singularity_at_minus[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 712 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 713 | and g_iso:"isolated_singularity_at g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 714 | shows "isolated_singularity_at (\<lambda>w. f w - g w) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 715 | using isolated_singularity_at_uminus[THEN isolated_singularity_at_add[OF f_iso,of "\<lambda>w. - g w"] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 716 | ,OF g_iso] by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 717 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 718 | lemma isolated_singularity_at_divide[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 719 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 720 | and g_iso:"isolated_singularity_at g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 721 | and g_ness:"not_essential g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 722 | shows "isolated_singularity_at (\<lambda>w. f w / g w) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 723 | using isolated_singularity_at_inverse[THEN isolated_singularity_at_times[OF f_iso, | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 724 | of "\<lambda>w. inverse (g w)"],OF g_iso g_ness] by (simp add:field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 725 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 726 | lemma isolated_singularity_at_const[singularity_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 727 | "isolated_singularity_at (\<lambda>w. c) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 728 | unfolding isolated_singularity_at_def by (simp add: gt_ex) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 729 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 730 | lemma isolated_singularity_at_holomorphic: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 731 |   assumes "f holomorphic_on s-{z}" "open s" "z\<in>s"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 732 | shows "isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 733 | using assms unfolding isolated_singularity_at_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 734 | by (metis analytic_on_holomorphic centre_in_ball insert_Diff openE open_delete subset_insert_iff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 735 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 736 | subsubsection \<open>The order of non-essential singularities (i.e. removable singularities or poles)\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 737 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 738 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 739 | definition\<^marker>\<open>tag important\<close> zorder :: "(complex \<Rightarrow> complex) \<Rightarrow> complex \<Rightarrow> int" where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 740 | "zorder f z = (THE n. (\<exists>h r. r>0 \<and> h holomorphic_on cball z r \<and> h z\<noteq>0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 741 |                    \<and> (\<forall>w\<in>cball z r - {z}. f w =  h w * (w-z) powr (of_int n)
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 742 | \<and> h w \<noteq>0)))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 743 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 744 | definition\<^marker>\<open>tag important\<close> zor_poly | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 745 | ::"[complex \<Rightarrow> complex, complex] \<Rightarrow> complex \<Rightarrow> complex" where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 746 | "zor_poly f z = (SOME h. \<exists>r. r > 0 \<and> h holomorphic_on cball z r \<and> h z \<noteq> 0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 747 |                    \<and> (\<forall>w\<in>cball z r - {z}. f w =  h w * (w - z) powr (zorder f z)
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 748 | \<and> h w \<noteq>0))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 749 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 750 | lemma zorder_exist: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 751 | fixes f::"complex \<Rightarrow> complex" and z::complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 752 | defines "n\<equiv>zorder f z" and "g\<equiv>zor_poly f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 753 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 754 | and f_ness:"not_essential f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 755 | and f_nconst:"\<exists>\<^sub>Fw in (at z). f w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 756 | shows "g z\<noteq>0 \<and> (\<exists>r. r>0 \<and> g holomorphic_on cball z r | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 757 |     \<and> (\<forall>w\<in>cball z r - {z}. f w  = g w * (w-z) powr n  \<and> g w \<noteq>0))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 758 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 759 | define P where "P = (\<lambda>n g r. 0 < r \<and> g holomorphic_on cball z r \<and> g z\<noteq>0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 760 |           \<and> (\<forall>w\<in>cball z r - {z}. f w = g w * (w-z) powr (of_int n) \<and> g w\<noteq>0))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 761 | have "\<exists>!n. \<exists>g r. P n g r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 762 | using holomorphic_factor_puncture[OF assms(3-)] unfolding P_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 763 | then have "\<exists>g r. P n g r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 764 | unfolding n_def P_def zorder_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 765 | by (drule_tac theI',argo) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 766 | then have "\<exists>r. P n g r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 767 | unfolding P_def zor_poly_def g_def n_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 768 | by (drule_tac someI_ex,argo) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 769 | then obtain r1 where "P n g r1" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 770 | then show ?thesis unfolding P_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 771 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 772 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 773 | lemma | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 774 | fixes f::"complex \<Rightarrow> complex" and z::complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 775 | assumes f_iso:"isolated_singularity_at f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 776 | and f_ness:"not_essential f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 777 | and f_nconst:"\<exists>\<^sub>Fw in (at z). f w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 778 | shows zorder_inverse: "zorder (\<lambda>w. inverse (f w)) z = - zorder f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 779 | and zor_poly_inverse: "\<forall>\<^sub>Fw in (at z). zor_poly (\<lambda>w. inverse (f w)) z w | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 780 | = inverse (zor_poly f z w)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 781 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 782 | define vf where "vf = (\<lambda>w. inverse (f w))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 783 | define fn vfn where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 784 | "fn = zorder f z" and "vfn = zorder vf z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 785 | define fp vfp where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 786 | "fp = zor_poly f z" and "vfp = zor_poly vf z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 787 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 788 | obtain fr where [simp]:"fp z \<noteq> 0" and "fr > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 789 | and fr: "fp holomorphic_on cball z fr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 790 |                   "\<forall>w\<in>cball z fr - {z}. f w = fp w * (w - z) powr of_int fn \<and> fp w \<noteq> 0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 791 | using zorder_exist[OF f_iso f_ness f_nconst,folded fn_def fp_def] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 792 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 793 | have fr_inverse: "vf w = (inverse (fp w)) * (w - z) powr (of_int (-fn))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 794 | and fr_nz: "inverse (fp w)\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 795 |     when "w\<in>ball z fr - {z}" for w
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 796 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 797 | have "f w = fp w * (w - z) powr of_int fn" "fp w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 798 | using fr(2)[rule_format,of w] that by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 799 | then show "vf w = (inverse (fp w)) * (w - z) powr (of_int (-fn))" "inverse (fp w)\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 800 | unfolding vf_def by (auto simp add:powr_minus) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 801 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 802 | obtain vfr where [simp]:"vfp z \<noteq> 0" and "vfr>0" and vfr:"vfp holomorphic_on cball z vfr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 803 |       "(\<forall>w\<in>cball z vfr - {z}. vf w = vfp w * (w - z) powr of_int vfn \<and> vfp w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 804 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 805 | have "isolated_singularity_at vf z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 806 | using isolated_singularity_at_inverse[OF f_iso f_ness] unfolding vf_def . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 807 | moreover have "not_essential vf z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 808 | using not_essential_inverse[OF f_ness f_iso] unfolding vf_def . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 809 | moreover have "\<exists>\<^sub>F w in at z. vf w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 810 | using f_nconst unfolding vf_def by (auto elim:frequently_elim1) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 811 | ultimately show ?thesis using zorder_exist[of vf z, folded vfn_def vfp_def] that by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 812 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 813 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 814 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 815 | define r1 where "r1 = min fr vfr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 816 | have "r1>0" using \<open>fr>0\<close> \<open>vfr>0\<close> unfolding r1_def by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 817 | show "vfn = - fn" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 818 | apply (rule holomorphic_factor_unique[of r1 vfp z "\<lambda>w. inverse (fp w)" vf]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 819 | subgoal using \<open>r1>0\<close> by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 820 | subgoal by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 821 | subgoal by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 822 | subgoal | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 823 | proof (rule ballI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 824 |       fix w assume "w \<in> ball z r1 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 825 |       then have "w \<in> ball z fr - {z}" "w \<in> cball z vfr - {z}"  unfolding r1_def by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 826 | from fr_inverse[OF this(1)] fr_nz[OF this(1)] vfr(2)[rule_format,OF this(2)] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 827 | show "vf w = vfp w * (w - z) powr of_int vfn \<and> vfp w \<noteq> 0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 828 | \<and> vf w = inverse (fp w) * (w - z) powr of_int (- fn) \<and> inverse (fp w) \<noteq> 0" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 829 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 830 | subgoal using vfr(1) unfolding r1_def by (auto intro!:holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 831 | subgoal using fr unfolding r1_def by (auto intro!:holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 832 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 833 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 834 |   have "vfp w = inverse (fp w)" when "w\<in>ball z r1-{z}" for w
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 835 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 836 |     have "w \<in> ball z fr - {z}" "w \<in> cball z vfr - {z}"  "w\<noteq>z" using that unfolding r1_def by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 837 | from fr_inverse[OF this(1)] fr_nz[OF this(1)] vfr(2)[rule_format,OF this(2)] \<open>vfn = - fn\<close> \<open>w\<noteq>z\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 838 | show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 839 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 840 | then show "\<forall>\<^sub>Fw in (at z). vfp w = inverse (fp w)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 841 | unfolding eventually_at using \<open>r1>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 842 | apply (rule_tac x=r1 in exI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 843 | by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 844 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 845 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 846 | lemma | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 847 | fixes f g::"complex \<Rightarrow> complex" and z::complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 848 | assumes f_iso:"isolated_singularity_at f z" and g_iso:"isolated_singularity_at g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 849 | and f_ness:"not_essential f z" and g_ness:"not_essential g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 850 | and fg_nconst: "\<exists>\<^sub>Fw in (at z). f w * g w\<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 851 | shows zorder_times:"zorder (\<lambda>w. f w * g w) z = zorder f z + zorder g z" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 852 | zor_poly_times:"\<forall>\<^sub>Fw in (at z). zor_poly (\<lambda>w. f w * g w) z w | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 853 | = zor_poly f z w *zor_poly g z w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 854 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 855 | define fg where "fg = (\<lambda>w. f w * g w)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 856 | define fn gn fgn where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 857 | "fn = zorder f z" and "gn = zorder g z" and "fgn = zorder fg z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 858 | define fp gp fgp where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 859 | "fp = zor_poly f z" and "gp = zor_poly g z" and "fgp = zor_poly fg z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 860 | have f_nconst:"\<exists>\<^sub>Fw in (at z). f w \<noteq> 0" and g_nconst:"\<exists>\<^sub>Fw in (at z).g w\<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 861 | using fg_nconst by (auto elim!:frequently_elim1) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 862 | obtain fr where [simp]:"fp z \<noteq> 0" and "fr > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 863 | and fr: "fp holomorphic_on cball z fr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 864 |                   "\<forall>w\<in>cball z fr - {z}. f w = fp w * (w - z) powr of_int fn \<and> fp w \<noteq> 0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 865 | using zorder_exist[OF f_iso f_ness f_nconst,folded fp_def fn_def] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 866 | obtain gr where [simp]:"gp z \<noteq> 0" and "gr > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 867 | and gr: "gp holomorphic_on cball z gr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 868 |                   "\<forall>w\<in>cball z gr - {z}. g w = gp w * (w - z) powr of_int gn \<and> gp w \<noteq> 0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 869 | using zorder_exist[OF g_iso g_ness g_nconst,folded gn_def gp_def] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 870 | define r1 where "r1=min fr gr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 871 | have "r1>0" unfolding r1_def using \<open>fr>0\<close> \<open>gr>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 872 | have fg_times:"fg w = (fp w * gp w) * (w - z) powr (of_int (fn+gn))" and fgp_nz:"fp w*gp w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 873 |     when "w\<in>ball z r1 - {z}" for w
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 874 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 875 | have "f w = fp w * (w - z) powr of_int fn" "fp w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 876 | using fr(2)[rule_format,of w] that unfolding r1_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 877 | moreover have "g w = gp w * (w - z) powr of_int gn" "gp w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 878 | using gr(2)[rule_format, of w] that unfolding r1_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 879 | ultimately show "fg w = (fp w * gp w) * (w - z) powr (of_int (fn+gn))" "fp w*gp w\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 880 | unfolding fg_def by (auto simp add:powr_add) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 881 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 882 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 883 | obtain fgr where [simp]:"fgp z \<noteq> 0" and "fgr > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 884 | and fgr: "fgp holomorphic_on cball z fgr" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 885 |                   "\<forall>w\<in>cball z fgr - {z}. fg w = fgp w * (w - z) powr of_int fgn \<and> fgp w \<noteq> 0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 886 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 887 | have "fgp z \<noteq> 0 \<and> (\<exists>r>0. fgp holomorphic_on cball z r | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 888 |             \<and> (\<forall>w\<in>cball z r - {z}. fg w = fgp w * (w - z) powr of_int fgn \<and> fgp w \<noteq> 0))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 889 | apply (rule zorder_exist[of fg z, folded fgn_def fgp_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 890 | subgoal unfolding fg_def using isolated_singularity_at_times[OF f_iso g_iso] . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 891 | subgoal unfolding fg_def using not_essential_times[OF f_ness g_ness f_iso g_iso] . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 892 | subgoal unfolding fg_def using fg_nconst . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 893 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 894 | then show ?thesis using that by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 895 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 896 | define r2 where "r2 = min fgr r1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 897 | have "r2>0" using \<open>r1>0\<close> \<open>fgr>0\<close> unfolding r2_def by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 898 | show "fgn = fn + gn " | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 899 | apply (rule holomorphic_factor_unique[of r2 fgp z "\<lambda>w. fp w * gp w" fg]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 900 | subgoal using \<open>r2>0\<close> by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 901 | subgoal by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 902 | subgoal by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 903 | subgoal | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 904 | proof (rule ballI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 905 |       fix w assume "w \<in> ball z r2 - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 906 |       then have "w \<in> ball z r1 - {z}" "w \<in> cball z fgr - {z}"  unfolding r2_def by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 907 | from fg_times[OF this(1)] fgp_nz[OF this(1)] fgr(2)[rule_format,OF this(2)] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 908 | show "fg w = fgp w * (w - z) powr of_int fgn \<and> fgp w \<noteq> 0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 909 | \<and> fg w = fp w * gp w * (w - z) powr of_int (fn + gn) \<and> fp w * gp w \<noteq> 0" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 910 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 911 | subgoal using fgr(1) unfolding r2_def r1_def by (auto intro!:holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 912 | subgoal using fr(1) gr(1) unfolding r2_def r1_def by (auto intro!:holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 913 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 914 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 915 |   have "fgp w = fp w *gp w" when "w\<in>ball z r2-{z}" for w
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 916 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 917 |     have "w \<in> ball z r1 - {z}" "w \<in> cball z fgr - {z}" "w\<noteq>z" using that  unfolding r2_def by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 918 | from fg_times[OF this(1)] fgp_nz[OF this(1)] fgr(2)[rule_format,OF this(2)] \<open>fgn = fn + gn\<close> \<open>w\<noteq>z\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 919 | show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 920 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 921 | then show "\<forall>\<^sub>Fw in (at z). fgp w = fp w * gp w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 922 | using \<open>r2>0\<close> unfolding eventually_at by (auto simp add:dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 923 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 924 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 925 | lemma | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 926 | fixes f g::"complex \<Rightarrow> complex" and z::complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 927 | assumes f_iso:"isolated_singularity_at f z" and g_iso:"isolated_singularity_at g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 928 | and f_ness:"not_essential f z" and g_ness:"not_essential g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 929 | and fg_nconst: "\<exists>\<^sub>Fw in (at z). f w * g w\<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 930 | shows zorder_divide:"zorder (\<lambda>w. f w / g w) z = zorder f z - zorder g z" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 931 | zor_poly_divide:"\<forall>\<^sub>Fw in (at z). zor_poly (\<lambda>w. f w / g w) z w | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 932 | = zor_poly f z w / zor_poly g z w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 933 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 934 | have f_nconst:"\<exists>\<^sub>Fw in (at z). f w \<noteq> 0" and g_nconst:"\<exists>\<^sub>Fw in (at z).g w\<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 935 | using fg_nconst by (auto elim!:frequently_elim1) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 936 | define vg where "vg=(\<lambda>w. inverse (g w))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 937 | have "zorder (\<lambda>w. f w * vg w) z = zorder f z + zorder vg z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 938 | apply (rule zorder_times[OF f_iso _ f_ness,of vg]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 939 | subgoal unfolding vg_def using isolated_singularity_at_inverse[OF g_iso g_ness] . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 940 | subgoal unfolding vg_def using not_essential_inverse[OF g_ness g_iso] . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 941 | subgoal unfolding vg_def using fg_nconst by (auto elim!:frequently_elim1) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 942 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 943 | then show "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 | 944 | using zorder_inverse[OF g_iso g_ness g_nconst,folded vg_def] unfolding vg_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 945 | by (auto simp add:field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 946 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 947 | have "\<forall>\<^sub>F w in at z. zor_poly (\<lambda>w. f w * vg w) z w = zor_poly f z w * zor_poly vg z w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 948 | apply (rule zor_poly_times[OF f_iso _ f_ness,of vg]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 949 | subgoal unfolding vg_def using isolated_singularity_at_inverse[OF g_iso g_ness] . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 950 | subgoal unfolding vg_def using not_essential_inverse[OF g_ness g_iso] . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 951 | subgoal unfolding vg_def using fg_nconst by (auto elim!:frequently_elim1) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 952 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 953 | then show "\<forall>\<^sub>Fw in (at z). zor_poly (\<lambda>w. f w / g w) z w = zor_poly f z w / zor_poly g z w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 954 | using zor_poly_inverse[OF g_iso g_ness g_nconst,folded vg_def] unfolding vg_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 955 | apply eventually_elim | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 956 | by (auto simp add:field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 957 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 958 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 959 | lemma zorder_exist_zero: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 960 | fixes f::"complex \<Rightarrow> complex" and z::complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 961 | defines "n\<equiv>zorder f z" and "g\<equiv>zor_poly f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 962 | assumes holo: "f holomorphic_on s" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 963 | "open s" "connected s" "z\<in>s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 964 | and non_const: "\<exists>w\<in>s. f w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 965 | shows "(if f z=0 then n > 0 else n=0) \<and> (\<exists>r. r>0 \<and> cball z r \<subseteq> s \<and> g holomorphic_on cball z r | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 966 | \<and> (\<forall>w\<in>cball z r. f w = g w * (w-z) ^ nat n \<and> g w \<noteq>0))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 967 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 968 | obtain r where "g z \<noteq> 0" and r: "r>0" "cball z r \<subseteq> s" "g holomorphic_on cball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 969 |             "(\<forall>w\<in>cball z r - {z}. f w = g w * (w - z) powr of_int n \<and> g w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 970 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 971 | have "g z \<noteq> 0 \<and> (\<exists>r>0. g holomorphic_on cball z r | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 972 |             \<and> (\<forall>w\<in>cball z r - {z}. f w = g w * (w - z) powr of_int n \<and> g w \<noteq> 0))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 973 | proof (rule zorder_exist[of f z,folded g_def n_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 974 | show "isolated_singularity_at f z" unfolding isolated_singularity_at_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 975 | using holo assms(4,6) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 976 | by (meson Diff_subset open_ball analytic_on_holomorphic holomorphic_on_subset openE) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 977 | show "not_essential f z" unfolding not_essential_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 978 | using assms(4,6) at_within_open continuous_on holo holomorphic_on_imp_continuous_on | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 979 | by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 980 | 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 | 981 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 982 | obtain w where "w\<in>s" "f w\<noteq>0" using non_const by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 983 | then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 984 | by (rule non_zero_neighbour_alt[OF holo \<open>open s\<close> \<open>connected s\<close> \<open>z\<in>s\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 985 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 986 | then show "\<exists>\<^sub>F w in at z. f w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 987 | apply (elim eventually_frequentlyE) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 988 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 989 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 990 | then obtain r1 where "g z \<noteq> 0" "r1>0" and r1:"g holomorphic_on cball z r1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 991 |             "(\<forall>w\<in>cball z r1 - {z}. f w = g w * (w - z) powr of_int n \<and> g w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 992 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 993 | obtain r2 where r2: "r2>0" "cball z r2 \<subseteq> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 994 | using assms(4,6) open_contains_cball_eq by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 995 | define r3 where "r3=min r1 r2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 996 | have "r3>0" "cball z r3 \<subseteq> s" using \<open>r1>0\<close> r2 unfolding r3_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 997 | moreover have "g holomorphic_on cball z r3" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 998 | using r1(1) unfolding r3_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 999 |     moreover have "(\<forall>w\<in>cball z r3 - {z}. f w = g w * (w - z) powr of_int n \<and> g w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1000 | using r1(2) unfolding r3_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1001 | ultimately show ?thesis using that[of r3] \<open>g z\<noteq>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1002 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1003 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1004 | have if_0:"if f z=0 then n > 0 else n=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1005 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1006 | have "f\<midarrow> z \<rightarrow> f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1007 | by (metis assms(4,6,7) at_within_open continuous_on holo holomorphic_on_imp_continuous_on) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1008 | then have "(\<lambda>w. g w * (w - z) powr of_int n) \<midarrow>z\<rightarrow> f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1009 | apply (elim Lim_transform_within_open[where s="ball z r"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1010 | using r by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1011 | moreover have "g \<midarrow>z\<rightarrow>g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1012 | by (metis (mono_tags, lifting) open_ball at_within_open_subset | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1013 | ball_subset_cball centre_in_ball continuous_on holomorphic_on_imp_continuous_on r(1,3) subsetCE) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1014 | ultimately have "(\<lambda>w. (g w * (w - z) powr of_int n) / g w) \<midarrow>z\<rightarrow> f z/g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1015 | apply (rule_tac tendsto_divide) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1016 | using \<open>g z\<noteq>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1017 | then have powr_tendsto:"(\<lambda>w. (w - z) powr of_int n) \<midarrow>z\<rightarrow> f z/g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1018 | apply (elim Lim_transform_within_open[where s="ball z r"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1019 | using r by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1020 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1021 | have ?thesis when "n\<ge>0" "f z=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1022 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1023 | have "(\<lambda>w. (w - z) ^ nat n) \<midarrow>z\<rightarrow> f z/g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1024 | using powr_tendsto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1025 | apply (elim Lim_transform_within[where d=r]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1026 | by (auto simp add: powr_of_int \<open>n\<ge>0\<close> \<open>r>0\<close>) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1027 | then have *:"(\<lambda>w. (w - z) ^ nat n) \<midarrow>z\<rightarrow> 0" using \<open>f z=0\<close> by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1028 | moreover have False when "n=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1029 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1030 | have "(\<lambda>w. (w - z) ^ nat n) \<midarrow>z\<rightarrow> 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1031 | using \<open>n=0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1032 | then show False using * using LIM_unique zero_neq_one by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1033 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1034 | ultimately show ?thesis using that by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1035 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1036 | moreover have ?thesis when "n\<ge>0" "f z\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1037 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1038 | have False when "n>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1039 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1040 | have "(\<lambda>w. (w - z) ^ nat n) \<midarrow>z\<rightarrow> f z/g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1041 | using powr_tendsto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1042 | apply (elim Lim_transform_within[where d=r]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1043 | by (auto simp add: powr_of_int \<open>n\<ge>0\<close> \<open>r>0\<close>) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1044 | moreover have "(\<lambda>w. (w - z) ^ nat n) \<midarrow>z\<rightarrow> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1045 | using \<open>n>0\<close> by (auto intro!:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1046 | ultimately show False using \<open>f z\<noteq>0\<close> \<open>g z\<noteq>0\<close> using LIM_unique divide_eq_0_iff by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1047 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1048 | then show ?thesis using that by force | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1049 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1050 | moreover have False when "n<0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1051 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1052 | have "(\<lambda>w. inverse ((w - z) ^ nat (- n))) \<midarrow>z\<rightarrow> f z/g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1053 | "(\<lambda>w.((w - z) ^ nat (- n))) \<midarrow>z\<rightarrow> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1054 | subgoal using powr_tendsto powr_of_int that | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1055 | by (elim Lim_transform_within_open[where s=UNIV],auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1056 | subgoal using that by (auto intro!:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1057 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1058 | from tendsto_mult[OF this,simplified] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1059 | have "(\<lambda>x. inverse ((x - z) ^ nat (- n)) * (x - z) ^ nat (- n)) \<midarrow>z\<rightarrow> 0" . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1060 | then have "(\<lambda>x. 1::complex) \<midarrow>z\<rightarrow> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1061 | by (elim Lim_transform_within_open[where s=UNIV],auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1062 | then show False using LIM_const_eq by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1063 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1064 | ultimately show ?thesis by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1065 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1066 | moreover have "f w = g w * (w-z) ^ nat n \<and> g w \<noteq>0" when "w\<in>cball z r" for w | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1067 | proof (cases "w=z") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1068 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1069 | then have "f \<midarrow>z\<rightarrow>f w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1070 | using assms(4,6) at_within_open continuous_on holo holomorphic_on_imp_continuous_on by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1071 | then have "(\<lambda>w. g w * (w-z) ^ nat n) \<midarrow>z\<rightarrow>f w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1072 | proof (elim Lim_transform_within[OF _ \<open>r>0\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1073 | fix x assume "0 < dist x z" "dist x z < r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1074 |       then have "x \<in> cball z r - {z}" "x\<noteq>z"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1075 | unfolding cball_def by (auto simp add: dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1076 | then have "f x = g x * (x - z) powr of_int n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1077 | using r(4)[rule_format,of x] by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1078 | also have "... = g x * (x - z) ^ nat n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1079 | apply (subst powr_of_int) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1080 | using if_0 \<open>x\<noteq>z\<close> by (auto split:if_splits) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1081 | finally show "f x = g x * (x - z) ^ nat n" . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1082 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1083 | moreover have "(\<lambda>w. g w * (w-z) ^ nat n) \<midarrow>z\<rightarrow> g w * (w-z) ^ nat n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1084 | using True apply (auto intro!:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1085 | by (metis open_ball at_within_open_subset ball_subset_cball centre_in_ball | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1086 | continuous_on holomorphic_on_imp_continuous_on r(1) r(3) that) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1087 | ultimately have "f w = g w * (w-z) ^ nat n" using LIM_unique by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1088 | then show ?thesis using \<open>g z\<noteq>0\<close> True by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1089 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1090 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1091 | then have "f w = g w * (w - z) powr of_int n \<and> g w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1092 | using r(4) that by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1093 | then show ?thesis using False if_0 powr_of_int by (auto split:if_splits) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1094 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1095 | ultimately show ?thesis using r by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1096 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1097 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1098 | lemma zorder_exist_pole: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1099 | fixes f::"complex \<Rightarrow> complex" and z::complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1100 | defines "n\<equiv>zorder f z" and "g\<equiv>zor_poly f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1101 |   assumes  holo: "f holomorphic_on s-{z}" and
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1102 | "open s" "z\<in>s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1103 | and "is_pole f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1104 | shows "n < 0 \<and> g z\<noteq>0 \<and> (\<exists>r. r>0 \<and> cball z r \<subseteq> s \<and> g holomorphic_on cball z r | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1105 |     \<and> (\<forall>w\<in>cball z r - {z}. f w  = g w / (w-z) ^ nat (- n) \<and> g w \<noteq>0))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1106 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1107 | obtain r where "g z \<noteq> 0" and r: "r>0" "cball z r \<subseteq> s" "g holomorphic_on cball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1108 |             "(\<forall>w\<in>cball z r - {z}. f w = g w * (w - z) powr of_int n \<and> g w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1109 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1110 | have "g z \<noteq> 0 \<and> (\<exists>r>0. g holomorphic_on cball z r | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1111 |             \<and> (\<forall>w\<in>cball z r - {z}. f w = g w * (w - z) powr of_int n \<and> g w \<noteq> 0))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1112 | proof (rule zorder_exist[of f z,folded g_def n_def]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1113 | show "isolated_singularity_at f z" unfolding isolated_singularity_at_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1114 | using holo assms(4,5) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1115 | by (metis analytic_on_holomorphic centre_in_ball insert_Diff openE open_delete subset_insert_iff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1116 | show "not_essential f z" unfolding not_essential_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1117 | using assms(4,6) at_within_open continuous_on holo holomorphic_on_imp_continuous_on | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1118 | by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1119 | from non_zero_neighbour_pole[OF \<open>is_pole f z\<close>] show "\<exists>\<^sub>F w in at z. f w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1120 | apply (elim eventually_frequentlyE) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1121 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1122 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1123 | then obtain r1 where "g z \<noteq> 0" "r1>0" and r1:"g holomorphic_on cball z r1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1124 |             "(\<forall>w\<in>cball z r1 - {z}. f w = g w * (w - z) powr of_int n \<and> g w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1125 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1126 | obtain r2 where r2: "r2>0" "cball z r2 \<subseteq> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1127 | using assms(4,5) open_contains_cball_eq by metis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1128 | define r3 where "r3=min r1 r2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1129 | have "r3>0" "cball z r3 \<subseteq> s" using \<open>r1>0\<close> r2 unfolding r3_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1130 | moreover have "g holomorphic_on cball z r3" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1131 | using r1(1) unfolding r3_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1132 |     moreover have "(\<forall>w\<in>cball z r3 - {z}. f w = g w * (w - z) powr of_int n \<and> g w \<noteq> 0)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1133 | using r1(2) unfolding r3_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1134 | ultimately show ?thesis using that[of r3] \<open>g z\<noteq>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1135 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1136 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1137 | have "n<0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1138 | proof (rule ccontr) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1139 | assume " \<not> n < 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1140 | define c where "c=(if n=0 then g z else 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1141 | have [simp]:"g \<midarrow>z\<rightarrow> g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1142 | by (metis open_ball at_within_open ball_subset_cball centre_in_ball | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1143 | continuous_on holomorphic_on_imp_continuous_on holomorphic_on_subset r(1) r(3) ) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1144 | have "\<forall>\<^sub>F x in at z. f x = g x * (x - z) ^ nat n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1145 | unfolding eventually_at_topological | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1146 | apply (rule_tac exI[where x="ball z r"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1147 | using r powr_of_int \<open>\<not> n < 0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1148 | moreover have "(\<lambda>x. g x * (x - z) ^ nat n) \<midarrow>z\<rightarrow>c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1149 | proof (cases "n=0") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1150 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1151 | then show ?thesis unfolding c_def by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1152 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1153 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1154 | then have "(\<lambda>x. (x - z) ^ nat n) \<midarrow>z\<rightarrow> 0" using \<open>\<not> n < 0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1155 | by (auto intro!:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1156 | from tendsto_mult[OF _ this,of g "g z",simplified] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1157 | show ?thesis unfolding c_def using False by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1158 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1159 | ultimately have "f \<midarrow>z\<rightarrow>c" using tendsto_cong by fast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1160 | then show False using \<open>is_pole f z\<close> at_neq_bot not_tendsto_and_filterlim_at_infinity | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1161 | unfolding is_pole_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1162 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1163 |   moreover have "\<forall>w\<in>cball z r - {z}. f w  = g w / (w-z) ^ nat (- n) \<and> g w \<noteq>0"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1164 | using r(4) \<open>n<0\<close> powr_of_int | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1165 | by (metis Diff_iff divide_inverse eq_iff_diff_eq_0 insert_iff linorder_not_le) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1166 | ultimately show ?thesis using r(1-3) \<open>g z\<noteq>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1167 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1168 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1169 | lemma zorder_eqI: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1170 | assumes "open s" "z \<in> s" "g holomorphic_on s" "g z \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1171 | assumes fg_eq:"\<And>w. \<lbrakk>w \<in> s;w\<noteq>z\<rbrakk> \<Longrightarrow> f w = g w * (w - z) powr n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1172 | shows "zorder f z = n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1173 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1174 | have "continuous_on s g" by (rule holomorphic_on_imp_continuous_on) fact | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1175 |   moreover have "open (-{0::complex})" by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1176 |   ultimately have "open ((g -` (-{0})) \<inter> s)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1177 | unfolding continuous_on_open_vimage[OF \<open>open s\<close>] by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1178 |   moreover from assms have "z \<in> (g -` (-{0})) \<inter> s" by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1179 |   ultimately obtain r where r: "r > 0" "cball z r \<subseteq>  s \<inter> (g -` (-{0}))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1180 | unfolding open_contains_cball by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1181 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1182 | let ?gg= "(\<lambda>w. g w * (w - z) powr n)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1183 | define P where "P = (\<lambda>n g r. 0 < r \<and> g holomorphic_on cball z r \<and> g z\<noteq>0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1184 |           \<and> (\<forall>w\<in>cball z r - {z}. f w = g w * (w-z) powr (of_int n) \<and> g w\<noteq>0))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1185 | have "P n g r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1186 | unfolding P_def using r assms(3,4,5) by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1187 | then have "\<exists>g r. P n g r" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1188 | moreover have unique: "\<exists>!n. \<exists>g r. P n g r" unfolding P_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1189 | proof (rule holomorphic_factor_puncture) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1190 |     have "ball z r-{z} \<subseteq> s" using r using ball_subset_cball by blast
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1191 |     then have "?gg holomorphic_on ball z r-{z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1192 | using \<open>g holomorphic_on s\<close> r by (auto intro!: holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1193 |     then have "f holomorphic_on ball z r - {z}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1194 | apply (elim holomorphic_transform) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1195 |       using fg_eq \<open>ball z r-{z} \<subseteq> s\<close> by auto
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1196 | then show "isolated_singularity_at f z" unfolding isolated_singularity_at_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1197 | using analytic_on_open open_delete r(1) by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1198 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1199 | have "not_essential ?gg z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1200 | proof (intro singularity_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1201 | show "not_essential g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1202 | by (meson \<open>continuous_on s g\<close> assms(1) assms(2) continuous_on_eq_continuous_at | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1203 | isCont_def not_essential_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1204 | show " \<forall>\<^sub>F w in at z. w - z \<noteq> 0" by (simp add: eventually_at_filter) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1205 | then show "LIM w at z. w - z :> at 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1206 | unfolding filterlim_at by (auto intro:tendsto_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1207 | show "isolated_singularity_at g z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1208 | by (meson Diff_subset open_ball analytic_on_holomorphic | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1209 | assms(1,2,3) holomorphic_on_subset isolated_singularity_at_def openE) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1210 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1211 | then show "not_essential f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1212 | apply (elim not_essential_transform) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1213 | unfolding eventually_at using assms(1,2) assms(5)[symmetric] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1214 | by (metis dist_commute mem_ball openE subsetCE) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1215 | show "\<exists>\<^sub>F w in at z. f w \<noteq> 0" unfolding frequently_at | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1216 | proof (rule,rule) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1217 | fix d::real assume "0 < d" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1218 | define z' where "z'=z+min d r / 2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1219 | have "z' \<noteq> z" " dist z' z < d " | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1220 | unfolding z'_def using \<open>d>0\<close> \<open>r>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1221 | by (auto simp add:dist_norm) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1222 | moreover have "f z' \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1223 | proof (subst fg_eq[OF _ \<open>z'\<noteq>z\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1224 | have "z' \<in> cball z r" unfolding z'_def using \<open>r>0\<close> \<open>d>0\<close> by (auto simp add:dist_norm) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1225 | then show " z' \<in> s" using r(2) by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1226 | show "g z' * (z' - z) powr of_int n \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1227 | using P_def \<open>P n g r\<close> \<open>z' \<in> cball z r\<close> calculation(1) by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1228 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1229 | ultimately show "\<exists>x\<in>UNIV. x \<noteq> z \<and> dist x z < d \<and> f x \<noteq> 0" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1230 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1231 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1232 | ultimately have "(THE n. \<exists>g r. P n g r) = n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1233 | by (rule_tac the1_equality) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1234 | then show ?thesis unfolding zorder_def P_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1235 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1236 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1237 | lemma simple_zeroI: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1238 | assumes "open s" "z \<in> s" "g holomorphic_on s" "g z \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1239 | assumes "\<And>w. w \<in> s \<Longrightarrow> f w = g w * (w - z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1240 | shows "zorder f z = 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1241 | using assms(1-4) by (rule zorder_eqI) (use assms(5) in auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1242 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1243 | lemma higher_deriv_power: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1244 | shows "(deriv ^^ j) (\<lambda>w. (w - z) ^ n) w = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1245 | pochhammer (of_nat (Suc n - j)) j * (w - z) ^ (n - j)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1246 | proof (induction j arbitrary: w) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1247 | case 0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1248 | thus ?case by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1249 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1250 | case (Suc j w) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1251 | have "(deriv ^^ Suc j) (\<lambda>w. (w - z) ^ n) w = deriv ((deriv ^^ j) (\<lambda>w. (w - z) ^ n)) w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1252 | by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1253 | also have "(deriv ^^ j) (\<lambda>w. (w - z) ^ n) = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1254 | (\<lambda>w. pochhammer (of_nat (Suc n - j)) j * (w - z) ^ (n - j))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1255 | using Suc by (intro Suc.IH ext) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1256 |   also {
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1257 | have "(\<dots> has_field_derivative of_nat (n - j) * | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1258 | pochhammer (of_nat (Suc n - j)) j * (w - z) ^ (n - Suc j)) (at w)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1259 | using Suc.prems by (auto intro!: derivative_eq_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1260 | also have "of_nat (n - j) * pochhammer (of_nat (Suc n - j)) j = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1261 | pochhammer (of_nat (Suc n - Suc j)) (Suc j)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1262 | by (cases "Suc j \<le> n", subst pochhammer_rec) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1263 | (insert Suc.prems, simp_all add: algebra_simps Suc_diff_le pochhammer_0_left) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1264 | finally have "deriv (\<lambda>w. pochhammer (of_nat (Suc n - j)) j * (w - z) ^ (n - j)) w = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1265 | \<dots> * (w - z) ^ (n - Suc j)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1266 | by (rule DERIV_imp_deriv) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1267 | } | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1268 | finally show ?case . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1269 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1270 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1271 | lemma zorder_zero_eqI: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1272 | assumes f_holo:"f holomorphic_on s" and "open s" "z \<in> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1273 | assumes zero: "\<And>i. i < nat n \<Longrightarrow> (deriv ^^ i) f z = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1274 | assumes nz: "(deriv ^^ nat n) f z \<noteq> 0" and "n\<ge>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1275 | shows "zorder f z = n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1276 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1277 | obtain r where [simp]:"r>0" and "ball z r \<subseteq> s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1278 | using \<open>open s\<close> \<open>z\<in>s\<close> openE by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1279 | have nz':"\<exists>w\<in>ball z r. f w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1280 | proof (rule ccontr) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1281 | assume "\<not> (\<exists>w\<in>ball z r. f w \<noteq> 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1282 | then have "eventually (\<lambda>u. f u = 0) (nhds z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1283 | using \<open>r>0\<close> unfolding eventually_nhds | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1284 | apply (rule_tac x="ball z r" in exI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1285 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1286 | then have "(deriv ^^ nat n) f z = (deriv ^^ nat n) (\<lambda>_. 0) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1287 | by (intro higher_deriv_cong_ev) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1288 | also have "(deriv ^^ nat n) (\<lambda>_. 0) z = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1289 | by (induction n) simp_all | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1290 | finally show False using nz by contradiction | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1291 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1292 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1293 | define zn g where "zn = zorder f z" and "g = zor_poly f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1294 | obtain e where e_if:"if f z = 0 then 0 < zn else zn = 0" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1295 | [simp]:"e>0" and "cball z e \<subseteq> ball z r" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1296 | g_holo:"g holomorphic_on cball z e" and | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1297 | e_fac:"(\<forall>w\<in>cball z e. f w = g w * (w - z) ^ nat zn \<and> g w \<noteq> 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1298 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1299 | have "f holomorphic_on ball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1300 | using f_holo \<open>ball z r \<subseteq> s\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1301 | from that zorder_exist_zero[of f "ball z r" z,simplified,OF this nz',folded zn_def g_def] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1302 | show ?thesis by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1303 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1304 | from this(1,2,5) have "zn\<ge>0" "g z\<noteq>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1305 | subgoal by (auto split:if_splits) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1306 | subgoal using \<open>0 < e\<close> ball_subset_cball centre_in_ball e_fac by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1307 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1308 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1309 | define A where "A = (\<lambda>i. of_nat (i choose (nat zn)) * fact (nat zn) * (deriv ^^ (i - nat zn)) g z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1310 | have deriv_A:"(deriv ^^ i) f z = (if zn \<le> int i then A i else 0)" for i | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1311 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1312 | have "eventually (\<lambda>w. w \<in> ball z e) (nhds z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1313 | using \<open>cball z e \<subseteq> ball z r\<close> \<open>e>0\<close> by (intro eventually_nhds_in_open) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1314 | hence "eventually (\<lambda>w. f w = (w - z) ^ (nat zn) * g w) (nhds z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1315 | apply eventually_elim | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1316 | by (use e_fac in auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1317 | hence "(deriv ^^ i) f z = (deriv ^^ i) (\<lambda>w. (w - z) ^ nat zn * g w) z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1318 | by (intro higher_deriv_cong_ev) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1319 | also have "\<dots> = (\<Sum>j=0..i. of_nat (i choose j) * | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1320 | (deriv ^^ j) (\<lambda>w. (w - z) ^ nat zn) z * (deriv ^^ (i - j)) g z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1321 | using g_holo \<open>e>0\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1322 | by (intro higher_deriv_mult[of _ "ball z e"]) (auto intro!: holomorphic_intros) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1323 | also have "\<dots> = (\<Sum>j=0..i. if j = nat zn then | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1324 | of_nat (i choose nat zn) * fact (nat zn) * (deriv ^^ (i - nat zn)) g z else 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1325 | proof (intro sum.cong refl, goal_cases) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1326 | case (1 j) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1327 | have "(deriv ^^ j) (\<lambda>w. (w - z) ^ nat zn) z = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1328 | pochhammer (of_nat (Suc (nat zn) - j)) j * 0 ^ (nat zn - j)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1329 | by (subst higher_deriv_power) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1330 | also have "\<dots> = (if j = nat zn then fact j else 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1331 | by (auto simp: not_less pochhammer_0_left pochhammer_fact) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1332 | also have "of_nat (i choose j) * \<dots> * (deriv ^^ (i - j)) g z = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1333 | (if j = nat zn then of_nat (i choose (nat zn)) * fact (nat zn) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1334 | * (deriv ^^ (i - nat zn)) g z else 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1335 | by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1336 | finally show ?case . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1337 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1338 | also have "\<dots> = (if i \<ge> zn then A i else 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1339 | by (auto simp: A_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1340 | finally show "(deriv ^^ i) f z = \<dots>" . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1341 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1342 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1343 | have False when "n<zn" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1344 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1345 | have "(deriv ^^ nat n) f z = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1346 | using deriv_A[of "nat n"] that \<open>n\<ge>0\<close> by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1347 | with nz show False by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1348 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1349 | moreover have "n\<le>zn" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1350 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1351 | have "g z \<noteq> 0" using e_fac[rule_format,of z] \<open>e>0\<close> by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1352 | then have "(deriv ^^ nat zn) f z \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1353 | using deriv_A[of "nat zn"] by(auto simp add:A_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1354 | then have "nat zn \<ge> nat n" using zero[of "nat zn"] by linarith | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1355 | moreover have "zn\<ge>0" using e_if by (auto split:if_splits) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1356 | ultimately show ?thesis using nat_le_eq_zle by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1357 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1358 | ultimately show ?thesis unfolding zn_def by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1359 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1360 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1361 | lemma | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1362 | assumes "eventually (\<lambda>z. f z = g z) (at z)" "z = z'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1363 | shows zorder_cong:"zorder f z = zorder g z'" and zor_poly_cong:"zor_poly f z = zor_poly g z'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1364 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1365 | define P where "P = (\<lambda>ff n h r. 0 < r \<and> h holomorphic_on cball z r \<and> h z\<noteq>0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1366 |                     \<and> (\<forall>w\<in>cball z r - {z}. ff w = h w * (w-z) powr (of_int n) \<and> h w\<noteq>0))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1367 | have "(\<exists>r. P f n h r) = (\<exists>r. P g n h r)" for n h | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1368 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1369 | have *: "\<exists>r. P g n h r" if "\<exists>r. P f n h r" and "eventually (\<lambda>x. f x = g x) (at z)" for f g | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1370 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1371 | from that(1) obtain r1 where r1_P:"P f n h r1" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1372 | from that(2) obtain r2 where "r2>0" and r2_dist:"\<forall>x. x \<noteq> z \<and> dist x z \<le> r2 \<longrightarrow> f x = g x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1373 | unfolding eventually_at_le by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1374 | define r where "r=min r1 r2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1375 | have "r>0" "h z\<noteq>0" using r1_P \<open>r2>0\<close> unfolding r_def P_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1376 | moreover have "h holomorphic_on cball z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1377 | using r1_P unfolding P_def r_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1378 |       moreover have "g w = h w * (w - z) powr of_int n \<and> h w \<noteq> 0" when "w\<in>cball z r - {z}" for w
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1379 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1380 | have "f w = h w * (w - z) powr of_int n \<and> h w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1381 | using r1_P that unfolding P_def r_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1382 | moreover have "f w=g w" using r2_dist[rule_format,of w] that unfolding r_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1383 | by (simp add: dist_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1384 | ultimately show ?thesis by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1385 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1386 | ultimately show ?thesis unfolding P_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1387 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1388 | 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 | 1389 | by (simp add: eq_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1390 | show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1391 | by (rule iffI[OF *[OF _ assms(1)] *[OF _ eq']]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1392 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1393 | then show "zorder f z = zorder g z'" "zor_poly f z = zor_poly g z'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1394 | using \<open>z=z'\<close> unfolding P_def zorder_def zor_poly_def by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1395 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1396 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1397 | lemma zorder_nonzero_div_power: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1398 | assumes "open s" "z \<in> s" "f holomorphic_on s" "f z \<noteq> 0" "n > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1399 | shows "zorder (\<lambda>w. f w / (w - z) ^ n) z = - n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1400 | apply (rule zorder_eqI[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>f holomorphic_on s\<close> \<open>f z\<noteq>0\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1401 | apply (subst powr_of_int) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1402 | using \<open>n>0\<close> by (auto simp add:field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1403 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1404 | lemma zor_poly_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1405 | assumes "isolated_singularity_at f z" "not_essential f z" "\<exists>\<^sub>F w in at z. f w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1406 | shows "eventually (\<lambda>w. zor_poly f z w = f w * (w - z) powr - zorder f z) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1407 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1408 | obtain r where r:"r>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1409 |        "(\<forall>w\<in>cball z r - {z}. f w = zor_poly f z w * (w - z) powr of_int (zorder f z))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1410 | using zorder_exist[OF assms] by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1411 |   then have *: "\<forall>w\<in>ball z r - {z}. zor_poly f z w = f w * (w - z) powr - zorder f z"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1412 | by (auto simp: field_simps powr_minus) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1413 |   have "eventually (\<lambda>w. w \<in> ball z r - {z}) (at z)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1414 | using r eventually_at_ball'[of r z UNIV] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1415 | thus ?thesis by eventually_elim (insert *, auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1416 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1417 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1418 | lemma zor_poly_zero_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1419 | assumes "f holomorphic_on s" "open s" "connected s" "z \<in> s" "\<exists>w\<in>s. f w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1420 | shows "eventually (\<lambda>w. zor_poly f z w = f w / (w - z) ^ nat (zorder f z)) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1421 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1422 | obtain r where r:"r>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1423 |        "(\<forall>w\<in>cball z r - {z}. f w = zor_poly f z w * (w - z) ^ nat (zorder f z))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1424 | using zorder_exist_zero[OF assms] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1425 |   then have *: "\<forall>w\<in>ball z r - {z}. zor_poly f z w = f w / (w - z) ^ nat (zorder f z)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1426 | by (auto simp: field_simps powr_minus) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1427 |   have "eventually (\<lambda>w. w \<in> ball z r - {z}) (at z)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1428 | using r eventually_at_ball'[of r z UNIV] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1429 | thus ?thesis by eventually_elim (insert *, auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1430 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1431 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1432 | lemma zor_poly_pole_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1433 | assumes f_iso:"isolated_singularity_at f z" "is_pole f z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1434 | shows "eventually (\<lambda>w. zor_poly f z w = f w * (w - z) ^ nat (- zorder f z)) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1435 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1436 |   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 | 1437 | 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 | 1438 | obtain r where r:"r>0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1439 |        "(\<forall>w\<in>cball z r - {z}. f w = zor_poly f z w / (w - z) ^ nat (- zorder f z))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1440 | using zorder_exist_pole[OF f_holo,simplified,OF \<open>is_pole f z\<close>] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1441 |   then have *: "\<forall>w\<in>ball z r - {z}. zor_poly f z w = f w * (w - z) ^ nat (- zorder f z)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1442 | by (auto simp: field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1443 |   have "eventually (\<lambda>w. w \<in> ball z r - {z}) (at z)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1444 | using r eventually_at_ball'[of r z UNIV] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1445 | thus ?thesis by eventually_elim (insert *, auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1446 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1447 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1448 | lemma zor_poly_eqI: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1449 | fixes f :: "complex \<Rightarrow> complex" and z0 :: complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1450 | defines "n \<equiv> zorder f z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1451 | assumes "isolated_singularity_at f z0" "not_essential f z0" "\<exists>\<^sub>F w in at z0. f w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1452 | assumes lim: "((\<lambda>x. f (g x) * (g x - z0) powr - n) \<longlongrightarrow> c) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1453 | assumes g: "filterlim g (at z0) F" and "F \<noteq> bot" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1454 | shows "zor_poly f z0 z0 = c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1455 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1456 | from zorder_exist[OF assms(2-4)] obtain r where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1457 | r: "r > 0" "zor_poly f z0 holomorphic_on cball z0 r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1458 |        "\<And>w. w \<in> cball z0 r - {z0} \<Longrightarrow> f w = zor_poly f z0 w * (w - z0) powr n"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1459 | unfolding n_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1460 | from r(1) have "eventually (\<lambda>w. w \<in> ball z0 r \<and> w \<noteq> z0) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1461 | using eventually_at_ball'[of r z0 UNIV] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1462 | hence "eventually (\<lambda>w. zor_poly f z0 w = f w * (w - z0) powr - n) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1463 | by eventually_elim (insert r, auto simp: field_simps powr_minus) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1464 | moreover have "continuous_on (ball z0 r) (zor_poly f z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1465 | using r by (intro holomorphic_on_imp_continuous_on) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1466 | with r(1,2) have "isCont (zor_poly f z0) z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1467 | by (auto simp: continuous_on_eq_continuous_at) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1468 | hence "(zor_poly f z0 \<longlongrightarrow> zor_poly f z0 z0) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1469 | unfolding isCont_def . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1470 | ultimately have "((\<lambda>w. f w * (w - z0) powr - n) \<longlongrightarrow> zor_poly f z0 z0) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1471 | by (blast intro: Lim_transform_eventually) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1472 | hence "((\<lambda>x. f (g x) * (g x - z0) powr - n) \<longlongrightarrow> zor_poly f z0 z0) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1473 | by (rule filterlim_compose[OF _ g]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1474 | from tendsto_unique[OF \<open>F \<noteq> bot\<close> this lim] show ?thesis . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1475 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1476 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1477 | lemma zor_poly_zero_eqI: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1478 | fixes f :: "complex \<Rightarrow> complex" and z0 :: complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1479 | defines "n \<equiv> zorder f z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1480 | assumes "f holomorphic_on A" "open A" "connected A" "z0 \<in> A" "\<exists>z\<in>A. f z \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1481 | assumes lim: "((\<lambda>x. f (g x) / (g x - z0) ^ nat n) \<longlongrightarrow> c) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1482 | assumes g: "filterlim g (at z0) F" and "F \<noteq> bot" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1483 | shows "zor_poly f z0 z0 = c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1484 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1485 | from zorder_exist_zero[OF assms(2-6)] obtain r where | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1486 | r: "r > 0" "cball z0 r \<subseteq> A" "zor_poly f z0 holomorphic_on cball z0 r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1487 | "\<And>w. w \<in> cball z0 r \<Longrightarrow> f w = zor_poly f z0 w * (w - z0) ^ nat n" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1488 | unfolding n_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1489 | from r(1) have "eventually (\<lambda>w. w \<in> ball z0 r \<and> w \<noteq> z0) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1490 | using eventually_at_ball'[of r z0 UNIV] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1491 | hence "eventually (\<lambda>w. zor_poly f z0 w = f w / (w - z0) ^ nat n) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1492 | by eventually_elim (insert r, auto simp: field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1493 | moreover have "continuous_on (ball z0 r) (zor_poly f z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1494 | using r by (intro holomorphic_on_imp_continuous_on) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1495 | with r(1,2) have "isCont (zor_poly f z0) z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1496 | by (auto simp: continuous_on_eq_continuous_at) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1497 | hence "(zor_poly f z0 \<longlongrightarrow> zor_poly f z0 z0) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1498 | unfolding isCont_def . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1499 | ultimately have "((\<lambda>w. f w / (w - z0) ^ nat n) \<longlongrightarrow> zor_poly f z0 z0) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1500 | by (blast intro: Lim_transform_eventually) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1501 | hence "((\<lambda>x. f (g x) / (g x - z0) ^ nat n) \<longlongrightarrow> zor_poly f z0 z0) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1502 | by (rule filterlim_compose[OF _ g]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1503 | from tendsto_unique[OF \<open>F \<noteq> bot\<close> this lim] show ?thesis . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1504 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1505 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1506 | lemma zor_poly_pole_eqI: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1507 | fixes f :: "complex \<Rightarrow> complex" and z0 :: complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1508 | defines "n \<equiv> zorder f z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1509 | assumes f_iso:"isolated_singularity_at f z0" and "is_pole f z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1510 | assumes lim: "((\<lambda>x. f (g x) * (g x - z0) ^ nat (-n)) \<longlongrightarrow> c) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1511 | assumes g: "filterlim g (at z0) F" and "F \<noteq> bot" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1512 | shows "zor_poly f z0 z0 = c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1513 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1514 | obtain r where r: "r > 0" "zor_poly f z0 holomorphic_on cball z0 r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1515 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1516 | have "\<exists>\<^sub>F w in at z0. f w \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1517 | using non_zero_neighbour_pole[OF \<open>is_pole f z0\<close>] by (auto elim:eventually_frequentlyE) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1518 | moreover have "not_essential f z0" unfolding not_essential_def using \<open>is_pole f z0\<close> by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1519 | ultimately show ?thesis using that zorder_exist[OF f_iso,folded n_def] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1520 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1521 | from r(1) have "eventually (\<lambda>w. w \<in> ball z0 r \<and> w \<noteq> z0) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1522 | using eventually_at_ball'[of r z0 UNIV] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1523 | have "eventually (\<lambda>w. zor_poly f z0 w = f w * (w - z0) ^ nat (-n)) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1524 | using zor_poly_pole_eq[OF f_iso \<open>is_pole f z0\<close>] unfolding n_def . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1525 | moreover have "continuous_on (ball z0 r) (zor_poly f z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1526 | using r by (intro holomorphic_on_imp_continuous_on) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1527 | with r(1,2) have "isCont (zor_poly f z0) z0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1528 | by (auto simp: continuous_on_eq_continuous_at) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1529 | hence "(zor_poly f z0 \<longlongrightarrow> zor_poly f z0 z0) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1530 | unfolding isCont_def . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1531 | ultimately have "((\<lambda>w. f w * (w - z0) ^ nat (-n)) \<longlongrightarrow> zor_poly f z0 z0) (at z0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1532 | by (blast intro: Lim_transform_eventually) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1533 | hence "((\<lambda>x. f (g x) * (g x - z0) ^ nat (-n)) \<longlongrightarrow> zor_poly f z0 z0) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1534 | by (rule filterlim_compose[OF _ g]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1535 | from tendsto_unique[OF \<open>F \<noteq> bot\<close> this lim] show ?thesis . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1536 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1537 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1538 | end |