equal
deleted
inserted
replaced
178 case le show ?diff_fg |
178 case le show ?diff_fg |
179 proof (rule differentiable_transform_within [where d = "dist x c" and f = f]) |
179 proof (rule differentiable_transform_within [where d = "dist x c" and f = f]) |
180 have "f differentiable at x within ({a<..<c} - s)" |
180 have "f differentiable at x within ({a<..<c} - s)" |
181 apply (rule differentiable_at_withinI) |
181 apply (rule differentiable_at_withinI) |
182 using x le st |
182 using x le st |
183 by (metis (no_types, lifting) DiffD1 DiffD2 DiffI UnCI atLeastAtMost_diff_ends atLeastAtMost_iff at_within_interior insert_iff interior_atLeastAtMost le st(3) x) |
183 by (metis (no_types, lifting) DiffD1 DiffD2 DiffI UnCI atLeastAtMost_diff_ends atLeastAtMost_iff at_within_interior insert_iff interior_atLeastAtMost_real le st(3) x) |
184 moreover have "open ({a<..<c} - s)" |
184 moreover have "open ({a<..<c} - s)" |
185 by (blast intro: open_greaterThanLessThan \<open>finite s\<close> finite_imp_closed) |
185 by (blast intro: open_greaterThanLessThan \<open>finite s\<close> finite_imp_closed) |
186 ultimately show "f differentiable at x within {a..b}" |
186 ultimately show "f differentiable at x within {a..b}" |
187 using x le by (auto simp add: at_within_open_NO_MATCH differentiable_at_withinI) |
187 using x le by (auto simp add: at_within_open_NO_MATCH differentiable_at_withinI) |
188 qed (use x le st dist_real_def in auto) |
188 qed (use x le st dist_real_def in auto) |
190 case ge show ?diff_fg |
190 case ge show ?diff_fg |
191 proof (rule differentiable_transform_within [where d = "dist x c" and f = g]) |
191 proof (rule differentiable_transform_within [where d = "dist x c" and f = g]) |
192 have "g differentiable at x within ({c<..<b} - t)" |
192 have "g differentiable at x within ({c<..<b} - t)" |
193 apply (rule differentiable_at_withinI) |
193 apply (rule differentiable_at_withinI) |
194 using x ge st |
194 using x ge st |
195 by (metis DiffD1 DiffD2 DiffI UnCI atLeastAtMost_diff_ends atLeastAtMost_iff at_within_interior insert_iff interior_atLeastAtMost) |
195 by (metis DiffD1 DiffD2 DiffI UnCI atLeastAtMost_diff_ends atLeastAtMost_iff at_within_interior insert_iff interior_atLeastAtMost_real) |
196 moreover have "open ({c<..<b} - t)" |
196 moreover have "open ({c<..<b} - t)" |
197 by (blast intro: open_greaterThanLessThan \<open>finite t\<close> finite_imp_closed) |
197 by (blast intro: open_greaterThanLessThan \<open>finite t\<close> finite_imp_closed) |
198 ultimately show "g differentiable at x within {a..b}" |
198 ultimately show "g differentiable at x within {a..b}" |
199 using x ge by (auto simp add: at_within_open_NO_MATCH differentiable_at_withinI) |
199 using x ge by (auto simp add: at_within_open_NO_MATCH differentiable_at_withinI) |
200 qed (use x ge st dist_real_def in auto) |
200 qed (use x ge st dist_real_def in auto) |
1444 by (simp add: has_vector_derivative_def scaleR_conv_of_real o_def mult_ac) |
1444 by (simp add: has_vector_derivative_def scaleR_conv_of_real o_def mult_ac) |
1445 } note * = this |
1445 } note * = this |
1446 show ?thesis |
1446 show ?thesis |
1447 apply (rule fundamental_theorem_of_calculus_interior_strong) |
1447 apply (rule fundamental_theorem_of_calculus_interior_strong) |
1448 using k assms cfg * |
1448 using k assms cfg * |
1449 apply (auto simp: at_within_closed_interval) |
1449 apply (auto simp: at_within_Icc_at) |
1450 done |
1450 done |
1451 qed |
1451 qed |
1452 |
1452 |
1453 lemma contour_integral_primitive: |
1453 lemma contour_integral_primitive: |
1454 assumes "\<And>x. x \<in> s \<Longrightarrow> (f has_field_derivative f' x) (at x within s)" |
1454 assumes "\<And>x. x \<in> s \<Longrightarrow> (f has_field_derivative f' x) (at x within s)" |
4156 by (auto simp: open_dist) |
4156 by (auto simp: open_dist) |
4157 qed |
4157 qed |
4158 |
4158 |
4159 subsection\<open>Winding number is zero "outside" a curve, in various senses\<close> |
4159 subsection\<open>Winding number is zero "outside" a curve, in various senses\<close> |
4160 |
4160 |
4161 lemma winding_number_zero_in_outside: |
4161 proposition winding_number_zero_in_outside: |
4162 assumes \<gamma>: "path \<gamma>" and loop: "pathfinish \<gamma> = pathstart \<gamma>" and z: "z \<in> outside (path_image \<gamma>)" |
4162 assumes \<gamma>: "path \<gamma>" and loop: "pathfinish \<gamma> = pathstart \<gamma>" and z: "z \<in> outside (path_image \<gamma>)" |
4163 shows "winding_number \<gamma> z = 0" |
4163 shows "winding_number \<gamma> z = 0" |
4164 proof - |
4164 proof - |
4165 obtain B::real where "0 < B" and B: "path_image \<gamma> \<subseteq> ball 0 B" |
4165 obtain B::real where "0 < B" and B: "path_image \<gamma> \<subseteq> ball 0 B" |
4166 using bounded_subset_ballD [OF bounded_path_image [OF \<gamma>]] by auto |
4166 using bounded_subset_ballD [OF bounded_path_image [OF \<gamma>]] by auto |
4208 by (auto intro: winding_number_unique [OF \<gamma>] simp add: wnot) |
4208 by (auto intro: winding_number_unique [OF \<gamma>] simp add: wnot) |
4209 qed |
4209 qed |
4210 finally show ?thesis . |
4210 finally show ?thesis . |
4211 qed |
4211 qed |
4212 |
4212 |
4213 lemma winding_number_zero_outside: |
4213 corollary winding_number_zero_const: "a \<noteq> z \<Longrightarrow> winding_number (\<lambda>t. a) z = 0" |
|
4214 by (rule winding_number_zero_in_outside) |
|
4215 (auto simp: pathfinish_def pathstart_def path_polynomial_function) |
|
4216 |
|
4217 corollary winding_number_zero_outside: |
4214 "\<lbrakk>path \<gamma>; convex s; pathfinish \<gamma> = pathstart \<gamma>; z \<notin> s; path_image \<gamma> \<subseteq> s\<rbrakk> \<Longrightarrow> winding_number \<gamma> z = 0" |
4218 "\<lbrakk>path \<gamma>; convex s; pathfinish \<gamma> = pathstart \<gamma>; z \<notin> s; path_image \<gamma> \<subseteq> s\<rbrakk> \<Longrightarrow> winding_number \<gamma> z = 0" |
4215 by (meson convex_in_outside outside_mono subsetCE winding_number_zero_in_outside) |
4219 by (meson convex_in_outside outside_mono subsetCE winding_number_zero_in_outside) |
4216 |
4220 |
4217 lemma winding_number_zero_at_infinity: |
4221 lemma winding_number_zero_at_infinity: |
4218 assumes \<gamma>: "path \<gamma>" and loop: "pathfinish \<gamma> = pathstart \<gamma>" |
4222 assumes \<gamma>: "path \<gamma>" and loop: "pathfinish \<gamma> = pathstart \<gamma>" |