# HG changeset patch # User Manuel Eberl # Date 1745319212 -7200 # Node ID 34190188b40fb8839546e209d5575d4c7adf9cb6 # Parent 42964a5121a9d5cf937f7d5d008395e85d640fda some facts about derivatives of products diff -r 42964a5121a9 -r 34190188b40f src/HOL/Complex_Analysis/Cauchy_Integral_Formula.thy --- a/src/HOL/Complex_Analysis/Cauchy_Integral_Formula.thy Fri Apr 18 16:51:31 2025 +0200 +++ b/src/HOL/Complex_Analysis/Cauchy_Integral_Formula.thy Tue Apr 22 12:53:32 2025 +0200 @@ -1266,6 +1266,58 @@ finally show ?thesis . qed +lemma deriv_complex_uniform_limit: + assumes ulim: "uniform_limit A f g F" + and f_holo: "eventually (\n. f n holomorphic_on A) F" + and F: "F \ bot" + and A: "open A" "z \ A" + shows "((\n. deriv (f n) z) \ deriv g z) F" + using higher_deriv_complex_uniform_limit[OF assms, of 1] by simp + +lemma logderiv_prodinf_complex_uniform_limit: + fixes f :: "nat \ complex \ complex" + assumes lim: "uniform_limit A (\n x. \kk. f k holomorphic_on A" + assumes nz: "P z \ 0" + assumes A: "open A" "z \ A" + shows "(\k. deriv (f k) z / f k z) sums (deriv P z / P z)" +proof - + define f' where "f' = (\k. deriv (f k))" + note [derivative_intros] = has_field_derivative_prod' + have [derivative_intros]: + "(f k has_field_derivative f' k z) (at z within B)" if "z \ A" for B z k + using that holomorphic_derivI[OF holo[of k], of z B] A unfolding f'_def by auto + have lim': "(\n. \k P z" + using lim by (rule tendsto_uniform_limitI) fact+ + + have nz': "f k z \ 0" for k + proof + assume "f k z = 0" + have "eventually (\n. (\kf k z = 0\ in auto) + hence "(\n. (\k 0" + by (rule tendsto_eventually) + with lim' have "P z = 0" + using tendsto_unique sequentially_bot by blast + with nz show False + by simp + qed + + from lim have "(\n. deriv (\x. \k deriv P z" + by (rule deriv_complex_uniform_limit) + (use A in \auto intro!: always_eventually holomorphic_intros holo\) + also have "(\n. deriv (\x. \kn. (\kkz \ A\ by (auto intro!: ext DERIV_imp_deriv derivative_eq_intros simp: nz') + finally have "(\n. (\kk deriv P z" . + hence "(\n. (\kkk deriv P z / P z" + by (intro tendsto_intros) (use nz lim' in auto) + also have "(\n. (\kkkn. (\kk. f' k z / f k z) sums (deriv P z / P z)" + unfolding sums_def . +qed + text\ Version showing that the limit is the limit of the derivatives.\ diff -r 42964a5121a9 -r 34190188b40f src/HOL/Deriv.thy --- a/src/HOL/Deriv.thy Fri Apr 18 16:51:31 2025 +0200 +++ b/src/HOL/Deriv.thy Tue Apr 22 12:53:32 2025 +0200 @@ -1156,6 +1156,35 @@ ((\x. f (g x)) has_field_derivative Da * Db) (at x within s)" by (rule DERIV_chain') +text \Derivative of a finite product\ + +lemma has_field_derivative_prod: + assumes "\x. x \ A \ (f x has_field_derivative f' x) (at z)" + shows "((\u. \x\A. f x u) has_field_derivative (\x\A. f' x * (\y\A-{x}. f y z))) (at z)" + using assms +proof (induction A rule: infinite_finite_induct) + case (insert x A) + have eq: "insert x A - {y} = insert x (A - {y})" if "y \ A" for y + using insert.hyps that by auto + show ?case + using insert.hyps + by (auto intro!: derivative_eq_intros insert.prems insert.IH sum.cong + simp: sum_distrib_left sum_distrib_right eq) +qed auto + +lemma has_field_derivative_prod': + assumes "\x. x \ A \ f x z \ 0" + assumes "\x. x \ A \ (f x has_field_derivative f' x) (at z)" + defines "P \ (\A u. \x\A. f x u)" + shows "(P A has_field_derivative (P A z * (\x\A. f' x / f x z))) (at z)" +proof (cases "finite A") + case True + note [derivative_intros] = has_field_derivative_prod + show ?thesis using assms True + by (auto intro!: derivative_eq_intros + simp: prod_diff1 sum_distrib_left sum_distrib_right mult_ac) +qed (auto simp: P_def) + text \Standard version\ lemma DERIV_chain: