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