# HG changeset patch # User Wenda Li # Date 1544300854 0 # Node ID 3922aa1df44e3ee0e3eedb3f54af93f5b87c0158 # Parent 472af2d7835d9faf7520f37ac4537b1de340816d Tagged some theories in HOL-Analysis: Cauchy_Integral_Theorem, Riemann_Mapping and Winding_Numbers. diff -r 472af2d7835d -r 3922aa1df44e src/HOL/Analysis/Cauchy_Integral_Theorem.thy --- a/src/HOL/Analysis/Cauchy_Integral_Theorem.thy Fri Dec 07 21:42:08 2018 +0100 +++ b/src/HOL/Analysis/Cauchy_Integral_Theorem.thy Sat Dec 08 20:27:34 2018 +0000 @@ -6,7 +6,7 @@ imports Complex_Transcendental Weierstrass_Theorems Ordered_Euclidean_Space begin -subsection\Homeomorphisms of arc images\ +subsection%unimportant \Homeomorphisms of arc images\ lemma homeomorphism_arc: fixes g :: "real \ 'a::t2_space" @@ -85,7 +85,7 @@ using arc_simple_path inside_arc_empty by blast -subsection \Piecewise differentiable functions\ +subsection%unimportant \Piecewise differentiable functions\ definition piecewise_differentiable_on (infixr "piecewise'_differentiable'_on" 50) @@ -300,7 +300,7 @@ qed -subsubsection\The concept of continuously differentiable\ +subsection\The concept of continuously differentiable\ text \ John Harrison writes as follows: @@ -320,7 +320,7 @@ difficult proofs concerning winding numbers. We need a self-contained and straightforward theorem asserting that all derivatives can be integrated before we can adopt Harrison's choice.\ -definition C1_differentiable_on :: "(real \ 'a::real_normed_vector) \ real set \ bool" +definition%important C1_differentiable_on :: "(real \ 'a::real_normed_vector) \ real set \ bool" (infix "C1'_differentiable'_on" 50) where "f C1_differentiable_on S \ @@ -399,7 +399,7 @@ by (rule continuous_intros | simp add: continuous_at_imp_continuous_on differentiable_imp_continuous_within)+ -definition piecewise_C1_differentiable_on +definition%important piecewise_C1_differentiable_on (infixr "piecewise'_C1'_differentiable'_on" 50) where "f piecewise_C1_differentiable_on i \ continuous_on i f \ @@ -703,16 +703,16 @@ subsection \Valid paths, and their start and finish\ -definition valid_path :: "(real \ 'a :: real_normed_vector) \ bool" +definition%important valid_path :: "(real \ 'a :: real_normed_vector) \ bool" where "valid_path f \ f piecewise_C1_differentiable_on {0..1::real}" definition closed_path :: "(real \ 'a :: real_normed_vector) \ bool" where "closed_path g \ g 0 = g 1" -subsubsection\In particular, all results for paths apply\ +text\In particular, all results for paths apply\ lemma valid_path_imp_path: "valid_path g \ path g" -by (simp add: path_def piecewise_C1_differentiable_on_def valid_path_def) + by (simp add: path_def piecewise_C1_differentiable_on_def valid_path_def) lemma connected_valid_path_image: "valid_path g \ connected(path_image g)" by (metis connected_path_image valid_path_imp_path) @@ -726,7 +726,7 @@ lemma closed_valid_path_image: "valid_path g \ closed(path_image g)" by (metis closed_path_image valid_path_imp_path) -proposition valid_path_compose: +lemma valid_path_compose: assumes "valid_path g" and der: "\x. x \ path_image g \ f field_differentiable (at x)" and con: "continuous_on (path_image g) (deriv f)" @@ -802,17 +802,17 @@ text\piecewise differentiable function on [0,1]\ -definition has_contour_integral :: "(complex \ complex) \ complex \ (real \ complex) \ bool" +definition%important has_contour_integral :: "(complex \ complex) \ complex \ (real \ complex) \ bool" (infixr "has'_contour'_integral" 50) where "(f has_contour_integral i) g \ ((\x. f(g x) * vector_derivative g (at x within {0..1})) has_integral i) {0..1}" -definition contour_integrable_on +definition%important contour_integrable_on (infixr "contour'_integrable'_on" 50) where "f contour_integrable_on g \ \i. (f has_contour_integral i) g" -definition contour_integral +definition%important contour_integral where "contour_integral g f \ SOME i. (f has_contour_integral i) g \ \ f contour_integrable_on g \ i=0" lemma not_integrable_contour_integral: "\ f contour_integrable_on g \ contour_integral g f = 0" @@ -822,7 +822,7 @@ apply (simp add: contour_integral_def has_contour_integral_def contour_integrable_on_def) using has_integral_unique by blast -corollary has_contour_integral_eqpath: +lemma has_contour_integral_eqpath: "\(f has_contour_integral y) p; f contour_integrable_on \; contour_integral p f = contour_integral \ f\ \ (f has_contour_integral y) \" @@ -840,7 +840,7 @@ lemma has_contour_integral_integrable: "(f has_contour_integral i) g \ f contour_integrable_on g" using contour_integrable_on_def by blast -subsubsection\Show that we can forget about the localized derivative.\ +text\Show that we can forget about the localized derivative.\ lemma has_integral_localized_vector_derivative: "((\x. f (g x) * vector_derivative g (at x within {a..b})) has_integral i) {a..b} \ @@ -869,7 +869,7 @@ (\t. f(g t) * vector_derivative g (at t)) integrable_on {0..1}" by (simp add: has_contour_integral integrable_on_def contour_integrable_on_def) -subsection\Reversing a path\ +subsection%unimportant \Reversing a path\ lemma valid_path_imp_reverse: assumes "valid_path g" @@ -947,7 +947,7 @@ qed -subsection\Joining two paths together\ +subsection%unimportant \Joining two paths together\ lemma valid_path_join: assumes "valid_path g1" "valid_path g2" "pathfinish g1 = pathstart g2" @@ -1135,7 +1135,7 @@ by (simp add: has_contour_integral_integral has_contour_integral_join contour_integral_unique) -subsection\Shifting the starting point of a (closed) path\ +subsection%unimportant \Shifting the starting point of a (closed) path\ lemma shiftpath_alt_def: "shiftpath a f = (\x. if x \ 1-a then f (a + x) else f (a + x - 1))" by (auto simp: shiftpath_def) @@ -1278,7 +1278,7 @@ by (simp add: contour_integral_def contour_integrable_on_def has_contour_integral_shiftpath_eq) -subsection\More about straight-line paths\ +subsection%unimportant \More about straight-line paths\ lemma has_vector_derivative_linepath_within: "(linepath a b has_vector_derivative (b - a)) (at x within s)" @@ -1363,8 +1363,6 @@ lemma cnj_linepath': "cnj \ linepath a b = linepath (cnj a) (cnj b)" by (simp add: linepath_def fun_eq_iff) - - subsection\Relation to subpath construction\ lemma valid_path_subpath: @@ -1637,7 +1635,6 @@ using assms by (metis diff_self contour_integral_primitive) - text\Existence of path integral for continuous function\ lemma contour_integrable_continuous_linepath: assumes "continuous_on (closed_segment a b) f" @@ -1671,8 +1668,7 @@ lemma contour_integrable_on_id [iff]: "(\x. x) contour_integrable_on (linepath a b)" by (simp add: continuous_on_id contour_integrable_continuous_linepath) - -subsection\Arithmetical combining theorems\ +subsection%unimportant \Arithmetical combining theorems\ lemma has_contour_integral_neg: "(f has_contour_integral i) g \ ((\x. -(f x)) has_contour_integral (-i)) g" @@ -1756,8 +1752,7 @@ \ ((\x. sum (\a. f a x) s) has_contour_integral sum i s) p" by (induction s rule: finite_induct) (auto simp: has_contour_integral_0 has_contour_integral_add) - -subsection \Operations on path integrals\ +subsection%unimportant \Operations on path integrals\ lemma contour_integral_const_linepath [simp]: "contour_integral (linepath a b) (\x. c) = c*(b - a)" by (rule contour_integral_unique [OF has_contour_integral_const_linepath]) @@ -1824,7 +1819,7 @@ by (metis has_contour_integral_eq) -subsection \Arithmetic theorems for path integrability\ +subsection%unimportant \Arithmetic theorems for path integrability\ lemma contour_integrable_neg: "f contour_integrable_on g \ (\x. -(f x)) contour_integrable_on g" @@ -1862,7 +1857,7 @@ by (metis has_contour_integral_sum) -subsection\Reversing a path integral\ +subsection%unimportant \Reversing a path integral\ lemma has_contour_integral_reverse_linepath: "(f has_contour_integral i) (linepath a b) @@ -2021,7 +2016,7 @@ lemma snd_im_cbox [simp]: "cbox a b \ {} \ (snd ` cbox (a,c) (b,d)) = cbox c d" by (auto simp: cbox_Pair_eq) -lemma contour_integral_swap: +proposition contour_integral_swap: assumes fcon: "continuous_on (path_image g \ path_image h) (\(y1,y2). f y1 y2)" and vp: "valid_path g" "valid_path h" and gvcon: "continuous_on {0..1} (\t. vector_derivative g (at t))" @@ -2092,7 +2087,7 @@ qed -subsection\The key quadrisection step\ +subsection%unimportant \The key quadrisection step\ lemma norm_sum_half: assumes "norm(a + b) \ e" @@ -2185,7 +2180,7 @@ qed qed -subsection\Cauchy's theorem for triangles\ +subsection%unimportant \Cauchy's theorem for triangles\ lemma triangle_points_closer: fixes a::complex @@ -2308,7 +2303,7 @@ done qed -proposition Cauchy_theorem_triangle: +proposition%unimportant Cauchy_theorem_triangle: assumes "f holomorphic_on (convex hull {a,b,c})" shows "(f has_contour_integral 0) (linepath a b +++ linepath b c +++ linepath c a)" proof - @@ -2414,8 +2409,7 @@ using has_contour_integral_integral by fastforce qed - -subsection\Version needing function holomorphic in interior only\ +subsection%unimportant \Version needing function holomorphic in interior only\ lemma Cauchy_theorem_flat_lemma: assumes f: "continuous_on (convex hull {a,b,c}) f" @@ -2464,8 +2458,7 @@ using add_eq_0_iff by force qed - -proposition Cauchy_theorem_triangle_interior: +lemma Cauchy_theorem_triangle_interior: assumes contf: "continuous_on (convex hull {a,b,c}) f" and holf: "f holomorphic_on interior (convex hull {a,b,c})" shows "(f has_contour_integral 0) (linepath a b +++ linepath b c +++ linepath c a)" @@ -2661,10 +2654,9 @@ using has_contour_integral_integral by fastforce qed - -subsection\Version allowing finite number of exceptional points\ - -proposition Cauchy_theorem_triangle_cofinite: +subsection%unimportant \Version allowing finite number of exceptional points\ + +proposition%unimportant Cauchy_theorem_triangle_cofinite: assumes "continuous_on (convex hull {a,b,c}) f" and "finite S" and "(\x. x \ interior(convex hull {a,b,c}) - S \ f field_differentiable (at x))" @@ -2747,8 +2739,7 @@ qed qed - -subsection\Cauchy's theorem for an open starlike set\ +subsection%unimportant \Cauchy's theorem for an open starlike set\ lemma starlike_convex_subset: assumes S: "a \ S" "closed_segment b c \ S" and subs: "\x. x \ S \ closed_segment a x \ S" @@ -2827,7 +2818,6 @@ qed (** Existence of a primitive.*) - lemma holomorphic_starlike_primitive: fixes f :: "complex \ complex" assumes contf: "continuous_on S f" @@ -2855,14 +2845,14 @@ done qed -corollary Cauchy_theorem_starlike: +lemma Cauchy_theorem_starlike: "\open S; starlike S; finite k; continuous_on S f; \x. x \ S - k \ f field_differentiable at x; valid_path g; path_image g \ S; pathfinish g = pathstart g\ \ (f has_contour_integral 0) g" by (metis holomorphic_starlike_primitive Cauchy_theorem_primitive at_within_open) -corollary Cauchy_theorem_starlike_simple: +lemma Cauchy_theorem_starlike_simple: "\open S; starlike S; f holomorphic_on S; valid_path g; path_image g \ S; pathfinish g = pathstart g\ \ (f has_contour_integral 0) g" apply (rule Cauchy_theorem_starlike [OF _ _ finite.emptyI]) @@ -2870,7 +2860,6 @@ apply (metis at_within_open holomorphic_on_def) done - subsection\Cauchy's theorem for a convex set\ text\For a convex set we can avoid assuming openness and boundary analyticity\ @@ -2967,7 +2956,7 @@ by (auto intro!: holomorphic_on_imp_differentiable_at simp: interior_open) qed (use assms in \auto intro: holomorphic_on_imp_continuous_on\) -corollary Cauchy_theorem_convex: +corollary%unimportant Cauchy_theorem_convex: "\continuous_on S f; convex S; finite K; \x. x \ interior S - K \ f field_differentiable at x; valid_path g; path_image g \ S; pathfinish g = pathstart g\ @@ -2982,22 +2971,20 @@ apply (simp_all add: holomorphic_on_imp_continuous_on) using at_within_interior holomorphic_on_def interior_subset by fastforce - text\In particular for a disc\ -corollary Cauchy_theorem_disc: +corollary%unimportant Cauchy_theorem_disc: "\finite K; continuous_on (cball a e) f; \x. x \ ball a e - K \ f field_differentiable at x; valid_path g; path_image g \ cball a e; pathfinish g = pathstart g\ \ (f has_contour_integral 0) g" by (auto intro: Cauchy_theorem_convex) -corollary Cauchy_theorem_disc_simple: +corollary%unimportant Cauchy_theorem_disc_simple: "\f holomorphic_on (ball a e); valid_path g; path_image g \ ball a e; pathfinish g = pathstart g\ \ (f has_contour_integral 0) g" by (simp add: Cauchy_theorem_convex_simple) - -subsection\Generalize integrability to local primitives\ +subsection%unimportant \Generalize integrability to local primitives\ lemma contour_integral_local_primitive_lemma: fixes f :: "complex\complex" @@ -3105,7 +3092,7 @@ fixes z:: "'a::real_normed_field" shows "z \ S \ continuous_on S (\w. 1 / (w - z))" by (rule continuous_intros | force)+ -corollary contour_integrable_inversediff: +lemma contour_integrable_inversediff: "\valid_path g; z \ path_image g\ \ (\w. 1 / (w-z)) contour_integrable_on g" apply (rule contour_integrable_holomorphic_simple [of _ "UNIV-{z}"]) apply (auto simp: holomorphic_on_open open_delete intro!: derivative_eq_intros) @@ -3432,9 +3419,9 @@ text\We can treat even non-rectifiable paths as having a "length" for bounds on analytic functions in open sets.\ -subsection\Winding Numbers\ - -definition winding_number_prop :: "[real \ complex, complex, real, real \ complex, complex] \ bool" where +subsection \Winding Numbers\ + +definition%important winding_number_prop :: "[real \ complex, complex, real, real \ complex, complex] \ bool" where "winding_number_prop \ z e p n \ valid_path p \ z \ path_image p \ pathstart p = pathstart \ \ @@ -3442,7 +3429,7 @@ (\t \ {0..1}. norm(\ t - p t) < e) \ contour_integral p (\w. 1/(w - z)) = 2 * pi * \ * n" -definition winding_number:: "[real \ complex, complex] \ complex" where +definition%important winding_number:: "[real \ complex, complex] \ complex" where "winding_number \ z \ SOME n. \e > 0. \p. winding_number_prop \ z e p n" @@ -3556,13 +3543,13 @@ by simp qed -lemma winding_number_valid_path: +proposition winding_number_valid_path: assumes "valid_path \" "z \ path_image \" shows "winding_number \ z = 1/(2*pi*\) * contour_integral \ (\w. 1/(w - z))" by (rule winding_number_unique) (use assms in \auto simp: valid_path_imp_path winding_number_prop_def\) -lemma has_contour_integral_winding_number: +proposition has_contour_integral_winding_number: assumes \: "valid_path \" "z \ path_image \" shows "((\w. 1/(w - z)) has_contour_integral (2*pi*\*winding_number \ z)) \" by (simp add: winding_number_valid_path has_contour_integral_integral contour_integrable_inversediff assms) @@ -3686,7 +3673,7 @@ done qed -subsubsection\Some lemmas about negating a path\ +subsubsection%unimportant \Some lemmas about negating a path\ lemma valid_path_negatepath: "valid_path \ \ valid_path (uminus \ \)" unfolding o_def using piecewise_C1_differentiable_neg valid_path_def by blast @@ -3751,7 +3738,7 @@ by (simp add: valid_path_join path_image_join winding_number_join valid_path_imp_path) -subsubsection\Useful sufficient conditions for the winding number to be positive\ +subsubsection%unimportant \Useful sufficient conditions for the winding number to be positive\ lemma Re_winding_number: "\valid_path \; z \ path_image \\ @@ -3954,15 +3941,12 @@ by (simp add: divide_inverse_commute integral_def) qed -corollary winding_number_exp_2pi: +lemma winding_number_exp_2pi: "\path p; z \ path_image p\ \ pathfinish p - z = exp (2 * pi * \ * winding_number p z) * (pathstart p - z)" using winding_number [of p z 1] unfolding valid_path_def path_image_def pathstart_def pathfinish_def winding_number_prop_def by (force dest: winding_number_exp_integral(2) [of _ 0 1 z] simp: field_simps contour_integral_integral exp_minus) - -subsection\The version with complex integers and equality\ - lemma integer_winding_number_eq: assumes \: "path \" and z: "z \ path_image \" shows "winding_number \ z \ \ \ pathfinish \ = pathstart \" @@ -4091,7 +4075,6 @@ using 0 2 by (auto simp: Ints_def) qed - subsection\Continuity of winding number and invariance on connected sets\ lemma continuous_at_winding_number: @@ -4244,8 +4227,7 @@ "path \ \ continuous_on (- path_image \) (\w. winding_number \ w)" by (simp add: continuous_at_imp_continuous_on continuous_at_winding_number) - -subsection\The winding number is constant on a connected region\ +subsection%unimportant \The winding number is constant on a connected region\ lemma winding_number_constant: assumes \: "path \" and loop: "pathfinish \ = pathstart \" and cs: "connected S" and sg: "S \ path_image \ = {}" @@ -4346,11 +4328,11 @@ finally show ?thesis . qed -corollary winding_number_zero_const: "a \ z \ winding_number (\t. a) z = 0" +corollary%unimportant winding_number_zero_const: "a \ z \ winding_number (\t. a) z = 0" by (rule winding_number_zero_in_outside) (auto simp: pathfinish_def pathstart_def path_polynomial_function) -corollary winding_number_zero_outside: +corollary%unimportant winding_number_zero_outside: "\path \; convex s; pathfinish \ = pathstart \; z \ s; path_image \ \ s\ \ winding_number \ z = 0" by (meson convex_in_outside outside_mono subsetCE winding_number_zero_in_outside) @@ -4618,10 +4600,9 @@ using holomorphic_on_imp_continuous_on by auto (metis at_within_interior holomorphic_on_def interiorE subsetCE) - subsection\Homotopy forms of Cauchy's theorem\ -proposition Cauchy_theorem_homotopic: +lemma Cauchy_theorem_homotopic: assumes hom: "if atends then homotopic_paths s g h else homotopic_loops s g h" and "open s" and f: "f holomorphic_on s" and vpg: "valid_path g" and vph: "valid_path h" @@ -4809,9 +4790,7 @@ apply (blast dest: holomorphic_on_imp_continuous_on homotopic_loops_imp_subset) by (simp add: Cauchy_theorem_homotopic_loops) - - -subsection\More winding number properties\ +subsection%unimportant \More winding number properties\ text\including the fact that it's +-1 inside a simple closed curve.\ @@ -4917,7 +4896,7 @@ by (metis segment_bound(2) norm_minus_commute not_le winding_number_loops_linear_eq) -proposition winding_number_subpath_combine: +lemma winding_number_subpath_combine: "\path g; z \ path_image g; u \ {0..1}; v \ {0..1}; w \ {0..1}\ \ winding_number (subpath u v g) z + winding_number (subpath v w g) z = @@ -4926,10 +4905,9 @@ winding_number_homotopic_paths [OF homotopic_join_subpaths]]) using path_image_subpath_subset by auto - subsection\Partial circle path\ -definition part_circlepath :: "[complex, real, real, real, real] \ complex" +definition%important part_circlepath :: "[complex, real, real, real, real] \ complex" where "part_circlepath z r s t \ \x. z + of_real r * exp (\ * of_real (linepath s t x))" lemma pathstart_part_circlepath [simp]: @@ -4945,7 +4923,7 @@ unfolding part_circlepath_def reversepath_def linepath_def by (auto simp:algebra_simps) -proposition has_vector_derivative_part_circlepath [derivative_intros]: +lemma has_vector_derivative_part_circlepath [derivative_intros]: "((part_circlepath z r s t) has_vector_derivative (\ * r * (of_real t - of_real s) * exp(\ * linepath s t x))) (at x within X)" @@ -4954,16 +4932,16 @@ apply (rule derivative_eq_intros | simp)+ done -corollary differentiable_part_circlepath: +lemma differentiable_part_circlepath: "part_circlepath c r a b differentiable at x within A" using has_vector_derivative_part_circlepath[of c r a b x A] differentiableI_vector by blast -corollary vector_derivative_part_circlepath: +lemma vector_derivative_part_circlepath: "vector_derivative (part_circlepath z r s t) (at x) = \ * r * (of_real t - of_real s) * exp(\ * linepath s t x)" using has_vector_derivative_part_circlepath vector_derivative_at by blast -corollary vector_derivative_part_circlepath01: +lemma vector_derivative_part_circlepath01: "\0 \ x; x \ 1\ \ vector_derivative (part_circlepath z r s t) (at x within {0..1}) = \ * r * (of_real t - of_real s) * exp(\ * linepath s t x)" @@ -5006,7 +4984,7 @@ by (fastforce simp add: path_image_def part_circlepath_def) qed -proposition path_image_part_circlepath': +lemma path_image_part_circlepath': "path_image (part_circlepath z r s t) = (\x. z + r * cis x) ` closed_segment s t" proof - have "path_image (part_circlepath z r s t) = @@ -5017,11 +4995,11 @@ finally show ?thesis by (simp add: cis_conv_exp) qed -corollary path_image_part_circlepath_subset: +lemma path_image_part_circlepath_subset: "\s \ t; 0 \ r\ \ path_image(part_circlepath z r s t) \ sphere z r" by (auto simp: path_image_part_circlepath sphere_def dist_norm algebra_simps norm_mult) -proposition in_path_image_part_circlepath: +lemma in_path_image_part_circlepath: assumes "w \ path_image(part_circlepath z r s t)" "s \ t" "0 \ r" shows "norm(w - z) = r" proof - @@ -5031,7 +5009,7 @@ by (simp add: dist_norm norm_minus_commute) qed -corollary path_image_part_circlepath_subset': +lemma path_image_part_circlepath_subset': assumes "r \ 0" shows "path_image (part_circlepath z r s t) \ sphere z r" proof (cases "s \ t") @@ -5130,8 +5108,7 @@ -contour_integral (part_circlepath c r b a) f" by (rule contour_integral_part_circlepath_reverse) - -proposition finite_bounded_log: "finite {z::complex. norm z \ b \ exp z = w}" +lemma finite_bounded_log: "finite {z::complex. norm z \ b \ exp z = w}" proof (cases "w = 0") case True then show ?thesis by auto next @@ -5161,7 +5138,7 @@ by (rule finite_subset [OF _ *]) (force simp: assms norm_mult) qed -proposition has_contour_integral_bound_part_circlepath_strong: +lemma has_contour_integral_bound_part_circlepath_strong: assumes fi: "(f has_contour_integral i) (part_circlepath z r s t)" and "finite k" and le: "0 \ B" "0 < r" "s \ t" and B: "\x. x \ path_image(part_circlepath z r s t) - k \ norm(f x) \ B" @@ -5208,14 +5185,14 @@ qed qed -corollary has_contour_integral_bound_part_circlepath: +lemma has_contour_integral_bound_part_circlepath: "\(f has_contour_integral i) (part_circlepath z r s t); 0 \ B; 0 < r; s \ t; \x. x \ path_image(part_circlepath z r s t) \ norm(f x) \ B\ \ norm i \ B*r*(t - s)" by (auto intro: has_contour_integral_bound_part_circlepath_strong) -proposition contour_integrable_continuous_part_circlepath: +lemma contour_integrable_continuous_part_circlepath: "continuous_on (path_image (part_circlepath z r s t)) f \ f contour_integrable_on (part_circlepath z r s t)" apply (simp add: contour_integrable_on has_contour_integral_def vector_derivative_part_circlepath path_image_def) @@ -5242,7 +5219,7 @@ using assms \0 < r\ by auto qed -proposition simple_path_part_circlepath: +lemma simple_path_part_circlepath: "simple_path(part_circlepath z r s t) \ (r \ 0 \ s \ t \ \s - t\ \ 2*pi)" proof (cases "r = 0 \ s = t") case True @@ -5287,7 +5264,7 @@ done qed -proposition arc_part_circlepath: +lemma arc_part_circlepath: assumes "r \ 0" "s \ t" "\s - t\ < 2*pi" shows "arc (part_circlepath z r s t)" proof - @@ -5314,10 +5291,9 @@ done qed - subsection\Special case of one complete circle\ -definition circlepath :: "[complex, real, real] \ complex" +definition%important circlepath :: "[complex, real, real] \ complex" where "circlepath z r \ part_circlepath z r 0 (2*pi)" lemma circlepath: "circlepath z r = (\x. z + r * exp(2 * of_real pi * \ * of_real x))" @@ -5358,7 +5334,7 @@ lemma path_image_circlepath_minus: "path_image (circlepath z (-r)) = path_image (circlepath z r)" using path_image_circlepath_minus_subset by fastforce -proposition has_vector_derivative_circlepath [derivative_intros]: +lemma has_vector_derivative_circlepath [derivative_intros]: "((circlepath z r) has_vector_derivative (2 * pi * \ * r * exp (2 * of_real pi * \ * of_real x))) (at x within X)" apply (simp add: circlepath_def scaleR_conv_of_real) @@ -5366,12 +5342,12 @@ apply (simp add: algebra_simps) done -corollary vector_derivative_circlepath: +lemma vector_derivative_circlepath: "vector_derivative (circlepath z r) (at x) = 2 * pi * \ * r * exp(2 * of_real pi * \ * x)" using has_vector_derivative_circlepath vector_derivative_at by blast -corollary vector_derivative_circlepath01: +lemma vector_derivative_circlepath01: "\0 \ x; x \ 1\ \ vector_derivative (circlepath z r) (at x within {0..1}) = 2 * pi * \ * r * exp(2 * of_real pi * \ * x)" @@ -5410,7 +5386,7 @@ by (force simp: assms algebra_simps norm_mult norm_minus_commute intro: *) qed -proposition path_image_circlepath [simp]: +lemma path_image_circlepath [simp]: "path_image (circlepath z r) = sphere z \r\" using path_image_circlepath_minus by (force simp: path_image_circlepath_nonneg abs_if) @@ -5423,13 +5399,13 @@ unfolding circlepath_def by (auto simp: algebra_simps in_path_image_part_circlepath dest!: has_contour_integral_bound_part_circlepath_strong) -corollary has_contour_integral_bound_circlepath: +lemma has_contour_integral_bound_circlepath: "\(f has_contour_integral i) (circlepath z r); 0 \ B; 0 < r; \x. norm(x - z) = r \ norm(f x) \ B\ \ norm i \ B*(2*pi*r)" by (auto intro: has_contour_integral_bound_circlepath_strong) -proposition contour_integrable_continuous_circlepath: +lemma contour_integrable_continuous_circlepath: "continuous_on (path_image (circlepath z r)) f \ f contour_integrable_on (circlepath z r)" by (simp add: circlepath_def contour_integrable_continuous_part_circlepath) @@ -5440,7 +5416,7 @@ lemma notin_path_image_circlepath [simp]: "cmod (w - z) < r \ w \ path_image (circlepath z r)" by (simp add: sphere_def dist_norm norm_minus_commute) -proposition contour_integral_circlepath: +lemma contour_integral_circlepath: assumes "r > 0" shows "contour_integral (circlepath z r) (\w. 1 / (w - z)) = 2 * complex_of_real pi * \" proof (rule contour_integral_unique) @@ -5510,7 +5486,7 @@ by (simp add: winding_number_circlepath assms) qed -corollary Cauchy_integral_circlepath_simple: +corollary%unimportant Cauchy_integral_circlepath_simple: assumes "f holomorphic_on cball z r" "norm(w - z) < r" shows "((\u. f u/(u - w)) has_contour_integral (2 * of_real pi * \ * f w)) (circlepath z r)" @@ -5607,7 +5583,7 @@ by (rule tendstoI) qed -corollary contour_integral_uniform_limit_circlepath: +corollary%unimportant contour_integral_uniform_limit_circlepath: assumes "\\<^sub>F n::'a in F. (f n) contour_integrable_on (circlepath z r)" and "uniform_limit (sphere z r) f l F" and "~ (trivial_limit F)" "0 < r" @@ -5616,9 +5592,9 @@ using assms by (auto simp: vector_derivative_circlepath norm_mult intro!: contour_integral_uniform_limit) -subsection\ General stepping result for derivative formulas\ - -proposition Cauchy_next_derivative: +subsection%unimportant \General stepping result for derivative formulas\ + +lemma Cauchy_next_derivative: assumes "continuous_on (path_image \) f'" and leB: "\t. t \ {0..1} \ norm (vector_derivative \ (at t)) \ B" and int: "\w. w \ s - path_image \ \ ((\u. f' u / (u - w)^k) has_contour_integral f w) \" @@ -5801,7 +5777,7 @@ done qed -corollary Cauchy_next_derivative_circlepath: +lemma Cauchy_next_derivative_circlepath: assumes contf: "continuous_on (path_image (circlepath z r)) f" and int: "\w. w \ ball z r \ ((\u. f u / (u - w)^k) has_contour_integral g w) (circlepath z r)" and k: "k \ 0" @@ -5823,7 +5799,7 @@ text\ In particular, the first derivative formula.\ -proposition Cauchy_derivative_integral_circlepath: +lemma Cauchy_derivative_integral_circlepath: assumes contf: "continuous_on (cball z r) f" and holf: "f holomorphic_on ball z r" and w: "w \ ball z r" @@ -6022,8 +5998,6 @@ \ f analytic_on S" using Morera_local_triangle by blast - - subsection\Combining theorems for higher derivatives including Leibniz rule\ lemma higher_deriv_linear [simp]: @@ -6039,7 +6013,7 @@ apply (metis higher_deriv_linear lambda_one) done -corollary higher_deriv_id [simp]: +lemma higher_deriv_id [simp]: "(deriv ^^ n) id z = (if n = 0 then z else if n = 1 then 1 else 0)" by (simp add: id_def) @@ -6049,7 +6023,7 @@ apply (metis DERIV_ident DERIV_transform_at id_apply zero_less_one) by (metis DERIV_chain comp_funpow comp_id funpow_swap1 mult.right_neutral) -proposition higher_deriv_uminus: +lemma higher_deriv_uminus: assumes "f holomorphic_on S" "open S" and z: "z \ S" shows "(deriv ^^ n) (\w. -(f w)) z = - ((deriv ^^ n) f z)" using z @@ -6068,7 +6042,7 @@ by (simp add: DERIV_imp_deriv) qed -proposition higher_deriv_add: +lemma higher_deriv_add: fixes z::complex assumes "f holomorphic_on S" "g holomorphic_on S" "open S" and z: "z \ S" shows "(deriv ^^ n) (\w. f w + g w) z = (deriv ^^ n) f z + (deriv ^^ n) g z" @@ -6090,7 +6064,7 @@ by (simp add: DERIV_imp_deriv) qed -corollary higher_deriv_diff: +lemma higher_deriv_diff: fixes z::complex assumes "f holomorphic_on S" "g holomorphic_on S" "open S" and z: "z \ S" shows "(deriv ^^ n) (\w. f w - g w) z = (deriv ^^ n) f z - (deriv ^^ n) g z" @@ -6099,11 +6073,10 @@ using assms holomorphic_on_minus apply (auto simp: higher_deriv_uminus) done - lemma bb: "Suc n choose k = (n choose k) + (if k = 0 then 0 else (n choose (k - 1)))" by (cases k) simp_all -proposition higher_deriv_mult: +lemma higher_deriv_mult: fixes z::complex assumes "f holomorphic_on S" "g holomorphic_on S" "open S" and z: "z \ S" shows "(deriv ^^ n) (\w. f w * g w) z = @@ -6138,8 +6111,7 @@ by (simp add: DERIV_imp_deriv) qed - -proposition higher_deriv_transform_within_open: +lemma higher_deriv_transform_within_open: fixes z::complex assumes "f holomorphic_on S" "g holomorphic_on S" "open S" and z: "z \ S" and fg: "\w. w \ S \ f w = g w" @@ -6148,7 +6120,7 @@ by (induction i arbitrary: z) (auto simp: fg intro: complex_derivative_transform_within_open holomorphic_higher_deriv assms) -proposition higher_deriv_compose_linear: +lemma higher_deriv_compose_linear: fixes z::complex assumes f: "f holomorphic_on T" and S: "open S" and T: "open T" and z: "z \ S" and fg: "\w. w \ S \ u * w \ T" @@ -6311,7 +6283,7 @@ text\ Formula for higher derivatives.\ -proposition Cauchy_has_contour_integral_higher_derivative_circlepath: +lemma Cauchy_has_contour_integral_higher_derivative_circlepath: assumes contf: "continuous_on (cball z r) f" and holf: "f holomorphic_on ball z r" and w: "w \ ball z r" @@ -6350,7 +6322,7 @@ using of_nat_eq_0_iff X by fastforce qed -proposition Cauchy_higher_derivative_integral_circlepath: +lemma Cauchy_higher_derivative_integral_circlepath: assumes contf: "continuous_on (cball z r) f" and holf: "f holomorphic_on ball z r" and w: "w \ ball z r" @@ -6374,7 +6346,7 @@ shows "contour_integral(circlepath z r) (\u. f u/(u - w)^(Suc k)) = (2 * pi * \) * (deriv ^^ k) f w / (fact k)" by (simp add: Cauchy_higher_derivative_integral_circlepath [OF assms]) -corollary Cauchy_contour_integral_circlepath_2: +lemma Cauchy_contour_integral_circlepath_2: assumes "continuous_on (cball z r) f" "f holomorphic_on ball z r" "w \ ball z r" shows "contour_integral(circlepath z r) (\u. f u/(u - w)^2) = (2 * pi * \) * deriv f w" using Cauchy_contour_integral_circlepath [OF assms, of 1] @@ -6532,7 +6504,6 @@ using Liouville_weak_0 [of "\z. f z - l"] by (simp add: assms holomorphic_on_const holomorphic_on_diff LIM_zero) - proposition Liouville_weak_inverse: assumes "f holomorphic_on UNIV" and unbounded: "\B. eventually (\x. norm (f x) \ B) at_infinity" obtains z where "f z = 0" @@ -6552,7 +6523,6 @@ using that by blast qed - text\ In particular we get the Fundamental Theorem of Algebra.\ theorem fundamental_theorem_of_algebra: @@ -6575,10 +6545,9 @@ qed (use that in auto) qed - subsection\Weierstrass convergence theorem\ -proposition holomorphic_uniform_limit: +lemma holomorphic_uniform_limit: assumes cont: "eventually (\n. continuous_on (cball z r) (f n) \ (f n) holomorphic_on ball z r) F" and ulim: "uniform_limit (cball z r) f g F" and F: "~ trivial_limit F" @@ -6726,7 +6695,7 @@ qed -subsection\Some more simple/convenient versions for applications\ +subsection%unimportant \Some more simple/convenient versions for applications\ lemma holomorphic_uniform_sequence: assumes S: "open S" @@ -6784,7 +6753,6 @@ by (rule bchoice) (blast intro: y) qed - subsection\On analytic functions defined by a series\ lemma series_and_derivative_comparison: @@ -6927,7 +6895,7 @@ using less_le_trans norm_not_less_zero by blast qed -proposition power_series_and_derivative: +proposition%unimportant power_series_and_derivative: fixes a :: "nat \ complex" and r::real assumes "summable (\n. a n * r^n)" obtains g g' where "\z \ ball w r. @@ -6940,7 +6908,7 @@ apply (auto simp: norm_minus_commute Ball_def dist_norm) done -proposition power_series_holomorphic: +proposition%unimportant power_series_holomorphic: assumes "\w. w \ ball z r \ ((\n. a n*(w - z)^n) sums f w)" shows "f holomorphic_on ball z r" proof - @@ -6987,17 +6955,16 @@ apply (force intro: power_series_holomorphic [where a = "\n. (deriv ^^ n) f z / (fact n)"]) done -corollary power_series_analytic: +lemma power_series_analytic: "(\w. w \ ball z r \ (\n. a n*(w - z)^n) sums f w) \ f analytic_on ball z r" by (force simp: analytic_on_open intro!: power_series_holomorphic) -corollary analytic_iff_power_series: +lemma analytic_iff_power_series: "f analytic_on ball z r \ (\w \ ball z r. (\n. (deriv ^^ n) f z / (fact n) * (w - z)^n) sums f w)" by (simp add: analytic_on_open holomorphic_iff_power_series) - -subsection\Equality between holomorphic functions, on open ball then connected set\ +subsection%unimportant \Equality between holomorphic functions, on open ball then connected set\ lemma holomorphic_fun_eq_on_ball: "\f holomorphic_on ball z r; g holomorphic_on ball z r; @@ -7080,7 +7047,7 @@ by (subst higher_deriv_diff) (use assms in \auto intro: holomorphic_intros\) qed (use assms in auto) -subsection\Some basic lemmas about poles/singularities\ +subsection%unimportant \Some basic lemmas about poles/singularities\ lemma pole_lemma: assumes holf: "f holomorphic_on S" and a: "a \ interior S" @@ -7140,7 +7107,7 @@ qed qed -proposition pole_theorem: +lemma pole_theorem: assumes holg: "g holomorphic_on S" and a: "a \ interior S" and eq: "\z. z \ S - {a} \ g z = (z - a) * f z" shows "(\z. if z = a then deriv g a @@ -7162,7 +7129,7 @@ done qed -proposition pole_theorem_open: +lemma pole_theorem_open: assumes holg: "g holomorphic_on S" and S: "open S" and eq: "\z. z \ S - {a} \ g z = (z - a) * f z" shows "(\z. if z = a then deriv g a @@ -7170,7 +7137,7 @@ using pole_lemma_open [OF holg S] by (rule holomorphic_transform) (auto simp: eq divide_simps) -proposition pole_theorem_0: +lemma pole_theorem_0: assumes holg: "g holomorphic_on S" and a: "a \ interior S" and eq: "\z. z \ S - {a} \ g z = (z - a) * f z" and [simp]: "f a = deriv g a" "g a = 0" @@ -7178,7 +7145,7 @@ using pole_theorem [OF holg a eq] by (rule holomorphic_transform) (auto simp: eq divide_simps) -proposition pole_theorem_open_0: +lemma pole_theorem_open_0: assumes holg: "g holomorphic_on S" and S: "open S" and eq: "\z. z \ S - {a} \ g z = (z - a) * f z" and [simp]: "f a = deriv g a" "g a = 0" @@ -7709,7 +7676,6 @@ using has_contour_integral_add [OF 1 2] by (simp add: diff_divide_distrib) qed - theorem Cauchy_integral_formula_global: assumes S: "open S" and holf: "f holomorphic_on S" and z: "z \ S" and vpg: "valid_path \" @@ -7782,7 +7748,6 @@ shows "(f has_contour_integral 0) \" by (metis Cauchy_theorem_global assms winding_number_zero_in_outside valid_path_imp_path) - lemma simply_connected_imp_winding_number_zero: assumes "simply_connected S" "path g" "path_image g \ S" "pathfinish g = pathstart g" "z \ S" @@ -7809,7 +7774,7 @@ homotopic_paths_imp_homotopic_loops) using valid_path_imp_path by blast -proposition holomorphic_logarithm_exists: +proposition%unimportant holomorphic_logarithm_exists: assumes A: "convex A" "open A" and f: "f holomorphic_on A" "\x. x \ A \ f x \ 0" and z0: "z0 \ A" diff -r 472af2d7835d -r 3922aa1df44e src/HOL/Analysis/Riemann_Mapping.thy --- a/src/HOL/Analysis/Riemann_Mapping.thy Fri Dec 07 21:42:08 2018 +0100 +++ b/src/HOL/Analysis/Riemann_Mapping.thy Sat Dec 08 20:27:34 2018 +0000 @@ -10,7 +10,7 @@ subsection\Moebius functions are biholomorphisms of the unit disc\ -definition Moebius_function :: "[real,complex,complex] \ complex" where +definition%important Moebius_function :: "[real,complex,complex] \ complex" where "Moebius_function \ \t w z. exp(\ * of_real t) * (z - w) / (1 - cnj w * z)" lemma Moebius_function_simple: @@ -781,7 +781,6 @@ end - proposition assumes "open S" shows simply_connected_eq_winding_number_zero: @@ -844,7 +843,6 @@ by safe qed - corollary contractible_eq_simply_connected_2d: fixes S :: "complex set" shows "open S \ (contractible S \ simply_connected S)" @@ -852,7 +850,6 @@ apply (simp add: contractible_imp_simply_connected) using convex_imp_contractible homeomorphic_contractible_eq simply_connected_eq_homeomorphic_to_disc by auto - subsection\A further chain of equivalences about components of the complement of a simply connected set\ text\(following 1.35 in Burckel'S book)\ @@ -1265,7 +1262,6 @@ by safe qed - lemma simply_connected_iff_simple: fixes S :: "complex set" assumes "open S" "bounded S" @@ -1333,7 +1329,6 @@ qed qed - lemma continuous_sqrt_imp_simply_connected: assumes "connected S" and prev: "\f::complex\complex. \continuous_on S f; \z \ S. f z \ 0\ @@ -1416,7 +1411,7 @@ qed -subsection\More Borsukian results\ +subsection%unimportant \More Borsukian results\ lemma Borsukian_componentwise_eq: fixes S :: "'a::euclidean_space set" diff -r 472af2d7835d -r 3922aa1df44e src/HOL/Analysis/Winding_Numbers.thy --- a/src/HOL/Analysis/Winding_Numbers.thy Fri Dec 07 21:42:08 2018 +0100 +++ b/src/HOL/Analysis/Winding_Numbers.thy Sat Dec 08 20:27:34 2018 +0000 @@ -192,8 +192,6 @@ qed qed - - lemma simple_closed_path_wn1: fixes a::complex and e::real assumes "0 < e" @@ -353,8 +351,6 @@ qed qed - - lemma simple_closed_path_wn2: fixes a::complex and d e::real assumes "0 < d" "0 < e" @@ -541,8 +537,7 @@ qed qed - -proposition simple_closed_path_wn3: +lemma simple_closed_path_wn3: fixes p :: "real \ complex" assumes "simple_path p" and loop: "pathfinish p = pathstart p" obtains z where "z \ inside (path_image p)" "cmod (winding_number p z) = 1" @@ -731,8 +726,7 @@ qed qed - -theorem simple_closed_path_winding_number_inside: +proposition simple_closed_path_winding_number_inside: assumes "simple_path \" obtains "\z. z \ inside(path_image \) \ winding_number \ z = 1" | "\z. z \ inside(path_image \) \ winding_number \ z = -1" @@ -760,12 +754,12 @@ using inside_simple_curve_imp_closed assms that(2) by blast qed -corollary simple_closed_path_abs_winding_number_inside: +lemma simple_closed_path_abs_winding_number_inside: assumes "simple_path \" "z \ inside(path_image \)" shows "\Re (winding_number \ z)\ = 1" by (metis assms norm_minus_cancel norm_one one_complex.simps(1) real_norm_def simple_closed_path_winding_number_inside uminus_complex.simps(1)) -corollary simple_closed_path_norm_winding_number_inside: +lemma simple_closed_path_norm_winding_number_inside: assumes "simple_path \" "z \ inside(path_image \)" shows "norm (winding_number \ z) = 1" proof - @@ -777,19 +771,18 @@ by (metis assms norm_minus_cancel norm_one simple_closed_path_winding_number_inside) qed -corollary simple_closed_path_winding_number_cases: +lemma simple_closed_path_winding_number_cases: "\simple_path \; pathfinish \ = pathstart \; z \ path_image \\ \ winding_number \ z \ {-1,0,1}" apply (simp add: inside_Un_outside [of "path_image \", symmetric, unfolded set_eq_iff Set.Compl_iff] del: inside_Un_outside) apply (rule simple_closed_path_winding_number_inside) using simple_path_def winding_number_zero_in_outside by blast+ -corollary simple_closed_path_winding_number_pos: +lemma simple_closed_path_winding_number_pos: "\simple_path \; pathfinish \ = pathstart \; z \ path_image \; 0 < Re(winding_number \ z)\ \ winding_number \ z = 1" using simple_closed_path_winding_number_cases by fastforce - subsection \Winding number for rectangular paths\ (* TODO: Move *) @@ -846,8 +839,7 @@ by (intro closed_segmentI[of u]) (auto simp: u algebra_simps scaleR_conv_of_real complex_eq_iff) qed - -definition rectpath where +definition%important rectpath where "rectpath a1 a3 = (let a2 = Complex (Re a3) (Im a1); a4 = Complex (Re a1) (Im a3) in linepath a1 a2 +++ linepath a2 a3 +++ linepath a3 a4 +++ linepath a4 a1)" @@ -903,7 +895,7 @@ using assms by (auto simp: path_image_rectpath in_cbox_complex_iff in_box_complex_iff) -lemma winding_number_rectpath: +proposition winding_number_rectpath: assumes "z \ box a1 a3" shows "winding_number (rectpath a1 a3) z = 1" proof - @@ -929,17 +921,15 @@ (auto simp: path_image_rectpath_cbox_minus_box) qed -lemma winding_number_rectpath_outside: +proposition winding_number_rectpath_outside: assumes "Re a1 \ Re a3" "Im a1 \ Im a3" assumes "z \ cbox a1 a3" shows "winding_number (rectpath a1 a3) z = 0" using assms by (intro winding_number_zero_outside[OF _ _ _ assms(3)] path_image_rectpath_subset_cbox) simp_all - text\A per-function version for continuous logs, a kind of monodromy\ - -proposition winding_number_compose_exp: +proposition%unimportant winding_number_compose_exp: assumes "path p" shows "winding_number (exp \ p) 0 = (pathfinish p - pathstart p) / (2 * of_real pi * \)" proof - @@ -1031,9 +1021,7 @@ finally show ?thesis . qed - - -subsection\The winding number defines a continuous logarithm for the path itself\ +subsection%unimportant \The winding number defines a continuous logarithm for the path itself\ lemma winding_number_as_continuous_log: assumes "path p" and \: "\ \ path_image p" @@ -1138,8 +1126,7 @@ qed qed - -subsection\Winding number equality is the same as path/loop homotopy in C - {0}\ +subsection \Winding number equality is the same as path/loop homotopy in C - {0}\ lemma winding_number_homotopic_loops_null_eq: assumes "path p" and \: "\ \ path_image p" @@ -1182,7 +1169,6 @@ ultimately show ?lhs by metis qed - lemma winding_number_homotopic_paths_null_explicit_eq: assumes "path p" and \: "\ \ path_image p" shows "winding_number p \ = 0 \ homotopic_paths (-{\}) p (linepath (pathstart p) (pathstart p))" @@ -1200,7 +1186,6 @@ by (metis \ pathstart_in_path_image winding_number_homotopic_paths winding_number_trivial) qed - lemma winding_number_homotopic_paths_null_eq: assumes "path p" and \: "\ \ path_image p" shows "winding_number p \ = 0 \ (\a. homotopic_paths (-{\}) p (\t. a))" @@ -1215,8 +1200,7 @@ by (metis \ homotopic_paths_imp_pathfinish pathfinish_def pathfinish_in_path_image winding_number_homotopic_paths winding_number_zero_const) qed - -lemma winding_number_homotopic_paths_eq: +proposition winding_number_homotopic_paths_eq: assumes "path p" and \p: "\ \ path_image p" and "path q" and \q: "\ \ path_image q" and qp: "pathstart q = pathstart p" "pathfinish q = pathfinish p" @@ -1240,7 +1224,6 @@ by (simp add: winding_number_homotopic_paths) qed - lemma winding_number_homotopic_loops_eq: assumes "path p" and \p: "\ \ path_image p" and "path q" and \q: "\ \ path_image q"