# HG changeset patch # User paulson # Date 1737584547 0 # Node ID 1171ea4a23e4c7c13ef23012c092213b434a7e52 # Parent 067462a6a652b001b2dbd0f41f8f6b7ded04bfde more tidying diff -r 067462a6a652 -r 1171ea4a23e4 src/HOL/Complex_Analysis/Complex_Singularities.thy --- a/src/HOL/Complex_Analysis/Complex_Singularities.thy Sun Jan 19 18:18:07 2025 +0000 +++ b/src/HOL/Complex_Analysis/Complex_Singularities.thy Wed Jan 22 22:22:27 2025 +0000 @@ -4,9 +4,9 @@ subsection \Non-essential singular points\ -definition\<^marker>\tag important\ is_pole :: - "('a::topological_space \ 'b::real_normed_vector) \ 'a \ bool" where - "is_pole f a = (LIM x (at a). f x :> at_infinity)" +definition\<^marker>\tag important\ + is_pole :: "('a::topological_space \ 'b::real_normed_vector) \ 'a \ bool" + where "is_pole f a = (LIM x (at a). f x :> at_infinity)" lemma is_pole_cong: assumes "eventually (\x. f x = g x) (at a)" "a=b" @@ -24,10 +24,10 @@ by (metis add_diff_cancel_right' filterlim_shift_iff is_pole_def) lemma is_pole_tendsto: - fixes f::"('a::topological_space \ 'b::real_normed_div_algebra)" + fixes f:: "('a::topological_space \ 'b::real_normed_div_algebra)" shows "is_pole f x \ ((inverse o f) \ 0) (at x)" unfolding is_pole_def - by (auto simp add:filterlim_inverse_at_iff[symmetric] comp_def filterlim_at) + by (auto simp add: filterlim_inverse_at_iff[symmetric] comp_def filterlim_at) lemma is_pole_shift_0: fixes f :: "('a::real_normed_vector \ 'b::real_normed_vector)" @@ -46,9 +46,9 @@ lemma is_pole_inverse_holomorphic: assumes "open s" - and f_holo:"f holomorphic_on (s-{z})" - and pole:"is_pole f z" - and non_z:"\x\s-{z}. f x\0" + and f_holo: "f holomorphic_on (s-{z})" + and pole: "is_pole f z" + and non_z: "\x\s-{z}. f x\0" shows "(\x. if x=z then 0 else inverse (f x)) holomorphic_on s" proof - define g where "g \ \x. if x=z then 0 else inverse (f x)" @@ -56,14 +56,14 @@ by (simp add: g_def cong: LIM_cong) moreover have "continuous_on (s-{z}) f" using f_holo holomorphic_on_imp_continuous_on by auto hence "continuous_on (s-{z}) (inverse o f)" unfolding comp_def - by (auto elim!:continuous_on_inverse simp add:non_z) + by (auto elim!:continuous_on_inverse simp add: non_z) hence "continuous_on (s-{z}) g" unfolding g_def using continuous_on_eq by fastforce ultimately have "continuous_on s g" using open_delete[OF \open s\] \open s\ - by (auto simp add:continuous_on_eq_continuous_at) + by (auto simp add: continuous_on_eq_continuous_at) moreover have "(inverse o f) holomorphic_on (s-{z})" unfolding comp_def using f_holo - by (auto elim!:holomorphic_on_inverse simp add:non_z) + by (auto elim!:holomorphic_on_inverse simp add: non_z) hence "g holomorphic_on (s-{z})" using g_def holomorphic_transform by force ultimately show ?thesis unfolding g_def using \open s\ @@ -125,15 +125,15 @@ lemma is_pole_basic: assumes "f holomorphic_on A" "open A" "z \ A" "f z \ 0" "n > 0" - shows "is_pole (\w. f w / (w - z) ^ n) z" + shows "is_pole (\w. f w / (w-z) ^ n) z" proof (rule is_pole_divide) have "continuous_on A f" by (rule holomorphic_on_imp_continuous_on) fact with assms show "isCont f z" by (auto simp: continuous_on_eq_continuous_at) - have "filterlim (\w. (w - z) ^ n) (nhds 0) (at z)" + have "filterlim (\w. (w-z) ^ n) (nhds 0) (at z)" using assms by (auto intro!: tendsto_eq_intros) - thus "filterlim (\w. (w - z) ^ n) (at 0) (at z)" + thus "filterlim (\w. (w-z) ^ n) (at 0) (at z)" by (intro filterlim_atI tendsto_eq_intros) - (insert assms, auto simp: eventually_at_filter) + (use assms in \auto simp: eventually_at_filter\) qed fact+ lemma is_pole_basic': @@ -161,7 +161,7 @@ then have "filterlim (\x. f x + c) at_infinity (at z)" unfolding is_pole_def . moreover have "((\_. -c) \ -c) (at z)" by auto - ultimately have " LIM x (at z). f x :> at_infinity" + ultimately have "LIM x (at z). f x :> at_infinity" using tendsto_add_filterlim_at_infinity'[of "(\x. f x + c)" "at z" "(\_. - c)" "-c"] by auto @@ -237,11 +237,11 @@ unfolding islimpt_sequential by blast then have "(f \ g) \ c" by (simp add: tendsto_eventually) - moreover have *: "filterlim g (at z) sequentially" + moreover have "filterlim g (at z) sequentially" using g by (auto simp: filterlim_at) - have "filterlim (f \ g) at_infinity sequentially" - unfolding o_def by (rule filterlim_compose [OF _ *]) - (use \is_pole f z\ in \simp add: is_pole_def\) + then have "filterlim (f \ g) at_infinity sequentially" + unfolding o_def + using \is_pole f z\ filterlim_compose is_pole_def by blast ultimately show False using not_tendsto_and_filterlim_at_infinity trivial_limit_sequentially by blast qed @@ -250,10 +250,10 @@ \<^term>\\x. ((f::complex\complex) \ x) (at z) \ is_pole f z\ can be interpreted as the complex function \<^term>\f\ has a non-essential singularity at \<^term>\z\ (i.e. the singularity is either removable or a pole).\ -definition not_essential::"[complex \ complex, complex] \ bool" where +definition not_essential:: "[complex \ complex, complex] \ bool" where "not_essential f z = (\x. f\z\x \ is_pole f z)" -definition isolated_singularity_at::"[complex \ complex, complex] \ bool" where +definition isolated_singularity_at:: "[complex \ complex, complex] \ bool" where "isolated_singularity_at f z = (\r>0. f analytic_on ball z r-{z})" lemma not_essential_cong: @@ -322,7 +322,7 @@ have "f \x\ c" by fact also have "?this \ (?g \ ?g y) (at y)" - by (intro filterlim_cong) (auto simp: eventually_at_filter) + by (simp add: LIM_equal) finally show ?thesis by (meson Lim_at_imp_Lim_at_within) qed @@ -332,7 +332,7 @@ using assms(1) holomorphic_transform by fastforce } ultimately show ?thesis - by (rule no_isolated_singularity) (use assms in auto) + using assms by (simp add: no_isolated_singularity) qed lemma removable_singularity': @@ -354,18 +354,18 @@ named_theorems singularity_intros "introduction rules for singularities" lemma holomorphic_factor_unique: - fixes f::"complex \ complex" and z::complex and r::real and m n::int + fixes f:: "complex \ complex" and z::complex and r::real and m n::int assumes "r>0" "g z\0" "h z\0" - and asm:"\w\ball z r-{z}. f w = g w * (w-z) powi n \ g w\0 \ f w = h w * (w - z) powi m \ h w\0" - and g_holo:"g holomorphic_on ball z r" and h_holo:"h holomorphic_on ball z r" + and asm: "\w\ball z r-{z}. f w = g w * (w-z) powi n \ g w\0 \ f w = h w * (w-z) powi m \ h w\0" + and g_holo: "g holomorphic_on ball z r" and h_holo: "h holomorphic_on ball z r" shows "n=m" proof - - have [simp]:"at z within ball z r \ bot" using \r>0\ - by (auto simp add:at_within_ball_bot_iff) + have [simp]: "at z within ball z r \ bot" using \r>0\ + by (auto simp add: at_within_ball_bot_iff) have False when "n>m" proof - have "(h \ 0) (at z within ball z r)" - proof (rule Lim_transform_within[OF _ \r>0\, where f="\w. (w - z) powi (n - m) * g w"]) + proof (rule Lim_transform_within[OF _ \r>0\, where f="\w. (w-z) powi (n - m) * g w"]) have "\w\ball z r-{z}. h w = (w-z)powi(n-m) * g w" using \n>m\ asm \r>0\ by (simp add: field_simps power_int_diff) force then show "\x' \ ball z r; 0 < dist x' z;dist x' z < r\ @@ -386,16 +386,16 @@ qed moreover have "(h \ h z) (at z within ball z r)" using holomorphic_on_imp_continuous_on[OF h_holo] - by (auto simp add:continuous_on_def \r>0\) + by (auto simp add: continuous_on_def \r>0\) ultimately have "h z=0" by (auto intro!: tendsto_unique) thus False using \h z\0\ by auto qed moreover have False when "m>n" proof - have "(g \ 0) (at z within ball z r)" - proof (rule Lim_transform_within[OF _ \r>0\, where f="\w. (w - z) powi (m - n) * h w"]) + proof (rule Lim_transform_within[OF _ \r>0\, where f="\w. (w-z) powi (m - n) * h w"]) have "\w\ball z r -{z}. g w = (w-z) powi (m-n) * h w" using \m>n\ asm - by (simp add:field_simps power_int_diff) force + by (simp add: field_simps power_int_diff) force then show "\x' \ ball z r; 0 < dist x' z;dist x' z < r\ \ (x' - z) powi (m - n) * h x' = g x'" for x' by auto next @@ -414,7 +414,7 @@ qed moreover have "(g \ g z) (at z within ball z r)" using holomorphic_on_imp_continuous_on[OF g_holo] - by (auto simp add:continuous_on_def \r>0\) + by (auto simp add: continuous_on_def \r>0\) ultimately have "g z=0" by (auto intro!: tendsto_unique) thus False using \g z\0\ by auto qed @@ -422,19 +422,19 @@ qed lemma holomorphic_factor_puncture: - assumes f_iso:"isolated_singularity_at f z" + assumes f_iso: "isolated_singularity_at f z" and "not_essential f z" \ \\<^term>\f\ has either a removable singularity or a pole at \<^term>\z\\ - and non_zero:"\\<^sub>Fw in (at z). f w\0" \ \\<^term>\f\ will not be constantly zero in a neighbour of \<^term>\z\\ + and non_zero: "\\<^sub>Fw in (at z). f w\0" \ \\<^term>\f\ will not be constantly zero in a neighbour of \<^term>\z\\ shows "\!n::int. \g r. 0 < r \ g holomorphic_on cball z r \ g z\0 \ (\w\cball z r-{z}. f w = g w * (w-z) powi n \ g w\0)" proof - define P where "P = (\f n g r. 0 < r \ g holomorphic_on cball z r \ g z\0 \ (\w\cball z r - {z}. f w = g w * (w-z) powi n \ g w\0))" - have imp_unique:"\!n::int. \g r. P f n g r" when "\n g r. P f n g r" + have imp_unique: "\!n::int. \g r. P f n g r" when "\n g r. P f n g r" proof (rule ex_ex1I[OF that]) fix n1 n2 :: int - assume g1_asm:"\g1 r1. P f n1 g1 r1" and g2_asm:"\g2 r2. P f n2 g2 r2" - define fac where "fac \ \n g r. \w\cball z r-{z}. f w = g w * (w - z) powi n \ g w \ 0" + assume g1_asm: "\g1 r1. P f n1 g1 r1" and g2_asm: "\g2 r2. P f n2 g2 r2" + define fac where "fac \ \n g r. \w\cball z r-{z}. f w = g w * (w-z) powi n \ g w \ 0" obtain g1 r1 where "0 < r1" and g1_holo: "g1 holomorphic_on cball z r1" and "g1 z\0" and "fac n1 g1 r1" using g1_asm unfolding P_def fac_def by auto obtain g2 r2 where "0 < r2" and g2_holo: "g2 holomorphic_on cball z r2" and "g2 z\0" @@ -442,16 +442,16 @@ define r where "r \ min r1 r2" have "r>0" using \r1>0\ \r2>0\ unfolding r_def by auto moreover have "\w\ball z r-{z}. f w = g1 w * (w-z) powi n1 \ g1 w\0 - \ f w = g2 w * (w - z) powi n2 \ g2 w\0" + \ f w = g2 w * (w-z) powi n2 \ g2 w\0" using \fac n1 g1 r1\ \fac n2 g2 r2\ unfolding fac_def r_def by fastforce ultimately show "n1=n2" using g1_holo g2_holo \g1 z\0\ \g2 z\0\ apply (elim holomorphic_factor_unique) - by (auto simp add:r_def) + by (auto simp add: r_def) qed - have P_exist:"\ n g r. P h n g r" when + have P_exist: "\ n g r. P h n g r" when "\z'. (h \ z') (at z)" "isolated_singularity_at h z" "\\<^sub>Fw in (at z). h w\0" for h proof - @@ -474,16 +474,16 @@ by (metis \0 < r\ centre_in_ball dist_commute mem_ball that) moreover note \h' holomorphic_on ball z r\ ultimately obtain g r1 n where "0 < n" "0 < r1" "ball z r1 \ ball z r" and - g:"g holomorphic_on ball z r1" - "\w. w \ ball z r1 \ h' w = (w - z) ^ n * g w" + g: "g holomorphic_on ball z r1" + "\w. w \ ball z r1 \ h' w = (w-z) ^ n * g w" "\w. w \ ball z r1 \ g w \ 0" using holomorphic_factor_zero_nonconstant[of _ "ball z r" z thesis,simplified, OF \h' holomorphic_on ball z r\ \r>0\ \h' z=0\ \\ h' constant_on ball z r\] - by (auto simp add:dist_commute) + by (auto simp add: dist_commute) define rr where "rr=r1/2" have "P h' n g rr" unfolding P_def rr_def - using \n>0\ \r1>0\ g by (auto simp add:powr_nat) + using \n>0\ \r1>0\ g by (auto simp add: powr_nat) then have "P h n g rr" unfolding h'_def P_def by auto then show ?thesis unfolding P_def by blast @@ -495,7 +495,7 @@ proof - have "isCont h' z" "h' z\0" by (auto simp add: Lim_cong_within \h \z\ z'\ \z'\0\ continuous_at h'_def) - then obtain r2 where r2:"r2>0" "\x\ball z r2. h' x\0" + then obtain r2 where r2: "r2>0" "\x\ball z r2. h' x\0" using continuous_at_avoid[of z h' 0 ] unfolding ball_def by auto define r1 where "r1=min r2 r / 2" have "0 < r1" "cball z r1 \ ball z r" @@ -516,14 +516,14 @@ using P_exist[OF that(1) f_iso non_zero] unfolding P_def . moreover have ?thesis when "is_pole f z" proof (rule imp_unique[unfolded P_def]) - obtain e where [simp]:"e>0" and e_holo:"f holomorphic_on ball z e - {z}" and e_nz: "\x\ball z e-{z}. f x\0" + obtain e where [simp]: "e>0" and e_holo: "f holomorphic_on ball z e - {z}" and e_nz: "\x\ball z e-{z}. f x\0" proof - have "\\<^sub>F z in at z. f z \ 0" using \is_pole f z\ filterlim_at_infinity_imp_eventually_ne unfolding is_pole_def by auto - then obtain e1 where e1:"e1>0" "\x\ball z e1-{z}. f x\0" - using that eventually_at[of "\x. f x\0" z UNIV,simplified] by (auto simp add:dist_commute) - obtain e2 where e2:"e2>0" "f holomorphic_on ball z e2 - {z}" + then obtain e1 where e1: "e1>0" "\x\ball z e1-{z}. f x\0" + using that eventually_at[of "\x. f x\0" z UNIV,simplified] by (auto simp add: dist_commute) + obtain e2 where e2: "e2>0" "f holomorphic_on ball z e2 - {z}" using f_iso analytic_imp_holomorphic unfolding isolated_singularity_at_def by auto show ?thesis using e1 e2 by (force intro: that[of "min e1 e2"]) @@ -545,22 +545,23 @@ qed then obtain n g r where "0 < r" and - g_holo:"g holomorphic_on cball z r" and "g z\0" and - g_fac:"(\w\cball z r-{z}. h w = g w * (w - z) powi n \ g w \ 0)" + g_holo: "g holomorphic_on cball z r" and "g z\0" and + g_fac: "(\w\cball z r-{z}. h w = g w * (w-z) powi n \ g w \ 0)" unfolding P_def by auto have "P f (-n) (inverse o g) r" proof - - have "f w = inverse (g w) * (w - z) powi (- n)" when "w\cball z r - {z}" for w + have "f w = inverse (g w) * (w-z) powi (- n)" when "w\cball z r - {z}" for w by (metis g_fac h_def inverse_inverse_eq inverse_mult_distrib power_int_minus that) then show ?thesis unfolding P_def comp_def - using \r>0\ g_holo g_fac \g z\0\ by (auto intro:holomorphic_intros) + using \r>0\ g_holo g_fac \g z\0\ by (auto intro: holomorphic_intros) qed then show "\x g r. 0 < r \ g holomorphic_on cball z r \ g z \ 0 - \ (\w\cball z r - {z}. f w = g w * (w - z) powi x \ g w \ 0)" + \ (\w\cball z r - {z}. f w = g w * (w-z) powi x \ g w \ 0)" unfolding P_def by blast qed - ultimately show ?thesis using \not_essential f z\ unfolding not_essential_def by presburger + ultimately show ?thesis + using \not_essential f z\ unfolding not_essential_def by presburger qed lemma not_essential_transform: @@ -631,9 +632,9 @@ proof - obtain r1 where "r1>0" "f analytic_on ball z r1 - {z}" using assms(1) unfolding isolated_singularity_at_def by auto - then have r1:"f holomorphic_on ball z r1 - {z}" + then have r1: "f holomorphic_on ball z r1 - {z}" using analytic_on_open[of "ball z r1-{z}" f] by blast - obtain r2 where "r2>0" and r2:"\w. w \ z \ dist w z < r2 \ f w \ 0" + obtain r2 where "r2>0" and r2: "\w. w \ z \ dist w z < r2 \ f w \ 0" using assms(2) unfolding eventually_at by auto define r3 where "r3=min r1 r2" have "(\w. (f w) powi n) holomorphic_on ball z r3 - {z}" @@ -644,20 +645,21 @@ qed lemma non_zero_neighbour: - assumes f_iso:"isolated_singularity_at f z" - and f_ness:"not_essential f z" - and f_nconst:"\\<^sub>Fw in (at z). f w\0" + assumes f_iso: "isolated_singularity_at f z" + and f_ness: "not_essential f z" + and f_nconst: "\\<^sub>Fw in (at z). f w\0" shows "\\<^sub>F w in (at z). f w\0" proof - - obtain fn fp fr where [simp]:"fp z \ 0" and "fr > 0" - and fr: "fp holomorphic_on cball z fr" - "\w\cball z fr - {z}. f w = fp w * (w - z) powi fn \ fp w \ 0" - using holomorphic_factor_puncture[OF f_iso f_ness f_nconst,THEN ex1_implies_ex] by auto + obtain fn fp fr + where [simp]: "fp z \ 0" and "fr > 0" + and fr: "fp holomorphic_on cball z fr" + "\w. w \ cball z fr - {z} \ f w = fp w * (w-z) powi fn \ fp w \ 0" + using holomorphic_factor_puncture[OF f_iso f_ness f_nconst] by auto have "f w \ 0" when " w \ z" "dist w z < fr" for w proof - - have "f w = fp w * (w - z) powi fn" "fp w \ 0" - using fr(2)[rule_format, of w] using that by (auto simp add:dist_commute) - moreover have "(w - z) powi fn \0" + have "f w = fp w * (w-z) powi fn" "fp w \ 0" + using fr that by (auto simp add: dist_commute) + moreover have "(w-z) powi fn \0" unfolding powr_eq_0_iff using \w\z\ by auto ultimately show ?thesis by auto qed @@ -682,18 +684,18 @@ by (smt (verit) open_ball centre_in_ball eventually_at_topological insertE insert_Diff subsetD) next case False - obtain r1 where r1:"r1>0" "\y. dist z y < r1 \ f y \ 0" - using continuous_at_avoid[of z f, OF _ False] assms(2,4) continuous_on_eq_continuous_at + obtain r1 where r1: "r1>0" "\y. dist z y < r1 \ f y \ 0" + using continuous_at_avoid[of z f, OF _ False] assms continuous_on_eq_continuous_at holo holomorphic_on_imp_continuous_on by blast - obtain r2 where r2:"r2>0" "ball z r2 \ S" + obtain r2 where r2: "r2>0" "ball z r2 \ S" using assms openE by blast show ?thesis unfolding eventually_at - by (metis (no_types) dist_commute dual_order.strict_trans linorder_less_linear mem_ball r1 r2 subsetD) + by (metis (no_types) dist_commute order.strict_trans linorder_less_linear mem_ball r1 r2 subsetD) qed lemma not_essential_times[singularity_intros]: - assumes f_ness:"not_essential f z" and g_ness:"not_essential g z" - assumes f_iso:"isolated_singularity_at f z" and g_iso:"isolated_singularity_at g z" + assumes f_ness: "not_essential f z" and g_ness: "not_essential g z" + assumes f_iso: "isolated_singularity_at f z" and g_iso: "isolated_singularity_at g z" shows "not_essential (\w. f w * g w) z" proof - define fg where "fg = (\w. f w * g w)" @@ -704,41 +706,40 @@ from tendsto_cong[OF this] have "fg \z\0" by auto then show ?thesis unfolding not_essential_def fg_def by auto qed - moreover have ?thesis when f_nconst:"\\<^sub>Fw in (at z). f w\0" and g_nconst:"\\<^sub>Fw in (at z). g w\0" + moreover have ?thesis when f_nconst: "\\<^sub>Fw in (at z). f w\0" and g_nconst: "\\<^sub>Fw in (at z). g w\0" proof - - obtain fn fp fr where [simp]:"fp z \ 0" and "fr > 0" + obtain fn fp fr where [simp]: "fp z \ 0" and "fr > 0" and fr: "fp holomorphic_on cball z fr" - "\w\cball z fr - {z}. f w = fp w * (w - z) powi fn \ fp w \ 0" - using holomorphic_factor_puncture[OF f_iso f_ness f_nconst,THEN ex1_implies_ex] by auto - obtain gn gp gr where [simp]:"gp z \ 0" and "gr > 0" + "\w\cball z fr - {z}. f w = fp w * (w-z) powi fn \ fp w \ 0" + using holomorphic_factor_puncture[OF f_iso f_ness f_nconst] by auto + obtain gn gp gr where [simp]: "gp z \ 0" and "gr > 0" and gr: "gp holomorphic_on cball z gr" - "\w\cball z gr - {z}. g w = gp w * (w - z) powi gn \ gp w \ 0" - using holomorphic_factor_puncture[OF g_iso g_ness g_nconst,THEN ex1_implies_ex] by auto + "\w\cball z gr - {z}. g w = gp w * (w-z) powi gn \ gp w \ 0" + using holomorphic_factor_puncture[OF g_iso g_ness g_nconst] by auto define r1 where "r1=(min fr gr)" have "r1>0" unfolding r1_def using \fr>0\ \gr>0\ by auto - have fg_times:"fg w = (fp w * gp w) * (w - z) powi (fn+gn)" and fgp_nz:"fp w*gp w\0" + have fg_times: "fg w = (fp w * gp w) * (w-z) powi (fn+gn)" and fgp_nz: "fp w*gp w\0" when "w\ball z r1 - {z}" for w proof - - have "f w = fp w * (w - z) powi fn" "fp w\0" - using fr(2)[rule_format,of w] that unfolding r1_def by auto - moreover have "g w = gp w * (w - z) powi gn" "gp w \ 0" - using gr(2)[rule_format, of w] that unfolding r1_def by auto - ultimately show "fg w = (fp w * gp w) * (w - z) powi (fn+gn)" "fp w*gp w\0" - using that unfolding fg_def by (auto simp add:power_int_add) + have "f w = fp w * (w-z) powi fn" "fp w\0" + using fr that unfolding r1_def by auto + moreover have "g w = gp w * (w-z) powi gn" "gp w \ 0" + using gr that unfolding r1_def by auto + ultimately show "fg w = (fp w * gp w) * (w-z) powi (fn+gn)" "fp w*gp w\0" + using that by (auto simp add: fg_def power_int_add) qed - have [intro]: "fp \z\fp z" "gp \z\gp z" + obtain [intro]: "fp \z\fp z" "gp \z\gp z" using fr(1) \fr>0\ gr(1) \gr>0\ - by (meson open_ball ball_subset_cball centre_in_ball - continuous_on_eq_continuous_at continuous_within holomorphic_on_imp_continuous_on - holomorphic_on_subset)+ + by (metis centre_in_ball continuous_at continuous_on_interior + holomorphic_on_imp_continuous_on interior_cball) have ?thesis when "fn+gn>0" proof - - have "(\w. (fp w * gp w) * (w - z) ^ (nat (fn+gn))) \z\0" + have "(\w. (fp w * gp w) * (w-z) ^ (nat (fn+gn))) \z\0" using that by (auto intro!:tendsto_eq_intros) then have "fg \z\ 0" - apply (elim Lim_transform_within[OF _ \r1>0\]) + using Lim_transform_within[OF _ \r1>0\] by (smt (verit, best) Diff_iff dist_commute fg_times mem_ball power_int_def singletonD that zero_less_dist_iff) then show ?thesis unfolding not_essential_def fg_def by auto qed @@ -749,7 +750,7 @@ then have "fg \z\ fp z*gp z" apply (elim Lim_transform_within[OF _ \r1>0\]) apply (subst fg_times) - by (auto simp add:dist_commute that) + by (auto simp add: dist_commute that) then show ?thesis unfolding not_essential_def fg_def by auto qed moreover have ?thesis when "fn+gn<0" @@ -773,28 +774,26 @@ qed lemma not_essential_inverse[singularity_intros]: - assumes f_ness:"not_essential f z" - assumes f_iso:"isolated_singularity_at f z" + assumes f_ness: "not_essential f z" + assumes f_iso: "isolated_singularity_at f z" shows "not_essential (\w. inverse (f w)) z" proof - define vf where "vf = (\w. inverse (f w))" have ?thesis when "\(\\<^sub>Fw in (at z). f w\0)" proof - have "\\<^sub>Fw in (at z). f w=0" - using that[unfolded frequently_def, simplified] by (auto elim: eventually_rev_mp) + using not_eventually that by fastforce then have "vf \z\0" unfolding vf_def by (simp add: tendsto_eventually) - then show ?thesis unfolding not_essential_def vf_def by auto + then show ?thesis + unfolding not_essential_def vf_def by auto qed moreover have ?thesis when "is_pole f z" + by (metis (mono_tags, lifting) filterlim_at filterlim_inverse_at_iff is_pole_def + not_essential_def that) + moreover have ?thesis when "\x. f\z\x " and f_nconst: "\\<^sub>Fw in (at z). f w\0" proof - - have "vf \z\0" - using that filterlim_at filterlim_inverse_at_iff unfolding is_pole_def vf_def by blast - then show ?thesis unfolding not_essential_def vf_def by auto - qed - moreover have ?thesis when "\x. f\z\x " and f_nconst:"\\<^sub>Fw in (at z). f w\0" - proof - - from that obtain fz where fz:"f\z\fz" by auto + from that obtain fz where fz: "f\z\fz" by auto have ?thesis when "fz=0" proof - @@ -814,8 +813,8 @@ qed lemma isolated_singularity_at_inverse[singularity_intros]: - assumes f_iso:"isolated_singularity_at f z" - and f_ness:"not_essential f z" + assumes f_iso: "isolated_singularity_at f z" + and f_ness: "not_essential f z" shows "isolated_singularity_at (\w. inverse (f w)) z" proof - define vf where "vf = (\w. inverse (f w))" @@ -825,21 +824,22 @@ using that[unfolded frequently_def, simplified] by (auto elim: eventually_rev_mp) then have "\\<^sub>Fw in (at z). vf w=0" unfolding vf_def by auto - then obtain d1 where "d1>0" and d1:"\x. x \ z \ dist x z < d1 \ vf x = 0" + then obtain d1 where "d1>0" and d1: "\x. x \ z \ dist x z < d1 \ vf x = 0" unfolding eventually_at by auto then have "vf holomorphic_on ball z d1-{z}" - apply (rule_tac holomorphic_transform[of "\_. 0"]) - by (auto simp add:dist_commute) + using holomorphic_transform[of "\_. 0"] + by (metis Diff_iff dist_commute holomorphic_on_const insert_iff mem_ball) then have "vf analytic_on ball z d1 - {z}" by (simp add: analytic_on_open open_delete) - then show ?thesis using \d1>0\ unfolding isolated_singularity_at_def vf_def by auto + then show ?thesis + using \d1>0\ unfolding isolated_singularity_at_def vf_def by auto qed - moreover have ?thesis when f_nconst:"\\<^sub>Fw in (at z). f w\0" + moreover have ?thesis when f_nconst: "\\<^sub>Fw in (at z). f w\0" proof - have "\\<^sub>F w in at z. f w \ 0" using non_zero_neighbour[OF f_iso f_ness f_nconst] . - then obtain d1 where d1:"d1>0" "\x. x \ z \ dist x z < d1 \ f x \ 0" + then obtain d1 where d1: "d1>0" "\x. x \ z \ dist x z < d1 \ f x \ 0" unfolding eventually_at by auto - obtain d2 where "d2>0" and d2:"f analytic_on ball z d2 - {z}" + obtain d2 where "d2>0" and d2: "f analytic_on ball z d2 - {z}" using f_iso unfolding isolated_singularity_at_def by auto define d3 where "d3=min d1 d2" have "d3>0" unfolding d3_def using \d1>0\ \d2>0\ by auto @@ -849,31 +849,33 @@ then have "vf analytic_on ball z d3 - {z}" unfolding vf_def by (intro analytic_on_inverse; simp add: d1(2) d3_def dist_commute) - ultimately show ?thesis unfolding isolated_singularity_at_def vf_def by auto + ultimately show ?thesis + unfolding isolated_singularity_at_def vf_def by auto qed ultimately show ?thesis by auto qed lemma not_essential_divide[singularity_intros]: - assumes f_ness:"not_essential f z" and g_ness:"not_essential g z" - assumes f_iso:"isolated_singularity_at f z" and g_iso:"isolated_singularity_at g z" + assumes f_ness: "not_essential f z" and g_ness: "not_essential g z" + assumes f_iso: "isolated_singularity_at f z" and g_iso: "isolated_singularity_at g z" shows "not_essential (\w. f w / g w) z" proof - have "not_essential (\w. f w * inverse (g w)) z" - by (simp add: f_iso f_ness g_iso g_ness isolated_singularity_at_inverse not_essential_inverse not_essential_times) - then show ?thesis by (simp add:field_simps) + by (simp add: f_iso f_ness g_iso g_ness isolated_singularity_at_inverse + not_essential_inverse not_essential_times) + then show ?thesis by (simp add: field_simps) qed lemma - assumes f_iso:"isolated_singularity_at f z" - and g_iso:"isolated_singularity_at g z" + assumes f_iso: "isolated_singularity_at f z" + and g_iso: "isolated_singularity_at g z" shows isolated_singularity_at_times[singularity_intros]: "isolated_singularity_at (\w. f w * g w) z" and isolated_singularity_at_add[singularity_intros]: "isolated_singularity_at (\w. f w + g w) z" proof - obtain d1 d2 where "d1>0" "d2>0" - and d1:"f analytic_on ball z d1 - {z}" and d2:"g analytic_on ball z d2 - {z}" + and d1: "f analytic_on ball z d1 - {z}" and d2: "g analytic_on ball z d2 - {z}" using f_iso g_iso unfolding isolated_singularity_at_def by auto define d3 where "d3=min d1 d2" have "d3>0" unfolding d3_def using \d1>0\ \d2>0\ by auto @@ -893,7 +895,7 @@ qed lemma isolated_singularity_at_uminus[singularity_intros]: - assumes f_iso:"isolated_singularity_at f z" + assumes f_iso: "isolated_singularity_at f z" shows "isolated_singularity_at (\w. - f w) z" using assms unfolding isolated_singularity_at_def using analytic_on_neg by blast @@ -1044,7 +1046,7 @@ lemma not_essential_uminus [singularity_intros]: assumes f_ness: "not_essential f z" - assumes f_iso:"isolated_singularity_at f z" + assumes f_iso: "isolated_singularity_at f z" shows "not_essential (\w. -f w) z" proof - have "not_essential (\w. -1 * f w) z" @@ -1065,17 +1067,17 @@ \ h w \0)))" definition\<^marker>\tag important\ zor_poly - ::"[complex \ complex, complex] \ complex \ complex" where + :: "[complex \ complex, complex] \ complex \ complex" where "zor_poly f z = (SOME h. \r. r > 0 \ h holomorphic_on cball z r \ h z \ 0 - \ (\w\cball z r - {z}. f w = h w * (w - z) powi (zorder f z) + \ (\w\cball z r - {z}. f w = h w * (w-z) powi (zorder f z) \ h w \0))" lemma zorder_exist: - fixes f::"complex \ complex" and z::complex + fixes f:: "complex \ complex" and z::complex defines "n \ zorder f z" and "g \ zor_poly f z" - assumes f_iso:"isolated_singularity_at f z" - and f_ness:"not_essential f z" - and f_nconst:"\\<^sub>Fw in (at z). f w\0" + assumes f_iso: "isolated_singularity_at f z" + and f_ness: "not_essential f z" + and f_nconst: "\\<^sub>Fw in (at z). f w\0" shows "g z\0 \ (\r. r>0 \ g holomorphic_on cball z r \ (\w\cball z r - {z}. f w = g w * (w-z) powi n \ g w \0))" proof - @@ -1084,13 +1086,13 @@ have "\!k. \g r. P k g r" using holomorphic_factor_puncture[OF assms(3-)] unfolding P_def by auto then have "\g r. P n g r" - unfolding n_def P_def zorder_def - by (drule_tac theI',argo) + unfolding n_def P_def zorder_def by (rule theI') then have "\r. P n g r" - unfolding P_def zor_poly_def g_def n_def - by (drule_tac someI_ex,argo) - then obtain r1 where "P n g r1" by auto - then show ?thesis unfolding P_def by auto + unfolding P_def zor_poly_def g_def n_def by (rule someI_ex) + then obtain r1 where "P n g r1" + by auto + then show ?thesis + unfolding P_def by auto qed lemma zorder_shift: @@ -1109,7 +1111,7 @@ apply (rule_tac x="h o (\u. u-z)" in exI) apply (rule_tac x="r" in exI) apply (intro conjI holomorphic_on_compose holomorphic_intros) - apply (simp_all add: flip: cball_translation_subtract) + apply (simp_all flip: cball_translation_subtract) by (metis diff_add_cancel eq_iff_diff_eq_0 norm_minus_commute) done @@ -1117,10 +1119,10 @@ by (rule zorder_shift) lemma - fixes f::"complex \ complex" and z::complex - assumes f_iso:"isolated_singularity_at f z" - and f_ness:"not_essential f z" - and f_nconst:"\\<^sub>Fw in (at z). f w\0" + fixes f:: "complex \ complex" and z::complex + assumes f_iso: "isolated_singularity_at f z" + and f_ness: "not_essential f z" + and f_nconst: "\\<^sub>Fw in (at z). f w\0" shows zorder_inverse: "zorder (\w. inverse (f w)) z = - zorder f z" and zor_poly_inverse: "\\<^sub>Fw in (at z). zor_poly (\w. inverse (f w)) z w = inverse (zor_poly f z w)" @@ -1131,33 +1133,32 @@ define fp vfp where "fp = zor_poly f z" and "vfp = zor_poly vf z" - obtain fr where [simp]:"fp z \ 0" and "fr > 0" + obtain fr where [simp]: "fp z \ 0" and "fr > 0" and fr: "fp holomorphic_on cball z fr" - "\w\cball z fr - {z}. f w = fp w * (w - z) powi fn \ fp w \ 0" + "\w\cball z fr - {z}. f w = fp w * (w-z) powi fn \ fp w \ 0" using zorder_exist[OF f_iso f_ness f_nconst,folded fn_def fp_def] by auto - have fr_inverse: "vf w = (inverse (fp w)) * (w - z) powi (-fn)" + have fr_inverse: "vf w = (inverse (fp w)) * (w-z) powi (-fn)" and fr_nz: "inverse (fp w) \ 0" when "w\ball z fr - {z}" for w proof - - have "f w = fp w * (w - z) powi fn" "fp w \ 0" + have "f w = fp w * (w-z) powi fn" "fp w \ 0" using fr(2) that by auto - then show "vf w = (inverse (fp w)) * (w - z) powi (-fn)" "inverse (fp w)\0" + then show "vf w = (inverse (fp w)) * (w-z) powi (-fn)" "inverse (fp w)\0" by (simp_all add: power_int_minus vf_def) qed - obtain vfr where [simp]:"vfp z \ 0" and "vfr>0" and vfr:"vfp holomorphic_on cball z vfr" - "(\w\cball z vfr - {z}. vf w = vfp w * (w - z) powi vfn \ vfp w \ 0)" + obtain vfr where [simp]: "vfp z \ 0" and "vfr>0" and vfr: "vfp holomorphic_on cball z vfr" + "(\w\cball z vfr - {z}. vf w = vfp w * (w-z) powi vfn \ vfp w \ 0)" proof - have "isolated_singularity_at vf z" using isolated_singularity_at_inverse[OF f_iso f_ness] unfolding vf_def . moreover have "not_essential vf z" using not_essential_inverse[OF f_ness f_iso] unfolding vf_def . moreover have "\\<^sub>F w in at z. vf w \ 0" - using f_nconst unfolding vf_def by (auto elim:frequently_elim1) + using f_nconst unfolding vf_def by (auto elim: frequently_elim1) ultimately show ?thesis using zorder_exist[of vf z, folded vfn_def vfp_def] that by auto qed - define r1 where "r1 = min fr vfr" have "r1>0" using \fr>0\ \vfr>0\ unfolding r1_def by simp show "vfn = - fn" @@ -1165,8 +1166,8 @@ have \
: "\w. \fp w = 0; dist z w < fr\ \ False" using fr_nz by force then show "\w\ball z r1 - {z}. - vf w = vfp w * (w - z) powi vfn \ - vfp w \ 0 \ vf w = inverse (fp w) * (w - z) powi (- fn) \ + vf w = vfp w * (w-z) powi vfn \ + vfp w \ 0 \ vf w = inverse (fp w) * (w-z) powi (- fn) \ inverse (fp w) \ 0" using fr_inverse r1_def vfr(2) by (smt (verit) Diff_iff inverse_nonzero_iff_nonzero mem_ball mem_cball) @@ -1177,13 +1178,14 @@ qed (use \r1>0\ in auto) have "vfp w = inverse (fp w)" when "w\ball z r1-{z}" for w proof - - have "w \ ball z fr - {z}" "w \ cball z vfr - {z}" "w\z" using that unfolding r1_def by auto - from fr_inverse[OF this(1)] fr_nz[OF this(1)] vfr(2)[rule_format,OF this(2)] \vfn = - fn\ \w\z\ - show ?thesis by auto + have "w \ ball z fr - {z}" "w \ cball z vfr - {z}" "w\z" + using that unfolding r1_def by auto + then show ?thesis + by (metis \vfn = - fn\ power_int_not_zero right_minus_eq fr_inverse vfr(2) + vector_space_over_itself.scale_right_imp_eq) qed then show "\\<^sub>Fw in (at z). vfp w = inverse (fp w)" - unfolding eventually_at using \r1>0\ - by (metis DiffI dist_commute mem_ball singletonD) + unfolding eventually_at by (metis DiffI dist_commute mem_ball singletonD \r1>0\) qed lemma zor_poly_shift: @@ -1193,9 +1195,9 @@ shows "\\<^sub>F w in nhds z. zor_poly f z w = zor_poly (\u. f (z + u)) 0 (w-z)" proof - obtain r1 where "r1>0" "zor_poly f z z \ 0" and - holo1:"zor_poly f z holomorphic_on cball z r1" and - rball1:"\w\cball z r1 - {z}. - f w = zor_poly f z w * (w - z) powi (zorder f z) \ + holo1: "zor_poly f z holomorphic_on cball z r1" and + rball1: "\w\cball z r1 - {z}. + f w = zor_poly f z w * (w-z) powi (zorder f z) \ zor_poly f z w \ 0" using zorder_exist[OF iso1 ness1 nzero1] by blast @@ -1203,54 +1205,50 @@ have "isolated_singularity_at ff 0" unfolding ff_def using iso1 isolated_singularity_at_shift_iff[of f 0 z] - by (simp add:algebra_simps) + by (simp add: algebra_simps) moreover have "not_essential ff 0" unfolding ff_def using ness1 not_essential_shift_iff[of f 0 z] - by (simp add:algebra_simps) + by (simp add: algebra_simps) moreover have "\\<^sub>F w in at 0. ff w \ 0" unfolding ff_def using nzero1 by (smt (verit, ccfv_SIG) add.commute eventually_at_to_0 eventually_mono not_frequently) - ultimately obtain r2 where "r2>0" "zor_poly ff 0 0 \ 0" and - holo2:"zor_poly ff 0 holomorphic_on cball 0 r2" and - rball2:"\w\cball 0 r2 - {0}. - ff w = zor_poly ff 0 w * w powi (zorder ff 0) \ - zor_poly ff 0 w \ 0" + ultimately + obtain r2 where "r2>0" "zor_poly ff 0 0 \ 0" + and holo2: "zor_poly ff 0 holomorphic_on cball 0 r2" + and rball2: "\w\cball 0 r2 - {0}. + ff w = zor_poly ff 0 w * w powi (zorder ff 0) \ zor_poly ff 0 w \ 0" using zorder_exist[of ff 0] by auto define r where "r=min r1 r2" have "r>0" using \r1>0\ \r2>0\ unfolding r_def by auto - have "zor_poly f z w = zor_poly ff 0 (w - z)" + have "zor_poly f z w = zor_poly ff 0 (w-z)" if "w\ball z r - {z}" for w proof - define n where "n \ zorder f z" - have "f w = zor_poly f z w * (w - z) powi n" + have "f w = zor_poly f z w * (w-z) powi n" using n_def r_def rball1 that by auto - moreover have "f w = zor_poly ff 0 (w - z) * (w - z) powi n" + moreover have "f w = zor_poly ff 0 (w-z) * (w-z) powi n" proof - have "w-z\cball 0 r2 - {0}" - using r_def that by (auto simp:dist_complex_def) - from rball2[rule_format, OF this] - have "ff (w - z) = zor_poly ff 0 (w - z) * (w - z) - powi (zorder ff 0)" - by simp + using r_def that by (auto simp: dist_complex_def) + then have "ff (w-z) = zor_poly ff 0 (w-z) * (w-z) powi (zorder ff 0)" + using rball2 by blast moreover have "of_int (zorder ff 0) = n" unfolding n_def ff_def by (simp add:zorder_shift' add.commute) ultimately show ?thesis unfolding ff_def by auto qed - ultimately have "zor_poly f z w * (w - z) powi n - = zor_poly ff 0 (w - z) * (w - z) powi n" + ultimately have "zor_poly f z w * (w-z) powi n = zor_poly ff 0 (w-z) * (w-z) powi n" by auto - moreover have "(w - z) powi n \0" + moreover have "(w-z) powi n \0" using that by auto ultimately show ?thesis using mult_cancel_right by blast qed - then have "\\<^sub>F w in at z. zor_poly f z w - = zor_poly ff 0 (w - z)" + then have "\\<^sub>F w in at z. zor_poly f z w = zor_poly ff 0 (w-z)" unfolding eventually_at by (metis DiffI \0 < r\ dist_commute mem_ball singletonD) moreover have "isCont (zor_poly f z) z" @@ -1258,20 +1256,21 @@ by (simp add: \0 < r1\ continuous_on_interior) moreover have "isCont (zor_poly ff 0) 0" - using \0 < r2\ centre_in_ball continuous_on_interior holo2 holomorphic_on_imp_continuous_on interior_cball by blast - then have "isCont (\w. zor_poly ff 0 (w - z)) z" + using \0 < r2\ continuous_on_interior holo2 holomorphic_on_imp_continuous_on + by fastforce + then have "isCont (\w. zor_poly ff 0 (w-z)) z" unfolding isCont_iff by simp - ultimately show "\\<^sub>F w in nhds z. zor_poly f z w = zor_poly ff 0 (w - z)" + ultimately show "\\<^sub>F w in nhds z. zor_poly f z w = zor_poly ff 0 (w-z)" by (elim at_within_isCont_imp_nhds;auto) qed lemma - fixes f g::"complex \ complex" and z::complex - assumes f_iso:"isolated_singularity_at f z" and g_iso:"isolated_singularity_at g z" - and f_ness:"not_essential f z" and g_ness:"not_essential g z" + fixes f g:: "complex \ complex" and z::complex + assumes f_iso: "isolated_singularity_at f z" and g_iso: "isolated_singularity_at g z" + and f_ness: "not_essential f z" and g_ness: "not_essential g z" and fg_nconst: "\\<^sub>Fw in (at z). f w * g w\ 0" - shows zorder_times:"zorder (\w. f w * g w) z = zorder f z + zorder g z" and - zor_poly_times:"\\<^sub>Fw in (at z). zor_poly (\w. f w * g w) z w + shows zorder_times: "zorder (\w. f w * g w) z = zorder f z + zorder g z" and + zor_poly_times: "\\<^sub>Fw in (at z). zor_poly (\w. f w * g w) z w = zor_poly f z w *zor_poly g z w" proof - define fg where "fg = (\w. f w * g w)" @@ -1279,32 +1278,32 @@ "fn = zorder f z" and "gn = zorder g z" and "fgn = zorder fg z" define fp gp fgp where "fp = zor_poly f z" and "gp = zor_poly g z" and "fgp = zor_poly fg z" - have f_nconst:"\\<^sub>Fw in (at z). f w \ 0" and g_nconst:"\\<^sub>Fw in (at z).g w\ 0" + have f_nconst: "\\<^sub>Fw in (at z). f w \ 0" and g_nconst: "\\<^sub>Fw in (at z).g w\ 0" using fg_nconst by (auto elim!:frequently_elim1) - obtain fr where [simp]:"fp z \ 0" and "fr > 0" + obtain fr where [simp]: "fp z \ 0" and "fr > 0" and fr: "fp holomorphic_on cball z fr" - "\w\cball z fr - {z}. f w = fp w * (w - z) powi fn \ fp w \ 0" + "\w\cball z fr - {z}. f w = fp w * (w-z) powi fn \ fp w \ 0" using zorder_exist[OF f_iso f_ness f_nconst,folded fp_def fn_def] by auto - obtain gr where [simp]:"gp z \ 0" and "gr > 0" + obtain gr where [simp]: "gp z \ 0" and "gr > 0" and gr: "gp holomorphic_on cball z gr" - "\w\cball z gr - {z}. g w = gp w * (w - z) powi gn \ gp w \ 0" + "\w\cball z gr - {z}. g w = gp w * (w-z) powi gn \ gp w \ 0" using zorder_exist[OF g_iso g_ness g_nconst,folded gn_def gp_def] by auto define r1 where "r1=min fr gr" have "r1>0" unfolding r1_def using \fr>0\ \gr>0\ by auto - have fg_times:"fg w = (fp w * gp w) * (w - z) powi (fn+gn)" and fgp_nz:"fp w*gp w\0" + have fg_times: "fg w = (fp w * gp w) * (w-z) powi (fn+gn)" and fgp_nz: "fp w*gp w\0" when "w\ball z r1 - {z}" for w proof - - have "f w = fp w * (w - z) powi fn" "fp w \ 0" - using fr(2)[rule_format,of w] that unfolding r1_def by auto - moreover have "g w = gp w * (w - z) powi gn" "gp w \ 0" + have "f w = fp w * (w-z) powi fn" "fp w \ 0" + using fr(2) r1_def that by auto + moreover have "g w = gp w * (w-z) powi gn" "gp w \ 0" using gr(2) that unfolding r1_def by auto - ultimately show "fg w = (fp w * gp w) * (w - z) powi (fn+gn)" "fp w*gp w\0" - using that unfolding fg_def by (auto simp add:power_int_add) + ultimately show "fg w = (fp w * gp w) * (w-z) powi (fn+gn)" "fp w*gp w\0" + using that unfolding fg_def by (auto simp add: power_int_add) qed - obtain fgr where [simp]:"fgp z \ 0" and "fgr > 0" + obtain fgr where [simp]: "fgp z \ 0" and "fgr > 0" and fgr: "fgp holomorphic_on cball z fgr" - "\w\cball z fgr - {z}. fg w = fgp w * (w - z) powi fgn \ fgp w \ 0" + "\w\cball z fgr - {z}. fg w = fgp w * (w-z) powi fgn \ fgp w \ 0" proof - have "isolated_singularity_at fg z" unfolding fg_def using isolated_singularity_at_times[OF f_iso g_iso] . @@ -1318,42 +1317,40 @@ define r2 where "r2 = min fgr r1" have "r2>0" using \r1>0\ \fgr>0\ unfolding r2_def by simp show "fgn = fn + gn " - apply (rule holomorphic_factor_unique[of r2 fgp z "\w. fp w * gp w" fg]) - subgoal using \r2>0\ by simp - subgoal by simp - subgoal by simp - subgoal - proof (rule ballI) - fix w assume "w \ ball z r2 - {z}" - then have "w \ ball z r1 - {z}" "w \ cball z fgr - {z}" unfolding r2_def by auto - then show "fg w = fgp w * (w - z) powi fgn \ fgp w \ 0 - \ fg w = fp w * gp w * (w - z) powi (fn + gn) \ fp w * gp w \ 0" - using fg_times fgp_nz fgr(2) by blast - qed - subgoal using fgr(1) unfolding r2_def r1_def by (auto intro!:holomorphic_intros) - subgoal using fr(1) gr(1) unfolding r2_def r1_def by (auto intro!:holomorphic_intros) - done + proof (rule holomorphic_factor_unique) + show "\w \ ball z r2 - {z}. fg w = fgp w * (w - z) powi fgn \ fgp w \ 0 \ fg w = fp w * gp w * (w - z) powi (fn + gn) \ fp w * gp w \ 0" + using fg_times fgp_nz fgr(2) r2_def by fastforce + next + show "fgp holomorphic_on ball z r2" + using fgr(1) r2_def by auto + next + show "(\w. fp w * gp w) holomorphic_on ball z r2" + by (metis ball_subset_cball fr(1) gr(1) holomorphic_on_mult holomorphic_on_subset + min.cobounded1 min.cobounded2 r1_def r2_def subset_ball) + qed (auto simp add: \0 < r2\) - have "fgp w = fp w *gp w" when "w\ball z r2-{z}" for w + have "fgp w = fp w *gp w" when w: "w \ ball z r2-{z}" for w proof - - have "w \ ball z r1 - {z}" "w \ cball z fgr - {z}" "w\z" using that unfolding r2_def by auto - from fg_times[OF this(1)] fgp_nz[OF this(1)] fgr(2)[rule_format,OF this(2)] \fgn = fn + gn\ \w\z\ - show ?thesis by auto + have "w \ ball z r1 - {z}" "w \ cball z fgr - {z}" "w\z" + using w unfolding r2_def by auto + then show ?thesis + by (metis \fgn = fn + gn\ eq_iff_diff_eq_0 fg_times fgr(2) power_int_eq_0_iff + mult_right_cancel) qed then show "\\<^sub>Fw in (at z). fgp w = fp w * gp w" - using \r2>0\ unfolding eventually_at by (auto simp add:dist_commute) + using \r2>0\ unfolding eventually_at by (auto simp add: dist_commute) qed lemma - fixes f g::"complex \ complex" and z::complex - assumes f_iso:"isolated_singularity_at f z" and g_iso:"isolated_singularity_at g z" - and f_ness:"not_essential f z" and g_ness:"not_essential g z" + fixes f g:: "complex \ complex" and z::complex + assumes f_iso: "isolated_singularity_at f z" and g_iso: "isolated_singularity_at g z" + and f_ness: "not_essential f z" and g_ness: "not_essential g z" and fg_nconst: "\\<^sub>Fw in (at z). f w * g w\ 0" - shows zorder_divide:"zorder (\w. f w / g w) z = zorder f z - zorder g z" and - zor_poly_divide:"\\<^sub>Fw in (at z). zor_poly (\w. f w / g w) z w - = zor_poly f z w / zor_poly g z w" + shows zorder_divide: "zorder (\w. f w / g w) z = zorder f z - zorder g z" and + zor_poly_divide: "\\<^sub>Fw in (at z). zor_poly (\w. f w / g w) z w + = zor_poly f z w / zor_poly g z w" proof - - have f_nconst:"\\<^sub>Fw in (at z). f w \ 0" and g_nconst:"\\<^sub>Fw in (at z).g w\ 0" + have f_nconst: "\\<^sub>Fw in (at z). f w \ 0" and g_nconst: "\\<^sub>Fw in (at z).g w\ 0" using fg_nconst by (auto elim!:frequently_elim1) define vg where "vg=(\w. inverse (g w))" have 1: "isolated_singularity_at vg z" @@ -1362,59 +1359,53 @@ by (simp add: g_iso g_ness not_essential_inverse vg_def) moreover have 3: "\\<^sub>F w in at z. f w * vg w \ 0" using fg_nconst vg_def by auto - ultimately have "zorder (\w. f w * vg w) z = zorder f z + zorder vg z" + ultimately have "zorder (\w. f w * vg w) z = zorder f z + zorder vg z" using zorder_times[OF f_iso _ f_ness] by blast then show "zorder (\w. f w / g w) z = zorder f z - zorder g z" using zorder_inverse[OF g_iso g_ness g_nconst,folded vg_def] unfolding vg_def - by (auto simp add:field_simps) - + by (auto simp add: field_simps) have "\\<^sub>F w in at z. zor_poly (\w. f w * vg w) z w = zor_poly f z w * zor_poly vg z w" using zor_poly_times[OF f_iso _ f_ness,of vg] 1 2 3 by blast then show "\\<^sub>Fw in (at z). zor_poly (\w. f w / g w) z w = zor_poly f z w / zor_poly g z w" using zor_poly_inverse[OF g_iso g_ness g_nconst,folded vg_def] unfolding vg_def - by eventually_elim (auto simp add:field_simps) + by eventually_elim (auto simp add: field_simps) qed lemma zorder_exist_zero: - fixes f::"complex \ complex" and z::complex - defines "n\zorder f z" and "g\zor_poly f z" - assumes holo: "f holomorphic_on s" and - "open s" "connected s" "z\s" - and non_const: "\w\s. f w \ 0" - shows "(if f z=0 then n > 0 else n=0) \ (\r. r>0 \ cball z r \ s \ g holomorphic_on cball z r + fixes f:: "complex \ complex" and z::complex + defines "n \ zorder f z" and "g \ zor_poly f z" + assumes holo: "f holomorphic_on S" and "open S" "connected S" "z\S" + and non_const: "\w\S. f w \ 0" + shows "(if f z=0 then n > 0 else n=0) \ (\r. r>0 \ cball z r \ S \ g holomorphic_on cball z r \ (\w\cball z r. f w = g w * (w-z) ^ nat n \ g w \0))" proof - - obtain r where "g z \ 0" and r: "r>0" "cball z r \ s" "g holomorphic_on cball z r" - "(\w\cball z r - {z}. f w = g w * (w - z) powi n \ g w \ 0)" + obtain r where "g z \ 0" and r: "r>0" "cball z r \ S" "g holomorphic_on cball z r" + "(\w\cball z r - {z}. f w = g w * (w-z) powi n \ g w \ 0)" proof - have "g z \ 0 \ (\r>0. g holomorphic_on cball z r - \ (\w\cball z r - {z}. f w = g w * (w - z) powi n \ g w \ 0))" + \ (\w\cball z r - {z}. f w = g w * (w-z) powi n \ g w \ 0))" proof (rule zorder_exist[of f z,folded g_def n_def]) - show "isolated_singularity_at f z" unfolding isolated_singularity_at_def - using holo assms(4,6) - by (meson Diff_subset open_ball analytic_on_holomorphic holomorphic_on_subset openE) + show "isolated_singularity_at f z" + using \open S\ \z\S\ holo holomorphic_on_imp_analytic_at isolated_singularity_at_analytic + by force show "not_essential f z" unfolding not_essential_def - using assms(4,6) at_within_open continuous_on holo holomorphic_on_imp_continuous_on + using \open S\ \z\S\ at_within_open continuous_on holo holomorphic_on_imp_continuous_on by fastforce - have "\\<^sub>F w in at z. f w \ 0 \ w\s" - proof - - obtain w where "w\s" "f w\0" using non_const by auto - then show ?thesis - by (rule non_zero_neighbour_alt[OF holo \open s\ \connected s\ \z\s\]) - qed + have "\\<^sub>F w in at z. f w \ 0 \ w\S" + using assms(4,5,6) holo non_const non_zero_neighbour_alt by blast then show "\\<^sub>F w in at z. f w \ 0" by (auto elim: eventually_frequentlyE) qed - then obtain r1 where "g z \ 0" "r1>0" and r1:"g holomorphic_on cball z r1" - "(\w\cball z r1 - {z}. f w = g w * (w - z) powi n \ g w \ 0)" + then obtain r1 where "g z \ 0" "r1>0" and r1: "g holomorphic_on cball z r1" + "(\w\cball z r1 - {z}. f w = g w * (w-z) powi n \ g w \ 0)" by auto - obtain r2 where r2: "r2>0" "cball z r2 \ s" + obtain r2 where r2: "r2>0" "cball z r2 \ S" using assms(4,6) open_contains_cball_eq by blast define r3 where "r3 \ min r1 r2" - have "r3>0" "cball z r3 \ s" using \r1>0\ r2 unfolding r3_def by auto + have "r3>0" "cball z r3 \ S" using \r1>0\ r2 unfolding r3_def by auto moreover have "g holomorphic_on cball z r3" using r1(1) unfolding r3_def by auto - moreover have "(\w\cball z r3 - {z}. f w = g w * (w - z) powi n \ g w \ 0)" + moreover have "(\w\cball z r3 - {z}. f w = g w * (w-z) powi n \ g w \ 0)" using r1(2) unfolding r3_def by auto ultimately show ?thesis using that[of r3] \g z\0\ by auto qed @@ -1425,24 +1416,24 @@ using r by (meson Elementary_Metric_Spaces.open_ball analytic_at analytic_at_imp_isCont ball_subset_cball centre_in_ball holomorphic_on_subset isContD) - have if_0:"if f z=0 then n > 0 else n=0" + have if_0: "if f z=0 then n > 0 else n=0" proof - - have "(\w. g w * (w - z) powi n) \z\ f z" + have "(\w. g w * (w-z) powi n) \z\ f z" using fz_lim Lim_transform_within_open[where s="ball z r"] r by fastforce - then have "(\w. (g w * (w - z) powi n) / g w) \z\ f z/g z" + then have "(\w. (g w * (w-z) powi n) / g w) \z\ f z/g z" using gz_lim \g z \ 0\ tendsto_divide by blast - then have powi_tendsto:"(\w. (w - z) powi n) \z\ f z/g z" + then have powi_tendsto: "(\w. (w-z) powi n) \z\ f z/g z" using Lim_transform_within_open[where s="ball z r"] r by fastforce have ?thesis when "n\0" "f z=0" proof - - have "(\w. (w - z) ^ nat n) \z\ f z/g z" + have "(\w. (w-z) ^ nat n) \z\ f z/g z" using Lim_transform_within[OF powi_tendsto, where d=r] by (meson power_int_def r(1) that(1)) - then have *:"(\w. (w - z) ^ nat n) \z\ 0" using \f z=0\ by simp + then have *: "(\w. (w-z) ^ nat n) \z\ 0" using \f z=0\ by simp moreover have False when "n=0" proof - - have "(\w. (w - z) ^ nat n) \z\ 1" + have "(\w. (w-z) ^ nat n) \z\ 1" using \n=0\ by auto then show False using * using LIM_unique zero_neq_one by blast qed @@ -1452,28 +1443,30 @@ proof - have False when "n>0" proof - - have "(\w. (w - z) ^ nat n) \z\ f z/g z" + have "(\w. (w-z) ^ nat n) \z\ f z/g z" using Lim_transform_within[OF powi_tendsto, where d=r] by (meson \0 \ n\ power_int_def r(1)) - moreover have "(\w. (w - z) ^ nat n) \z\ 0" + moreover have "(\w. (w-z) ^ nat n) \z\ 0" using \n>0\ by (auto intro!:tendsto_eq_intros) - ultimately show False using \f z\0\ \g z\0\ using LIM_unique divide_eq_0_iff by blast + ultimately show False + using \f z\0\ \g z\0\ LIM_unique divide_eq_0_iff by blast qed then show ?thesis using that by force qed moreover have False when "n<0" proof - - have "(\w. inverse ((w - z) ^ nat (- n))) \z\ f z/g z" + have "(\w. inverse ((w-z) ^ nat (- n))) \z\ f z/g z" by (smt (verit) LIM_cong power_int_def power_inverse powi_tendsto that) moreover - have "(\w.((w - z) ^ nat (- n))) \z\ 0" + have "(\w.((w-z) ^ nat (- n))) \z\ 0" using that by (auto intro!:tendsto_eq_intros) ultimately have "(\x. inverse ((x - z) ^ nat (- n)) * (x - z) ^ nat (- n)) \z\ 0" using tendsto_mult by fastforce then have "(\x. 1::complex) \z\ 0" using Lim_transform_within_open by fastforce - then show False using LIM_const_eq by fastforce + then show False + using LIM_const_eq by fastforce qed ultimately show ?thesis by fastforce qed @@ -1499,7 +1492,7 @@ then show ?thesis using \g z\0\ True by auto next case False - then have "f w = g w * (w - z) powi n \ g w \ 0" + then have "f w = g w * (w-z) powi n" "g w \ 0" using r(4) that by auto then show ?thesis by (smt (verit, best) False if_0 int_nat_eq power_int_of_nat) @@ -1508,17 +1501,17 @@ qed lemma zorder_exist_pole: - fixes f::"complex \ complex" and z::complex + fixes f:: "complex \ complex" and z::complex defines "n\zorder f z" and "g\zor_poly f z" assumes holo: "f holomorphic_on S-{z}" and "open S" "z\S" and "is_pole f z" shows "n < 0 \ g z\0 \ (\r. r>0 \ cball z r \ S \ g holomorphic_on cball z r \ (\w\cball z r - {z}. f w = g w / (w-z) ^ nat (- n) \ g w \0))" proof - obtain r where "g z \ 0" and r: "r>0" "cball z r \ S" "g holomorphic_on cball z r" - "(\w\cball z r - {z}. f w = g w * (w - z) powi n \ g w \ 0)" + "(\w\cball z r - {z}. f w = g w * (w-z) powi n \ g w \ 0)" proof - have "g z \ 0 \ (\r>0. g holomorphic_on cball z r - \ (\w\cball z r - {z}. f w = g w * (w - z) powi n \ g w \ 0))" + \ (\w\cball z r - {z}. f w = g w * (w-z) powi n \ g w \ 0))" proof (rule zorder_exist[of f z,folded g_def n_def]) show "isolated_singularity_at f z" unfolding isolated_singularity_at_def using holo assms(4,5) @@ -1529,8 +1522,8 @@ from non_zero_neighbour_pole[OF \is_pole f z\] show "\\<^sub>F w in at z. f w \ 0" by (auto elim: eventually_frequentlyE) qed - then obtain r1 where "g z \ 0" "r1>0" and r1:"g holomorphic_on cball z r1" - "(\w\cball z r1 - {z}. f w = g w * (w - z) powi n \ g w \ 0)" + then obtain r1 where "g z \ 0" "r1>0" and r1: "g holomorphic_on cball z r1" + "(\w\cball z r1 - {z}. f w = g w * (w-z) powi n \ g w \ 0)" by auto obtain r2 where r2: "r2>0" "cball z r2 \ S" using assms(4,5) open_contains_cball_eq by metis @@ -1538,22 +1531,24 @@ have "r3>0" "cball z r3 \ S" using \r1>0\ r2 unfolding r3_def by auto moreover have "g holomorphic_on cball z r3" using r1(1) unfolding r3_def by auto - moreover have "(\w\cball z r3 - {z}. f w = g w * (w - z) powi n \ g w \ 0)" + moreover have "(\w\cball z r3 - {z}. f w = g w * (w-z) powi n \ g w \ 0)" using r1(2) unfolding r3_def by auto - ultimately show ?thesis using that[of r3] \g z\0\ by auto + ultimately show ?thesis + using that[of r3] \g z\0\ by auto qed have "n<0" proof (rule ccontr) assume " \ n < 0" define c where "c=(if n=0 then g z else 0)" - have [simp]:"g \z\ g z" - by (metis open_ball at_within_open ball_subset_cball centre_in_ball - continuous_on holomorphic_on_imp_continuous_on holomorphic_on_subset r(1) r(3) ) - have "\\<^sub>F x in at z. f x = g x * (x - z) ^ nat n" - unfolding eventually_at_topological - apply (rule_tac exI[where x="ball z r"]) - by (simp add: \\ n < 0\ linorder_not_le power_int_def r(1) r(4)) + have [simp]: "g \z\ g z" + using r + by (metis centre_in_ball continuous_on_interior holomorphic_on_imp_continuous_on + interior_cball isContD) + have "\x \ ball z r. x \ z \ f x = g x * (x - z) ^ nat n" + by (simp add: \\ n < 0\ linorder_not_le power_int_def r) + then have "\\<^sub>F x in at z. f x = g x * (x - z) ^ nat n" + using centre_in_ball eventually_at_topological r(1) by blast moreover have "(\x. g x * (x - z) ^ nat n) \z\ c" proof (cases "n=0") case True @@ -1572,12 +1567,13 @@ moreover have "\w\cball z r - {z}. f w = g w / (w-z) ^ nat (- n) \ g w \0" using r(4) \n<0\ by (smt (verit) inverse_eq_divide mult.right_neutral power_int_def power_inverse times_divide_eq_right) - ultimately show ?thesis using r(1-3) \g z\0\ by auto + ultimately show ?thesis + using r \g z\0\ by auto qed lemma zorder_eqI: assumes "open S" "z \ S" "g holomorphic_on S" "g z \ 0" - assumes fg_eq:"\w. \w \ S;w\z\ \ f w = g w * (w - z) powi n" + assumes fg_eq: "\w. \w \ S;w\z\ \ f w = g w * (w-z) powi n" shows "zorder f z = n" proof - have "continuous_on S g" by (rule holomorphic_on_imp_continuous_on) fact @@ -1588,7 +1584,7 @@ ultimately obtain r where r: "r > 0" "cball z r \ S \ (g -` (-{0}))" unfolding open_contains_cball by blast - let ?gg= "(\w. g w * (w - z) powi n)" + let ?gg= "(\w. g w * (w-z) powi n)" define P where "P = (\n g r. 0 < r \ g holomorphic_on cball z r \ g z\0 \ (\w\cball z r - {z}. f w = g w * (w-z) powi n \ g w\0))" have "P n g r" @@ -1611,13 +1607,13 @@ isCont_def not_essential_def) show " \\<^sub>F w in at z. w - z \ 0" by (simp add: eventually_at_filter) then show "LIM w at z. w - z :> at 0" - unfolding filterlim_at by (auto intro:tendsto_eq_intros) + unfolding filterlim_at by (auto intro: tendsto_eq_intros) show "isolated_singularity_at g z" by (meson Diff_subset open_ball analytic_on_holomorphic assms holomorphic_on_subset isolated_singularity_at_def openE) qed moreover - have "\\<^sub>F w in at z. g w * (w - z) powi n = f w" + have "\\<^sub>F w in at z. g w * (w-z) powi n = f w" unfolding eventually_at_topological using assms fg_eq by force ultimately show "not_essential f z" using not_essential_transform by blast @@ -1626,12 +1622,12 @@ fix d::real assume "0 < d" define z' where "z' \ z+min d r / 2" have "z' \ z" " dist z' z < d " - unfolding z'_def using \d>0\ \r>0\ by (auto simp add:dist_norm) + unfolding z'_def using \d>0\ \r>0\ by (auto simp add: dist_norm) moreover have "f z' \ 0" proof (subst fg_eq[OF _ \z'\z\]) have "z' \ cball z r" - unfolding z'_def using \r>0\ \d>0\ by (auto simp add:dist_norm) - then show " z' \ S" using r(2) by blast + unfolding z'_def using \r>0\ \d>0\ by (auto simp add: dist_norm) + then show "z' \ S" using r(2) by blast show "g z' * (z' - z) powi n \ 0" using P_def \P n g r\ \z' \ cball z r\ \z' \ z\ by auto qed @@ -1645,47 +1641,47 @@ lemma simple_zeroI: assumes "open S" "z \ S" "g holomorphic_on S" "g z \ 0" - assumes "\w. w \ S \ f w = g w * (w - z)" + assumes "\w. w \ S \ f w = g w * (w-z)" shows "zorder f z = 1" using assms zorder_eqI by force lemma higher_deriv_power: - shows "(deriv ^^ j) (\w. (w - z) ^ n) w = - pochhammer (of_nat (Suc n - j)) j * (w - z) ^ (n - j)" + shows "(deriv ^^ j) (\w. (w-z) ^ n) w = + pochhammer (of_nat (Suc n - j)) j * (w-z) ^ (n - j)" proof (induction j arbitrary: w) case 0 thus ?case by auto next case (Suc j w) - have "(deriv ^^ Suc j) (\w. (w - z) ^ n) w = deriv ((deriv ^^ j) (\w. (w - z) ^ n)) w" + have "(deriv ^^ Suc j) (\w. (w-z) ^ n) w = deriv ((deriv ^^ j) (\w. (w-z) ^ n)) w" by simp - also have "(deriv ^^ j) (\w. (w - z) ^ n) = - (\w. pochhammer (of_nat (Suc n - j)) j * (w - z) ^ (n - j))" + also have "(deriv ^^ j) (\w. (w-z) ^ n) = + (\w. pochhammer (of_nat (Suc n - j)) j * (w-z) ^ (n - j))" using Suc by (intro Suc.IH ext) also { have "(\ has_field_derivative of_nat (n - j) * - pochhammer (of_nat (Suc n - j)) j * (w - z) ^ (n - Suc j)) (at w)" + pochhammer (of_nat (Suc n - j)) j * (w-z) ^ (n - Suc j)) (at w)" using Suc.prems by (auto intro!: derivative_eq_intros) also have "of_nat (n - j) * pochhammer (of_nat (Suc n - j)) j = pochhammer (of_nat (Suc n - Suc j)) (Suc j)" by (cases "Suc j \ n", subst pochhammer_rec) - (insert Suc.prems, simp_all add: algebra_simps Suc_diff_le pochhammer_0_left) - finally have "deriv (\w. pochhammer (of_nat (Suc n - j)) j * (w - z) ^ (n - j)) w = - \ * (w - z) ^ (n - Suc j)" + (use Suc.prems in \simp_all add: algebra_simps Suc_diff_le pochhammer_0_left\) + finally have "deriv (\w. pochhammer (of_nat (Suc n - j)) j * (w-z) ^ (n - j)) w = + \ * (w-z) ^ (n - Suc j)" by (rule DERIV_imp_deriv) } finally show ?case . qed lemma zorder_zero_eqI: - assumes f_holo:"f holomorphic_on S" and "open S" "z \ S" + assumes f_holo: "f holomorphic_on S" and "open S" "z \ S" assumes zero: "\i. i < nat n \ (deriv ^^ i) f z = 0" assumes nz: "(deriv ^^ nat n) f z \ 0" and "n\0" shows "zorder f z = n" proof - - obtain r where [simp]:"r>0" and "ball z r \ S" + obtain r where [simp]: "r>0" and "ball z r \ S" using \open S\ \z\S\ openE by blast - have nz':"\w\ball z r. f w \ 0" + have nz': "\w\ball z r. f w \ 0" proof (rule ccontr) assume "\ (\w\ball z r. f w \ 0)" then have "eventually (\u. f u = 0) (nhds z)" @@ -1701,7 +1697,7 @@ obtain e where e_if: "if f z = 0 then 0 < zn else zn = 0" and [simp]: "e>0" and "cball z e \ ball z r" and g_holo: "g holomorphic_on cball z e" and - e_fac: "(\w\cball z e. f w = g w * (w - z) ^ nat zn \ g w \ 0)" + e_fac: "(\w\cball z e. f w = g w * (w-z) ^ nat zn \ g w \ 0)" proof - have "f holomorphic_on ball z r" using f_holo \ball z r \ S\ by auto @@ -1712,23 +1708,23 @@ by (metis centre_in_cball less_le_not_le order_refl) define A where "A \ (\i. of_nat (i choose (nat zn)) * fact (nat zn) * (deriv ^^ (i - nat zn)) g z)" - have deriv_A:"(deriv ^^ i) f z = (if zn \ int i then A i else 0)" for i + have deriv_A: "(deriv ^^ i) f z = (if zn \ int i then A i else 0)" for i proof - have "eventually (\w. w \ ball z e) (nhds z)" using \cball z e \ ball z r\ \e>0\ by (intro eventually_nhds_in_open) auto - hence "eventually (\w. f w = (w - z) ^ (nat zn) * g w) (nhds z)" + hence "eventually (\w. f w = (w-z) ^ (nat zn) * g w) (nhds z)" using e_fac eventually_mono by fastforce - hence "(deriv ^^ i) f z = (deriv ^^ i) (\w. (w - z) ^ nat zn * g w) z" + hence "(deriv ^^ i) f z = (deriv ^^ i) (\w. (w-z) ^ nat zn * g w) z" by (intro higher_deriv_cong_ev) auto also have "\ = (\j=0..i. of_nat (i choose j) * - (deriv ^^ j) (\w. (w - z) ^ nat zn) z * (deriv ^^ (i - j)) g z)" + (deriv ^^ j) (\w. (w-z) ^ nat zn) z * (deriv ^^ (i - j)) g z)" using g_holo \e>0\ by (intro higher_deriv_mult[of _ "ball z e"]) (auto intro!: holomorphic_intros) also have "\ = (\j=0..i. if j = nat zn then of_nat (i choose nat zn) * fact (nat zn) * (deriv ^^ (i - nat zn)) g z else 0)" proof (intro sum.cong refl, goal_cases) case (1 j) - have "(deriv ^^ j) (\w. (w - z) ^ nat zn) z = + have "(deriv ^^ j) (\w. (w-z) ^ nat zn) z = pochhammer (of_nat (Suc (nat zn) - j)) j * 0 ^ (nat zn - j)" by (subst higher_deriv_power) auto also have "\ = (if j = nat zn then fact j else 0)" @@ -1745,18 +1741,15 @@ qed have False when "nn\0\ by auto - with nz show False by auto - qed + using deriv_A[of "nat n"] that \n\0\ by (simp add: nz) moreover have "n\zn" proof - - have "g z \ 0" using e_fac[rule_format,of z] \e>0\ by simp + have "g z \ 0" + by (simp add: \g z \ 0\) then have "(deriv ^^ nat zn) f z \ 0" - using deriv_A[of "nat zn"] by(auto simp add:A_def) + using deriv_A[of "nat zn"] by(auto simp add: A_def) then have "nat zn \ nat n" using zero[of "nat zn"] by linarith - moreover have "zn\0" using e_if by (auto split:if_splits) + moreover have "zn\0" using e_if by (auto split: if_splits) ultimately show ?thesis using nat_le_eq_zle by blast qed ultimately show ?thesis unfolding zn_def by fastforce @@ -1764,7 +1757,7 @@ lemma assumes "eventually (\z. f z = g z) (at z)" "z = z'" - shows zorder_cong:"zorder f z = zorder g z'" and zor_poly_cong:"zor_poly f z = zor_poly g z'" + shows zorder_cong: "zorder f z = zorder g z'" and zor_poly_cong: "zor_poly f z = zor_poly g z'" proof - define P where "P = (\ff n h r. 0 < r \ h holomorphic_on cball z r \ h z\0 \ (\w\cball z r - {z}. ff w = h w * (w-z) powi n \ h w\0))" @@ -1772,19 +1765,19 @@ proof - have *: "\r. P g n h r" if "\r. P f n h r" and "eventually (\x. f x = g x) (at z)" for f g proof - - from that(1) obtain r1 where r1_P:"P f n h r1" by auto - from that(2) obtain r2 where "r2>0" and r2_dist:"\x. x \ z \ dist x z \ r2 \ f x = g x" + from that(1) obtain r1 where r1_P: "P f n h r1" by auto + from that(2) obtain r2 where "r2>0" and r2_dist: "\x. x \ z \ dist x z \ r2 \ f x = g x" unfolding eventually_at_le by auto define r where "r=min r1 r2" have "r>0" "h z\0" using r1_P \r2>0\ unfolding r_def P_def by auto moreover have "h holomorphic_on cball z r" using r1_P unfolding P_def r_def by auto - moreover have "g w = h w * (w - z) powi n \ h w \ 0" when "w\cball z r - {z}" for w + moreover have "g w = h w * (w-z) powi n \ h w \ 0" when "w\cball z r - {z}" for w proof - - have "f w = h w * (w - z) powi n \ h w \ 0" + have "f w = h w * (w-z) powi n \ h w \ 0" using r1_P that unfolding P_def r_def by auto - moreover have "f w=g w" using r2_dist[rule_format,of w] that unfolding r_def - by (simp add: dist_commute) + moreover have "f w=g w" + using r2_dist that by (simp add: dist_commute r_def) ultimately show ?thesis by simp qed ultimately show ?thesis unfolding P_def by auto @@ -1792,7 +1785,7 @@ from assms have eq': "eventually (\z. g z = f z) (at z)" by (simp add: eq_commute) show ?thesis - by (rule iffI[OF *[OF _ assms(1)] *[OF _ eq']]) + using "*" assms(1) eq' by blast qed then show "zorder f z = zorder g z'" "zor_poly f z = zor_poly g z'" using \z=z'\ unfolding P_def zorder_def zor_poly_def by auto @@ -1810,8 +1803,9 @@ proof - define P where "P = (\f n h r. 0 < r \ h holomorphic_on cball z r \ - h z \ 0 \ (\w\cball z r - {z}. f w = h w * (w - z) powi n \ h w \ 0))" - have *: "P (\x. c * f x) n (\x. c * h x) r" if "P f n h r" "c \ 0" for f n h r c + h z \ 0 \ (\w\cball z r - {z}. f w = h w * (w-z) powi n \ h w \ 0))" + have *: "P (\x. c * f x) n (\x. c * h x) r" + if "P f n h r" "c \ 0" for f n h r c using that unfolding P_def by (auto intro!: holomorphic_intros) have "(\h r. P (\x. c * f x) n h r) \ (\h r. P f n h r)" for n using *[of f n _ _ c] *[of "\x. c * f x" n _ _ "inverse c"] \c \ 0\ @@ -1827,17 +1821,17 @@ lemma zorder_nonzero_div_power: assumes sz: "open S" "z \ S" "f holomorphic_on S" "f z \ 0" and "n > 0" - shows "zorder (\w. f w / (w - z) ^ n) z = - n" + shows "zorder (\w. f w / (w-z) ^ n) z = - n" by (intro zorder_eqI [OF sz]) (simp add: inverse_eq_divide power_int_minus) lemma zor_poly_eq: assumes "isolated_singularity_at f z" "not_essential f z" "\\<^sub>F w in at z. f w \ 0" - shows "eventually (\w. zor_poly f z w = f w * (w - z) powi - zorder f z) (at z)" + shows "eventually (\w. zor_poly f z w = f w * (w-z) powi - zorder f z) (at z)" proof - - obtain r where r:"r>0" - "(\w\cball z r - {z}. f w = zor_poly f z w * (w - z) powi (zorder f z))" + obtain r where r: "r>0" + "(\w\cball z r - {z}. f w = zor_poly f z w * (w-z) powi (zorder f z))" using zorder_exist[OF assms] by blast - then have *: "\w\ball z r - {z}. zor_poly f z w = f w * (w - z) powi - zorder f z" + then have *: "\w\ball z r - {z}. zor_poly f z w = f w * (w-z) powi - zorder f z" by (auto simp: field_simps power_int_minus) have "eventually (\w. w \ ball z r - {z}) (at z)" using r eventually_at_ball'[of r z UNIV] by auto @@ -1846,12 +1840,12 @@ lemma zor_poly_zero_eq: assumes "f holomorphic_on S" "open S" "connected S" "z \ S" "\w\S. f w \ 0" - shows "eventually (\w. zor_poly f z w = f w / (w - z) ^ nat (zorder f z)) (at z)" + shows "eventually (\w. zor_poly f z w = f w / (w-z) ^ nat (zorder f z)) (at z)" proof - - obtain r where r:"r>0" - "(\w\cball z r - {z}. f w = zor_poly f z w * (w - z) ^ nat (zorder f z))" + obtain r where r: "r>0" + "(\w\cball z r - {z}. f w = zor_poly f z w * (w-z) ^ nat (zorder f z))" using zorder_exist_zero[OF assms] by auto - then have *: "\w\ball z r - {z}. zor_poly f z w = f w / (w - z) ^ nat (zorder f z)" + then have *: "\w\ball z r - {z}. zor_poly f z w = f w / (w-z) ^ nat (zorder f z)" by (auto simp: field_simps powr_minus) have "eventually (\w. w \ ball z r - {z}) (at z)" using r eventually_at_ball'[of r z UNIV] by auto @@ -1859,15 +1853,15 @@ qed lemma zor_poly_pole_eq: - assumes f_iso:"isolated_singularity_at f z" "is_pole f z" - shows "eventually (\w. zor_poly f z w = f w * (w - z) ^ nat (- zorder f z)) (at z)" + assumes f_iso: "isolated_singularity_at f z" "is_pole f z" + shows "eventually (\w. zor_poly f z w = f w * (w-z) ^ nat (- zorder f z)) (at z)" proof - - obtain e where [simp]:"e>0" and f_holo:"f holomorphic_on ball z e - {z}" + obtain e where [simp]: "e>0" and f_holo: "f holomorphic_on ball z e - {z}" using f_iso analytic_imp_holomorphic unfolding isolated_singularity_at_def by blast - obtain r where r:"r>0" - "(\w\cball z r - {z}. f w = zor_poly f z w / (w - z) ^ nat (- zorder f z))" + obtain r where r: "r>0" + "(\w\cball z r - {z}. f w = zor_poly f z w / (w-z) ^ nat (- zorder f z))" using zorder_exist_pole[OF f_holo,simplified,OF \is_pole f z\] by auto - then have *: "\w\ball z r - {z}. zor_poly f z w = f w * (w - z) ^ nat (- zorder f z)" + then have *: "\w\ball z r - {z}. zor_poly f z w = f w * (w-z) ^ nat (- zorder f z)" by (auto simp: field_simps) have "eventually (\w. w \ ball z r - {z}) (at z)" using r eventually_at_ball'[of r z UNIV] by auto @@ -1892,7 +1886,7 @@ by eventually_elim (insert r, auto simp: field_simps power_int_minus) moreover have "continuous_on (ball z0 r) (zor_poly f z0)" using r by (intro holomorphic_on_imp_continuous_on) auto - with r(1,2) have "isCont (zor_poly f z0) z0" + with r have "isCont (zor_poly f z0) z0" by (auto simp: continuous_on_eq_continuous_at) hence "(zor_poly f z0 \ zor_poly f z0 z0) (at z0)" unfolding isCont_def . @@ -1935,7 +1929,7 @@ lemma zor_poly_pole_eqI: fixes f :: "complex \ complex" and z0 :: complex defines "n \ zorder f z0" - assumes f_iso:"isolated_singularity_at f z0" and "is_pole f z0" + assumes f_iso: "isolated_singularity_at f z0" and "is_pole f z0" assumes lim: "((\x. f (g x) * (g x - z0) ^ nat (-n)) \ c) F" assumes g: "filterlim g (at z0) F" and "F \ bot" shows "zor_poly f z0 z0 = c" @@ -1943,9 +1937,12 @@ obtain r where r: "r > 0" "zor_poly f z0 holomorphic_on cball z0 r" proof - have "\\<^sub>F w in at z0. f w \ 0" - using non_zero_neighbour_pole[OF \is_pole f z0\] by (auto elim:eventually_frequentlyE) - moreover have "not_essential f z0" unfolding not_essential_def using \is_pole f z0\ by simp - ultimately show ?thesis using that zorder_exist[OF f_iso,folded n_def] by auto + using non_zero_neighbour_pole[OF \is_pole f z0\] + by (auto elim: eventually_frequentlyE) + moreover have "not_essential f z0" + unfolding not_essential_def using \is_pole f z0\ by simp + ultimately show ?thesis + using that zorder_exist[OF f_iso,folded n_def] by auto qed from r(1) have "eventually (\w. w \ ball z0 r \ w \ z0) (at z0)" using eventually_at_ball'[of r z0 UNIV] by auto @@ -1979,15 +1976,15 @@ ultimately have "isolated_singularity_at f x" by (auto simp: isolated_singularity_at_def analytic_on_open intro!: exI[of _ r] holomorphic_on_subset[OF holo]) - hence ev: "\\<^sub>F w in at x. zor_poly f x w = f w * (w - x) ^ nat (- zorder f x)" + hence ev: "\\<^sub>F w in at x. zor_poly f x w = f w * (w-x) ^ nat (- zorder f x)" using \is_pole f x\ zor_poly_pole_eq by blast define P where "P = zor_poly f x" define n where "n = nat (-zorder f x)" obtain r where r: "r > 0" "cball x r \ A" "P holomorphic_on cball x r" "zorder f x < 0" "P x \ 0" - "\w\cball x r - {x}. f w = P w / (w - x) ^ n \ P w \ 0" - unfolding P_def n_def using zorder_exist_pole[OF holo assms(2,3,1)] by blast + "\w\cball x r - {x}. f w = P w / (w-x) ^ n \ P w \ 0" + using P_def assms holo n_def zorder_exist_pole by blast have n: "n > 0" using r(4) by (auto simp: n_def) @@ -1995,7 +1992,7 @@ if "w \ ball x r" for w using that by (intro holomorphic_derivI[OF holomorphic_on_subset[OF r(3), of "ball x r"]]) auto - define D where "D = (\w. (deriv P w * (w - x) - of_nat n * P w) / (w - x) ^ (n + 1))" + define D where "D = (\w. (deriv P w * (w-x) - of_nat n * P w) / (w-x) ^ (n + 1))" define n' where "n' = n - 1" have n': "n = Suc n'" using n by (simp add: n'_def) @@ -2010,12 +2007,10 @@ have ev': "eventually (\w. w \ ball x r - {x}) (nhds w)" using w by (intro eventually_nhds_in_open) auto - have "((\w. P w / (w - x) ^ n) has_field_derivative D w) (at w)" - apply (rule derivative_eq_intros refl | use w in force)+ - using w - apply (simp add: divide_simps D_def) - apply (simp add: n' algebra_simps) - done + have \
: "(deriv P w * (w-x) ^ n - P w * (n * (w-x) ^ (n-1))) / ((w-x) ^ n * (w-x) ^ n) = D w" + using w n' by (simp add: divide_simps D_def) (simp add: algebra_simps) + have "((\w. P w / (w-x) ^ n) has_field_derivative D w) (at w)" + by (rule derivative_eq_intros refl | use w \
in force)+ also have "?this \ (f has_field_derivative D w) (at w)" using r by (intro has_field_derivative_cong_ev refl eventually_mono[OF ev']) auto finally have "(f has_field_derivative D w) (at w)" . @@ -2036,7 +2031,7 @@ proof (rule zorder_eqI) show "open (ball x r)" "x \ ball x r" using \r > 0\ by auto - show "f' w = (deriv P w * (w - x) - of_nat n * P w) * (w - x) powi (- int (Suc n))" + show "f' w = (deriv P w * (w-x) - of_nat n * P w) * (w-x) powi (- int (Suc n))" if "w \ ball x r" "w \ x" for w using that D_eq[of w] n by (auto simp: D_def power_int_diff power_int_minus powr_nat' divide_simps) qed (use r n in \auto intro!: holomorphic_intros\) @@ -2081,7 +2076,8 @@ qed have "g holomorphic_on A" - unfolding g_def using assms assms(1) holo by (intro removable_singularity) auto + unfolding g_def using assms assms(1) holo + by (intro removable_singularity) auto hence "deriv g holomorphic_on A" by (intro holomorphic_deriv assms) hence "continuous_on A (deriv g)" @@ -2124,15 +2120,12 @@ thus ?thesis proof cases case 1 - hence "is_pole f' x" - using is_pole_deriv' assms by blast - thus ?thesis by (auto simp: not_essential_def) + thus ?thesis + using assms is_pole_deriv' by blast next case (2 c) - from 2 have "\c. f' \x\ c" - by (rule removable_singularity_deriv'[OF _ assms(2-4)]) thus ?thesis - by (auto simp: not_essential_def) + by (meson assms removable_singularity_deriv' tendsto_imp_not_essential) qed qed @@ -2178,7 +2171,7 @@ next case 2 have "filterlim (\x. f (g x)) at_infinity sequentially" - by (rule filterlim_compose[OF _ g(1)]) (use 2 in \auto simp: is_pole_def\) + using "2" filterlim_compose g(1) is_pole_def by blast with fg have False by (meson not_tendsto_and_filterlim_at_infinity sequentially_bot) thus ?thesis .. @@ -2241,13 +2234,14 @@ hence **: "f \x\ c" by (simp add: tendsto_eventually) show False - using not_tendsto_and_filterlim_at_infinity[OF _ ** assms(1)[unfolded is_pole_def]] by simp + using ** \is_pole f x\ at_neq_bot is_pole_def + not_tendsto_and_filterlim_at_infinity by blast qed lemma neg_zorder_imp_is_pole: - assumes iso:"isolated_singularity_at f z" and f_ness:"not_essential f z" - and "zorder f z < 0" and fre_nz:"\\<^sub>F w in at z. f w \ 0 " + assumes iso: "isolated_singularity_at f z" and f_ness: "not_essential f z" + and "zorder f z < 0" and fre_nz: "\\<^sub>F w in at z. f w \ 0 " shows "is_pole f z" proof - define P where "P = zor_poly f z" @@ -2255,24 +2249,23 @@ have "n<0" unfolding n_def by (simp add: assms(3)) define nn where "nn = nat (-n)" - obtain r where "P z \ 0" "r>0" and r_holo:"P holomorphic_on cball z r" and - w_Pn:"(\w\cball z r - {z}. f w = P w * (w - z) powi n \ P w \ 0)" + obtain r where r: "P z \ 0" "r>0" and r_holo: "P holomorphic_on cball z r" and + w_Pn: "(\w\cball z r - {z}. f w = P w * (w-z) powi n \ P w \ 0)" using zorder_exist[OF iso f_ness fre_nz,folded P_def n_def] by auto - have "is_pole (\w. P w * (w - z) powi n) z" + have "is_pole (\w. P w * (w-z) powi n) z" unfolding is_pole_def proof (rule tendsto_mult_filterlim_at_infinity) show "P \z\ P z" - by (meson open_ball \0 < r\ ball_subset_cball centre_in_ball - continuous_on_eq_continuous_at continuous_on_subset - holomorphic_on_imp_continuous_on isContD r_holo) + by (metis \r>0\ r_holo centre_in_ball continuous_on_interior + holomorphic_on_imp_continuous_on interior_cball isContD) show "P z\0" by (simp add: \P z \ 0\) have "LIM x at z. inverse ((x - z) ^ nat (-n)) :> at_infinity" apply (subst filterlim_inverse_at_iff[symmetric]) using \n<0\ by (auto intro!:tendsto_eq_intros filterlim_atI - simp add:eventually_at_filter) + simp add: eventually_at_filter) then show "LIM x at z. (x - z) powi n :> at_infinity" proof (elim filterlim_mono_eventually) have "inverse ((x - z) ^ nat (-n)) = (x - z) powi n" @@ -2283,18 +2276,18 @@ by (simp add: eventually_at_filter) qed auto qed - moreover have "\\<^sub>F w in at z. f w = P w * (w - z) powi n" + moreover have "\\<^sub>F w in at z. f w = P w * (w-z) powi n" unfolding eventually_at_le using w_Pn \r>0\ by (force simp add: dist_commute) ultimately show ?thesis using is_pole_cong by fast qed lemma is_pole_divide_zorder: - fixes f g::"complex \ complex" and z::complex - assumes f_iso:"isolated_singularity_at f z" and g_iso:"isolated_singularity_at g z" - and f_ness:"not_essential f z" and g_ness:"not_essential g z" + fixes f g:: "complex \ complex" and z::complex + assumes f_iso: "isolated_singularity_at f z" and g_iso: "isolated_singularity_at g z" + and f_ness: "not_essential f z" and g_ness: "not_essential g z" and fg_nconst: "\\<^sub>Fw in (at z). f w * g w\ 0" - and z_less:"zorder f z < zorder g z" + and z_less: "zorder f z < zorder g z" shows "is_pole (\z. f z / g z) z" proof - define fn gn fg where "fn=zorder f z" and "gn=zorder g z" @@ -2302,15 +2295,15 @@ have "isolated_singularity_at fg z" unfolding fg_def using f_iso g_iso g_ness - by (auto intro:singularity_intros) + by (auto intro: singularity_intros) moreover have "not_essential fg z" unfolding fg_def using f_iso g_iso g_ness f_ness - by (auto intro:singularity_intros) + by (auto intro: singularity_intros) moreover have "zorder fg z < 0" proof - have "zorder fg z = fn - gn" - using zorder_divide[OF f_iso g_iso f_ness g_ness - fg_nconst,folded fn_def gn_def fg_def] . + using zorder_divide[OF f_iso g_iso f_ness g_ness fg_nconst] + by (simp add: fg_def fn_def gn_def) then show ?thesis using z_less by (simp add: fn_def gn_def) qed @@ -2321,7 +2314,7 @@ qed lemma isolated_pole_imp_nzero_times: - assumes f_iso:"isolated_singularity_at f z" + assumes f_iso: "isolated_singularity_at f z" and "is_pole f z" shows "\\<^sub>Fw in (at z). deriv f w * f w \ 0" proof (rule ccontr) @@ -2350,30 +2343,30 @@ by (meson analytic_deriv assms isolated_singularity_at_def) lemma zorder_deriv_minus_1: - fixes f g::"complex \ complex" and z::complex - assumes f_iso:"isolated_singularity_at f z" - and f_ness:"not_essential f z" - and f_nconst:"\\<^sub>F w in at z. f w \ 0" - and f_ord:"zorder f z \0" + fixes f g:: "complex \ complex" and z::complex + assumes f_iso: "isolated_singularity_at f z" + and f_ness: "not_essential f z" + and f_nconst: "\\<^sub>F w in at z. f w \ 0" + and f_ord: "zorder f z \0" shows "zorder (deriv f) z = zorder f z - 1" proof - define P where "P = zor_poly f z" define n where "n = zorder f z" have "n\0" unfolding n_def using f_ord by auto - obtain r where "P z \ 0" "r>0" and P_holo:"P holomorphic_on cball z r" + obtain r where "P z \ 0" "r>0" and P_holo: "P holomorphic_on cball z r" and "(\w\cball z r - {z}. f w - = P w * (w - z) powi n \ P w \ 0)" + = P w * (w-z) powi n \ P w \ 0)" using zorder_exist[OF f_iso f_ness f_nconst,folded P_def n_def] by auto from this(4) - have f_eq:"(\w\cball z r - {z}. f w - = P w * (w - z) powi n \ P w \ 0)" + have f_eq: "(\w\cball z r - {z}. f w + = P w * (w-z) powi n \ P w \ 0)" using complex_powr_of_int f_ord n_def by presburger - define D where "D = (\w. (deriv P w * (w - z) + of_int n * P w) - * (w - z) powi (n - 1))" + define D where "D = (\w. (deriv P w * (w-z) + of_int n * P w) + * (w-z) powi (n - 1))" - have deriv_f_eq:"deriv f w = D w" if "w \ ball z r - {z}" for w + have deriv_f_eq: "deriv f w = D w" if "w \ ball z r - {z}" for w proof - have ev': "eventually (\w. w \ ball z r - {z}) (nhds w)" using that by (intro eventually_nhds_in_open) auto @@ -2384,11 +2377,10 @@ moreover have "(P has_field_derivative deriv P w) (at w)" by (meson DiffD1 Elementary_Metric_Spaces.open_ball P_holo ball_subset_cball holomorphic_derivI holomorphic_on_subset that) - ultimately have "((\w. P w * (w - z) powi n) has_field_derivative D w) (at w)" + ultimately have "((\w. P w * (w-z) powi n) has_field_derivative D w) (at w)" unfolding D_def using that apply (auto intro!: derivative_eq_intros) - apply (fold wz_def) - by (auto simp:algebra_simps simp flip:power_int_add_1') + by (auto simp: algebra_simps simp flip:power_int_add_1' wz_def) also have "?this \ (f has_field_derivative D w) (at w)" using f_eq by (intro has_field_derivative_cong_ev refl eventually_mono[OF ev']) auto @@ -2402,14 +2394,13 @@ proof (rule zorder_eqI) show "open (ball z r)" "z \ ball z r" using \r > 0\ by auto - define g where "g=(\w. (deriv P w * (w - z) + of_int n * P w))" + define g where "g=(\w. (deriv P w * (w-z) + of_int n * P w))" show "g holomorphic_on ball z r" unfolding g_def using P_holo by (auto intro!:holomorphic_intros) show "g z \ 0" unfolding g_def using \P z \ 0\ \n\0\ by auto - show "deriv f w = - (deriv P w * (w - z) + of_int n * P w) * (w - z) powi (n - 1)" + show "deriv f w = (deriv P w * (w-z) + of_int n * P w) * (w-z) powi (n - 1)" if "w \ ball z r" "w \ z" for w using D_def deriv_f_eq that by blast qed @@ -2417,20 +2408,19 @@ lemma deriv_divide_is_pole: \\Generalises @{thm zorder_deriv}\ - fixes f g::"complex \ complex" and z::complex - assumes f_iso:"isolated_singularity_at f z" - and f_ness:"not_essential f z" + fixes f g:: "complex \ complex" and z::complex + assumes f_iso: "isolated_singularity_at f z" + and f_ness: "not_essential f z" and fg_nconst: "\\<^sub>Fw in (at z). deriv f w * f w \ 0" - and f_ord:"zorder f z \0" + and f_ord: "zorder f z \0" shows "is_pole (\z. deriv f z / f z) z" proof (rule neg_zorder_imp_is_pole) define ff where "ff=(\w. deriv f w / f w)" show "isolated_singularity_at ff z" using f_iso f_ness unfolding ff_def - by (auto intro:singularity_intros) + by (auto intro: singularity_intros) show "not_essential ff z" - unfolding ff_def using f_ness f_iso - by (auto intro:singularity_intros) + unfolding ff_def using f_ness f_iso by (auto intro: singularity_intros) have "zorder ff z = zorder (deriv f) z - zorder f z" unfolding ff_def using f_iso f_ness fg_nconst @@ -2444,8 +2434,8 @@ qed lemma is_pole_deriv_divide_is_pole: - fixes f g::"complex \ complex" and z::complex - assumes f_iso:"isolated_singularity_at f z" + fixes f g:: "complex \ complex" and z::complex + assumes f_iso: "isolated_singularity_at f z" and "is_pole f z" shows "is_pole (\z. deriv f z / f z) z" proof (rule deriv_divide_is_pole[OF f_iso]) diff -r 067462a6a652 -r 1171ea4a23e4 src/HOL/Complex_Analysis/Riemann_Mapping.thy --- a/src/HOL/Complex_Analysis/Riemann_Mapping.thy Sun Jan 19 18:18:07 2025 +0000 +++ b/src/HOL/Complex_Analysis/Riemann_Mapping.thy Wed Jan 22 22:22:27 2025 +0000 @@ -63,8 +63,10 @@ qed show ?thesis unfolding Moebius_function_def - apply (intro holomorphic_intros) - by (metis "*" mult.commute complex_cnj_cnj complex_cnj_mult complex_cnj_one complex_mod_cnj mem_ball_0 right_minus_eq) + proof (intro holomorphic_intros) + show "\z. z \ ball 0 1 \ 1 - cnj w * z \ 0" + by (metis * complex_cnj_cnj complex_cnj_mult complex_mod_cnj mem_ball_0 mult.commute mult_1 right_minus_eq) + qed qed lemma Moebius_function_compose: @@ -80,7 +82,7 @@ have "w2 * cnj w2 = 1" using that meq by (auto simp: algebra_simps) then show "z = 0" - by (metis (no_types) \cmod w2 < 1\ complex_mod_cnj less_irrefl mult.right_neutral norm_mult_less norm_one) + using \cmod w2 < 1\ complex_mod_sqrt_Re_mult_cnj by force qed moreover have "z - w2 - w1 * (1 - cnj w2 * z) = z * (1 - cnj w2 * z - cnj w1 * (z - w2))" using meq by (fastforce simp: algebra_simps) @@ -151,10 +153,9 @@ by force have *: "((\w. f (r * w)) has_field_derivative deriv f (r * z) * r) (at z)" if "z \ ball 0 1" for z::complex - proof (rule DERIV_chain' [where g=f]) - show "(f has_field_derivative deriv f (of_real r * z)) (at (of_real r * z))" - by (metis holomorphic_derivI [OF holF \open S\] \f \ F\ image_subset_iff r01 that) - qed simp + using DERIV_chain' [where g=f] \open S\ + by (meson DERIV_cmult_Id \f \ F\ holF holomorphic_derivI image_subset_iff + r01 that) have df0: "((\w. f (r * w)) has_field_derivative deriv f 0 * r) (at 0)" using * [of 0] by simp have deq: "deriv (\x. f (complex_of_real r * x)) 0 = deriv f 0 * complex_of_real r" @@ -316,12 +317,7 @@ qed qed have norm\1: "norm(\ (h (f z))) < 1" if "z \ S" for z - proof - - have "norm (\ (h (f z)) ^ 2) < 1" - by (metis (no_types) that DIM_complex \2 h01 image_subset_iff mem_ball_0 nf1) - then show ?thesis - by (metis le_less_trans mult_less_cancel_left2 norm_ge_zero norm_power not_le power2_eq_square) - qed + by (metis \2 h01 image_subset_iff mem_ball_0 nf1 norm_power power_less1_D that) then have \01: "\ (h (f 0)) \ ball 0 1" by (simp add: \0 \ S\) obtain p q where p0: "p (\ (h (f 0))) = 0" @@ -535,7 +531,7 @@ using gxy by (auto simp: path_image_join) qed (use gxy holf in auto) then have fintxy: "f contour_integrable_on linepath x y" - by (metis (no_types, lifting) contour_integrable_joinD1 contour_integrable_joinD2 gxy(2) has_contour_integral_integrable pathfinish_linepath pathstart_reversepath valid_path_imp_reverse valid_path_join valid_path_linepath vp(2)) + using gxy(2) has_contour_integral_integrable vp by fastforce have fintgx: "f contour_integrable_on (?g x)" "f contour_integrable_on (?g y)" using openS contour_integrable_holomorphic_simple gxy holf vp by blast+ show ?thesis @@ -671,8 +667,8 @@ unfolding norm_divide using \r > 0\ g_not_r [OF \z \ S\] g_not_r [OF \a \ S\] by (simp_all add: field_split_simps dist_commute dist_norm) - then show "?f ` S \ ball 0 1" - by auto + then show "?f ` S \ ball 0 1" + by auto show "inj_on ?f S" using \r > 0\ eqg apply (clarsimp simp: inj_on_def) by (metis diff_add_cancel) @@ -697,7 +693,7 @@ proof (intro exI conjI) show "g \ k holomorphic_on h ` S" by (smt (verit) holg holk holomorphic_on_compose holomorphic_on_subset imageE image_subset_iff kh) - show "\z\h ` S. f z = ((g \ k) z)\<^sup>2" + show "\z \ h ` S. f z = ((g \ k) z)\<^sup>2" using eqg kh by auto qed qed @@ -714,22 +710,13 @@ qed lemma homeomorphic_to_disc: - assumes S: "S \ {}" - and prev: "S = UNIV \ + assumes "S = UNIV \ (\f g. f holomorphic_on S \ g holomorphic_on ball 0 1 \ - (\z \ S. f z \ ball 0 1 \ g(f z) = z) \ - (\z \ ball 0 1. g z \ S \ f(g z) = z))" (is "_ \ ?P") + (\z \ S. f z \ ball 0 1 \ g(f z) = z) \ + (\z \ ball 0 1. g z \ S \ f(g z) = z))" (is "_ \ ?P") shows "S homeomorphic ball (0::complex) 1" - using prev -proof - assume "S = UNIV" then show ?thesis - using homeomorphic_ball01_UNIV homeomorphic_sym by blast -next - assume ?P - then show ?thesis - unfolding homeomorphic_minimal - using holomorphic_on_imp_continuous_on by blast -qed + by (smt (verit, ccfv_SIG) holomorphic_on_imp_continuous_on homeomorphic_ball01_UNIV + homeomorphic_minimal assms) lemma homeomorphic_to_disc_imp_simply_connected: assumes "S = {} \ S homeomorphic ball (0::complex) 1" @@ -900,15 +887,11 @@ using n \cmod x < 1\ by (auto simp: field_split_simps algebra_simps D_def) moreover have " f ` D n \ closure (f ` A n) = {}" proof - - have op_fDn: "open(f ` (D n))" - proof (rule invariance_of_domain) - show "continuous_on (D n) f" - by (rule continuous_on_subset [OF contf D01]) - show "open (D n)" - by (simp add: D_def) - show "inj_on f (D n)" - unfolding inj_on_def using D01 by (metis gf mem_ball_0 subsetCE) - qed + have"inj_on f (D n)" + unfolding inj_on_def using D01 by (metis gf mem_ball_0 subsetCE) + then have op_fDn: "open(f ` (D n))" + by (metis invariance_of_domain D_def Elementary_Metric_Spaces.open_ball + continuous_on_subset [OF contf D01]) have injf: "inj_on f (ball 0 1)" by (metis mem_ball_0 inj_on_def gf) have "D n \ A n \ ball 0 1" @@ -992,9 +975,9 @@ by (metis closedin_diff closedin_self closedin_closed_trans [OF _ clo_INTX] K) qed (use \compact L\ \C \ L\ in auto) qed - obtain U V where "open U" and "compact (closure U)" and "open V" "K \ U" - and V: "\(range X) - K \ V" and "U \ V = {}" - using separation_normal_compact [OF \compact K\ clo] by blast + obtain U V where "open U" "open V" and "compact (closure U)" + and V: "\(range X) - K \ V" and U: "K \ U" "U \ V = {}" + by (metis Diff_disjoint separation_normal_compact [OF \compact K\ clo]) then have "U \ (\ (range X) - K) = {}" by blast have "(closure U - U) \ (\n. X n \ closure U) \ {}" @@ -1049,12 +1032,8 @@ moreover have "(\n. X n \ closure U) = (\n. X n) \ closure U" by blast moreover have "x \ U" if "\n. x \ X n" "x \ closure U" for x - proof - - have "x \ V" - using \U \ V = {}\ \open V\ closure_iff_nhds_not_empty that(2) by blast - then show ?thesis - by (metis (no_types) Diff_iff INT_I V \K \ U\ subsetD that(1)) - qed + by (metis Diff_iff INT_I U V \open V\ closure_iff_nhds_not_empty + order.refl subsetD that) ultimately show False by (auto simp: open_Int_closure_eq_empty [OF \open V\, of U]) qed @@ -1101,7 +1080,7 @@ moreover have "closed C" using C_ccsw clo_ccs by blast ultimately show False - by (metis C False \S \ UNIV\ C_ccsw bot_eq_sup_iff connected_component_eq_UNIV frontier_Int_closed + by (metis C \S \ {}\ \S \ UNIV\ C_ccsw bot_eq_sup_iff connected_component_eq_UNIV frontier_Int_closed frontier_closed frontier_complement frontier_eq_empty frontier_of_components_subset in_components_maximal inf.orderE) qed then show "connected_component_set (- S) w \ frontier S \ {}" @@ -1114,14 +1093,18 @@ by (auto simp: closed_Compl closed_connected_component frontier_def openS) show "frontier (connected_component_set (- S) z) \ frontier (- S)" using frontier_of_connected_component_subset by fastforce - have "\ bounded (-S)" + have "connected (closure S - S)" + by (metis confr frontier_def interior_open openS) + moreover have "\ bounded (-S)" by (simp add: True cobounded_imp_unbounded) + moreover have "bounded (connected_component_set (- S) w)" + using C_ccsw \bounded C\ by auto + ultimately have "z \ S" + using \w \ S\ openS + by (metis ComplI Compl_eq_Diff_UNIV connected_UNIV closed_closure closure_subset + connected_component_eq_self connected_diff_open_from_closed subset_UNIV) then have "connected_component_set (- S) z \ {}" - unfolding connected_component_eq_empty - using confr openS \bounded C\ \w \ S\ - apply (simp add: frontier_def interior_open C_ccsw) - by (metis ComplI Compl_eq_Diff_UNIV connected_UNIV closed_closure closure_subset connected_component_eq_self - connected_diff_open_from_closed subset_UNIV) + by (metis ComplI connected_component_eq_empty) then show "frontier (connected_component_set (- S) z) \ {}" by (metis False \S \ UNIV\ connected_component_eq_UNIV frontier_complement frontier_eq_empty) qed @@ -1285,8 +1268,8 @@ obtain \ where "0 < \" "\w. \w \ S; dist w z < \\ \ dist (g w) (g z) < cmod (g z)" using contg [unfolded continuous_on_iff] by (metis \g z \ 0\ \z \ S\ zero_less_norm_iff) then have \: "\w. \w \ S; w \ ball z \\ \ g w + g z \ 0" - apply (clarsimp simp: dist_norm) - by (metis add_diff_cancel_left' dist_0_norm dist_complex_def less_le_not_le norm_increases_online norm_minus_commute) + by (metis add.commute add_cancel_right_left dist_commute dist_complex_def mem_ball + norm_increases_online norm_not_less_zero norm_zero order_less_asym) have *: "(\x. (f x - f z) / (x - z) / (g x + g z)) \z\ deriv f z / (g z + g z)" proof (intro tendsto_intros) show "(\x. (f x - f z) / (x - z)) \z\ deriv f z" @@ -1303,10 +1286,9 @@ using \z \ S\ \0 < \\ by simp show "\x. \x \ ball z \ \ S; x \ z\ \ (f x - f z) / (x - z) / (g x + g z) = (g x - g z) / (x - z)" - using \ - apply (simp add: geq \z \ S\ divide_simps) - apply (auto simp: algebra_simps power2_eq_square) - done + using \ \z \ S\ + apply (simp add: geq field_split_simps power2_eq_square) + by (metis distrib_left mult_cancel_right) qed then show "\f'. (g has_field_derivative f') (at z)" .. qed @@ -1401,7 +1383,7 @@ assume g: "g holomorphic_on ball 0 1" "\z\ball 0 1. g z \ S \ f (g z) = z" and "\z\S. cmod (f z) < 1 \ g (f z) = z" then have "S = g ` (ball 0 1)" - by (force simp:) + by force then have "open S" by (metis open_ball g inj_on_def open_mapping_thm3) } @@ -1480,9 +1462,10 @@ proof - have "closed_segment t u \ {0..1}" using closed_segment_eq_real_ivl t that by auto + then have "\r. \r \ closed_segment t u\ \ dist (p t) (p r) < cmod (p t - \)" + by (smt (verit, best) d dist_commute dist_in_closed_segment subsetD \dist u t < d\) then have piB: "path_image(subpath t u p) \ ?B" - apply (clarsimp simp add: path_image_subpath_gen) - by (metis subsetD le_less_trans \dist u t < d\ d dist_commute dist_in_closed_segment) + by (auto simp: path_image_subpath_gen) have *: "path (g \ subpath t u p)" proof (rule path_continuous_image) show "path (subpath t u p)" @@ -1561,9 +1544,7 @@ qed show "continuous_on UNIV (\w. \ + exp w)" by (rule continuous_intros)+ - show "(\w. \ + exp w) \ UNIV \ -{\}" - by auto - qed + qed auto then have "homotopic_with_canon (\r. pathfinish r = pathstart r) {0..1} (-{\}) p (\x. \ + 1)" by (rule homotopic_with_eq) (auto simp: o_def peq pathfinish_def pathstart_def) then have "homotopic_loops (-{\}) p (\t. \ + 1)"