diff -r 5a0d1075911c -r a1de627d417a src/HOL/Complex_Analysis/Cauchy_Integral_Formula.thy --- a/src/HOL/Complex_Analysis/Cauchy_Integral_Formula.thy Mon Apr 07 12:36:56 2025 +0200 +++ b/src/HOL/Complex_Analysis/Cauchy_Integral_Formula.thy Tue Apr 08 19:06:00 2025 +0100 @@ -412,12 +412,88 @@ finally show ?case by simp qed simp_all +lemma higher_deriv_cmult': + assumes "f analytic_on {x}" + shows "(deriv ^^ j) (\x. c * f x) x = c * (deriv ^^ j) f x" + using assms higher_deriv_cmult[of f _ x j c] assms + using analytic_at_two by blast + +lemma deriv_cmult': + assumes "f analytic_on {x}" + shows "deriv (\x. c * f x) x = c * deriv f x" + using higher_deriv_cmult'[OF assms, of 1 c] by simp + +lemma analytic_derivI: + assumes "f analytic_on {z}" + shows "(f has_field_derivative (deriv f z)) (at z within A)" + using assms holomorphic_derivI[of f _ z] analytic_at by blast + +lemma deriv_compose_analytic: + fixes f g :: "complex \ complex" + assumes "f analytic_on {g z}" "g analytic_on {z}" + shows "deriv (\x. f (g x)) z = deriv f (g z) * deriv g z" +proof - + have "((f \ g) has_field_derivative (deriv f (g z) * deriv g z)) (at z)" + by (intro DERIV_chain analytic_derivI assms) + thus ?thesis + by (auto intro!: DERIV_imp_deriv simp add: o_def) +qed + lemma valid_path_compose_holomorphic: assumes "valid_path g" "f holomorphic_on S" and "open S" "path_image g \ S" shows "valid_path (f \ g)" by (meson assms holomorphic_deriv holomorphic_on_imp_continuous_on holomorphic_on_imp_differentiable_at holomorphic_on_subset subsetD valid_path_compose) +lemma valid_path_compose_analytic: + assumes "valid_path g" and holo:"f analytic_on S" and "path_image g \ S" + shows "valid_path (f \ g)" +proof (rule valid_path_compose[OF \valid_path g\]) + fix x assume "x \ path_image g" + then show "f field_differentiable at x" + using analytic_on_imp_differentiable_at analytic_on_open assms holo by blast +next + show "continuous_on (path_image g) (deriv f)" + by (intro holomorphic_on_imp_continuous_on analytic_imp_holomorphic analytic_intros + analytic_on_subset[OF holo] assms) +qed + +lemma analytic_on_deriv [analytic_intros]: + assumes "f analytic_on g ` A" + assumes "g analytic_on A" + shows "(\x. deriv f (g x)) analytic_on A" +proof - + have "(deriv f \ g) analytic_on A" + by (rule analytic_on_compose_gen[OF assms(2) analytic_deriv[OF assms(1)]]) auto + thus ?thesis + by (simp add: o_def) +qed + +lemma contour_integral_comp_analyticW: + assumes "f analytic_on s" "valid_path \" "path_image \ \ s" + shows "contour_integral (f \ \) g = contour_integral \ (\w. deriv f w * g (f w))" +proof - + obtain spikes where "finite spikes" and \_diff: "\ C1_differentiable_on {0..1} - spikes" + using \valid_path \\ unfolding valid_path_def piecewise_C1_differentiable_on_def by auto + show "contour_integral (f \ \) g + = contour_integral \ (\w. deriv f w * g (f w))" + unfolding contour_integral_integral + proof (rule integral_spike[rule_format,OF negligible_finite[OF \finite spikes\]]) + fix t::real assume t:"t \ {0..1} - spikes" + then have "\ differentiable at t" + using \_diff unfolding C1_differentiable_on_eq by auto + moreover have "f field_differentiable at (\ t)" + proof - + have "\ t \ s" using t assms unfolding path_image_def by auto + thus ?thesis + using \f analytic_on s\ analytic_on_imp_differentiable_at by blast + qed + ultimately show "deriv f (\ t) * g (f (\ t)) * vector_derivative \ (at t) = + g ((f \ \) t) * vector_derivative (f \ \) (at t)" + by (subst vector_derivative_chain_at_general) (simp_all add:field_simps) + qed +qed + subsection\Morera's theorem\ lemma Morera_local_triangle_ball: