author | haftmann |
Thu, 19 Jun 2025 17:15:40 +0200 | |
changeset 82734 | 89347c0cc6a3 |
parent 80052 | 35b2143aeec6 |
permissions | -rw-r--r-- |
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1 |
(* |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2 |
Material originally from HOL Light, ported by Larry Paulson, moved here by Manuel Eberl |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3 |
*) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4 |
section\<^marker>\<open>tag unimportant\<close> \<open>Smooth paths\<close> |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
5 |
theory Smooth_Paths |
80052
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
6 |
imports Retracts |
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
7 |
begin |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
8 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
9 |
subsection\<^marker>\<open>tag unimportant\<close> \<open>Homeomorphisms of arc images\<close> |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
10 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
11 |
lemma path_connected_arc_complement: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
12 |
fixes \<gamma> :: "real \<Rightarrow> 'a::euclidean_space" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
13 |
assumes "arc \<gamma>" "2 \<le> DIM('a)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
14 |
shows "path_connected(- path_image \<gamma>)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
15 |
proof - |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
16 |
have "path_image \<gamma> homeomorphic {0..1::real}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
17 |
by (simp add: assms homeomorphic_arc_image_interval) |
78475 | 18 |
then show ?thesis |
19 |
by (intro path_connected_complement_homeomorphic_convex_compact) (auto simp: assms) |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
20 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
21 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
22 |
lemma connected_arc_complement: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
23 |
fixes \<gamma> :: "real \<Rightarrow> 'a::euclidean_space" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
24 |
assumes "arc \<gamma>" "2 \<le> DIM('a)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
25 |
shows "connected(- path_image \<gamma>)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
26 |
by (simp add: assms path_connected_arc_complement path_connected_imp_connected) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
27 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
28 |
lemma inside_arc_empty: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
29 |
fixes \<gamma> :: "real \<Rightarrow> 'a::euclidean_space" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
30 |
assumes "arc \<gamma>" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
31 |
shows "inside(path_image \<gamma>) = {}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
32 |
proof (cases "DIM('a) = 1") |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
33 |
case True |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
34 |
then show ?thesis |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
35 |
using assms connected_arc_image connected_convex_1_gen inside_convex by blast |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
36 |
next |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
37 |
case False |
78475 | 38 |
then have "connected (- path_image \<gamma>)" |
39 |
by (metis DIM_ge_Suc0 One_nat_def Suc_1 antisym assms connected_arc_complement not_less_eq_eq) |
|
40 |
then |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
41 |
show ?thesis |
78475 | 42 |
by (simp add: assms bounded_arc_image inside_bounded_complement_connected_empty) |
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
43 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
44 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
45 |
lemma inside_simple_curve_imp_closed: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
46 |
fixes \<gamma> :: "real \<Rightarrow> 'a::euclidean_space" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
47 |
shows "\<lbrakk>simple_path \<gamma>; x \<in> inside(path_image \<gamma>)\<rbrakk> \<Longrightarrow> pathfinish \<gamma> = pathstart \<gamma>" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
48 |
using arc_simple_path inside_arc_empty by blast |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
49 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
50 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
51 |
subsection \<open>Piecewise differentiability of paths\<close> |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
52 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
53 |
lemma continuous_on_joinpaths_D1: |
78475 | 54 |
assumes "continuous_on {0..1} (g1 +++ g2)" |
55 |
shows "continuous_on {0..1} g1" |
|
56 |
proof (rule continuous_on_eq) |
|
57 |
have "continuous_on {0..1/2} (g1 +++ g2)" |
|
58 |
using assms continuous_on_subset split_01 by auto |
|
59 |
then show "continuous_on {0..1} (g1 +++ g2 \<circ> (*) (inverse 2))" |
|
60 |
by (intro continuous_intros) force |
|
61 |
qed (auto simp: joinpaths_def) |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
62 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
63 |
lemma continuous_on_joinpaths_D2: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
64 |
"\<lbrakk>continuous_on {0..1} (g1 +++ g2); pathfinish g1 = pathstart g2\<rbrakk> \<Longrightarrow> continuous_on {0..1} g2" |
78475 | 65 |
using path_def path_join by blast |
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
66 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
67 |
lemma piecewise_differentiable_D1: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
68 |
assumes "(g1 +++ g2) piecewise_differentiable_on {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
69 |
shows "g1 piecewise_differentiable_on {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
70 |
proof - |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
71 |
obtain S where cont: "continuous_on {0..1} g1" and "finite S" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
72 |
and S: "\<And>x. x \<in> {0..1} - S \<Longrightarrow> g1 +++ g2 differentiable at x within {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
73 |
using assms unfolding piecewise_differentiable_on_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
74 |
by (blast dest!: continuous_on_joinpaths_D1) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
75 |
show ?thesis |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
76 |
unfolding piecewise_differentiable_on_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
77 |
proof (intro exI conjI ballI cont) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
78 |
show "finite (insert 1 (((*)2) ` S))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
79 |
by (simp add: \<open>finite S\<close>) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
80 |
show "g1 differentiable at x within {0..1}" if "x \<in> {0..1} - insert 1 ((*) 2 ` S)" for x |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
81 |
proof (rule_tac d="dist (x/2) (1/2)" in differentiable_transform_within) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
82 |
have "g1 +++ g2 differentiable at (x / 2) within {0..1/2}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
83 |
by (rule differentiable_subset [OF S [of "x/2"]] | use that in force)+ |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
84 |
then show "g1 +++ g2 \<circ> (*) (inverse 2) differentiable at x within {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
85 |
using image_affinity_atLeastAtMost_div [of 2 0 "0::real" 1] |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
86 |
by (auto intro: differentiable_chain_within) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
87 |
qed (use that in \<open>auto simp: joinpaths_def\<close>) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
88 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
89 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
90 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
91 |
lemma piecewise_differentiable_D2: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
92 |
assumes "(g1 +++ g2) piecewise_differentiable_on {0..1}" and eq: "pathfinish g1 = pathstart g2" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
93 |
shows "g2 piecewise_differentiable_on {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
94 |
proof - |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
95 |
have [simp]: "g1 1 = g2 0" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
96 |
using eq by (simp add: pathfinish_def pathstart_def) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
97 |
obtain S where cont: "continuous_on {0..1} g2" and "finite S" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
98 |
and S: "\<And>x. x \<in> {0..1} - S \<Longrightarrow> g1 +++ g2 differentiable at x within {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
99 |
using assms unfolding piecewise_differentiable_on_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
100 |
by (blast dest!: continuous_on_joinpaths_D2) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
101 |
show ?thesis |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
102 |
unfolding piecewise_differentiable_on_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
103 |
proof (intro exI conjI ballI cont) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
104 |
show "finite (insert 0 ((\<lambda>x. 2*x-1)`S))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
105 |
by (simp add: \<open>finite S\<close>) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
106 |
show "g2 differentiable at x within {0..1}" if "x \<in> {0..1} - insert 0 ((\<lambda>x. 2*x-1)`S)" for x |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
107 |
proof (rule_tac d="dist ((x+1)/2) (1/2)" in differentiable_transform_within) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
108 |
have x2: "(x + 1) / 2 \<notin> S" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
109 |
using that |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
110 |
apply (clarsimp simp: image_iff) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
111 |
by (metis add.commute add_diff_cancel_left' mult_2 field_sum_of_halves) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
112 |
have "g1 +++ g2 \<circ> (\<lambda>x. (x+1) / 2) differentiable at x within {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
113 |
by (rule differentiable_chain_within differentiable_subset [OF S [of "(x+1)/2"]] | use x2 that in force)+ |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
114 |
then show "g1 +++ g2 \<circ> (\<lambda>x. (x+1) / 2) differentiable at x within {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
115 |
by (auto intro: differentiable_chain_within) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
116 |
show "(g1 +++ g2 \<circ> (\<lambda>x. (x + 1) / 2)) x' = g2 x'" if "x' \<in> {0..1}" "dist x' x < dist ((x + 1) / 2) (1/2)" for x' |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
117 |
proof - |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
118 |
have [simp]: "(2*x'+2)/2 = x'+1" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
119 |
by (simp add: field_split_simps) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
120 |
show ?thesis |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
121 |
using that by (auto simp: joinpaths_def) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
122 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
123 |
qed (use that in \<open>auto simp: joinpaths_def\<close>) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
124 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
125 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
126 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
127 |
lemma piecewise_C1_differentiable_D1: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
128 |
fixes g1 :: "real \<Rightarrow> 'a::real_normed_field" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
129 |
assumes "(g1 +++ g2) piecewise_C1_differentiable_on {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
130 |
shows "g1 piecewise_C1_differentiable_on {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
131 |
proof - |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
132 |
obtain S where "finite S" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
133 |
and co12: "continuous_on ({0..1} - S) (\<lambda>x. vector_derivative (g1 +++ g2) (at x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
134 |
and g12D: "\<forall>x\<in>{0..1} - S. g1 +++ g2 differentiable at x" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
135 |
using assms by (auto simp: piecewise_C1_differentiable_on_def C1_differentiable_on_eq) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
136 |
have g1D: "g1 differentiable at x" if "x \<in> {0..1} - insert 1 ((*) 2 ` S)" for x |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
137 |
proof (rule differentiable_transform_within) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
138 |
show "g1 +++ g2 \<circ> (*) (inverse 2) differentiable at x" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
139 |
using that g12D |
78475 | 140 |
unfolding joinpaths_def |
141 |
by (intro differentiable_chain_at derivative_intros | force)+ |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
142 |
show "\<And>x'. \<lbrakk>dist x' x < dist (x/2) (1/2)\<rbrakk> |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
143 |
\<Longrightarrow> (g1 +++ g2 \<circ> (*) (inverse 2)) x' = g1 x'" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
144 |
using that by (auto simp: dist_real_def joinpaths_def) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
145 |
qed (use that in \<open>auto simp: dist_real_def\<close>) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
146 |
have [simp]: "vector_derivative (g1 \<circ> (*) 2) (at (x/2)) = 2 *\<^sub>R vector_derivative g1 (at x)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
147 |
if "x \<in> {0..1} - insert 1 ((*) 2 ` S)" for x |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
148 |
apply (subst vector_derivative_chain_at) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
149 |
using that |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
150 |
apply (rule derivative_eq_intros g1D | simp)+ |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
151 |
done |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
152 |
have "continuous_on ({0..1/2} - insert (1/2) S) (\<lambda>x. vector_derivative (g1 +++ g2) (at x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
153 |
using co12 by (rule continuous_on_subset) force |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
154 |
then have coDhalf: "continuous_on ({0..1/2} - insert (1/2) S) (\<lambda>x. vector_derivative (g1 \<circ> (*)2) (at x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
155 |
proof (rule continuous_on_eq [OF _ vector_derivative_at]) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
156 |
show "(g1 +++ g2 has_vector_derivative vector_derivative (g1 \<circ> (*) 2) (at x)) (at x)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
157 |
if "x \<in> {0..1/2} - insert (1/2) S" for x |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
158 |
proof (rule has_vector_derivative_transform_within) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
159 |
show "(g1 \<circ> (*) 2 has_vector_derivative vector_derivative (g1 \<circ> (*) 2) (at x)) (at x)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
160 |
using that |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
161 |
by (force intro: g1D differentiable_chain_at simp: vector_derivative_works [symmetric]) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
162 |
show "\<And>x'. \<lbrakk>dist x' x < dist x (1/2)\<rbrakk> \<Longrightarrow> (g1 \<circ> (*) 2) x' = (g1 +++ g2) x'" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
163 |
using that by (auto simp: dist_norm joinpaths_def) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
164 |
qed (use that in \<open>auto simp: dist_norm\<close>) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
165 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
166 |
have "continuous_on ({0..1} - insert 1 ((*) 2 ` S)) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
167 |
((\<lambda>x. 1/2 * vector_derivative (g1 \<circ> (*)2) (at x)) \<circ> (*)(1/2))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
168 |
using coDhalf |
78475 | 169 |
apply (intro continuous_intros) |
170 |
by (simp add: scaleR_conv_of_real image_set_diff image_image) |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
171 |
then have con_g1: "continuous_on ({0..1} - insert 1 ((*) 2 ` S)) (\<lambda>x. vector_derivative g1 (at x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
172 |
by (rule continuous_on_eq) (simp add: scaleR_conv_of_real) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
173 |
have "continuous_on {0..1} g1" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
174 |
using continuous_on_joinpaths_D1 assms piecewise_C1_differentiable_on_def by blast |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
175 |
with \<open>finite S\<close> show ?thesis |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
176 |
apply (clarsimp simp add: piecewise_C1_differentiable_on_def C1_differentiable_on_eq) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
177 |
apply (rule_tac x="insert 1 (((*)2)`S)" in exI) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
178 |
apply (simp add: g1D con_g1) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
179 |
done |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
180 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
181 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
182 |
lemma piecewise_C1_differentiable_D2: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
183 |
fixes g2 :: "real \<Rightarrow> 'a::real_normed_field" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
184 |
assumes "(g1 +++ g2) piecewise_C1_differentiable_on {0..1}" "pathfinish g1 = pathstart g2" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
185 |
shows "g2 piecewise_C1_differentiable_on {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
186 |
proof - |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
187 |
obtain S where "finite S" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
188 |
and co12: "continuous_on ({0..1} - S) (\<lambda>x. vector_derivative (g1 +++ g2) (at x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
189 |
and g12D: "\<forall>x\<in>{0..1} - S. g1 +++ g2 differentiable at x" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
190 |
using assms by (auto simp: piecewise_C1_differentiable_on_def C1_differentiable_on_eq) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
191 |
have g2D: "g2 differentiable at x" if "x \<in> {0..1} - insert 0 ((\<lambda>x. 2*x-1) ` S)" for x |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
192 |
proof (rule differentiable_transform_within) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
193 |
show "g1 +++ g2 \<circ> (\<lambda>x. (x + 1) / 2) differentiable at x" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
194 |
using g12D that |
78475 | 195 |
unfolding joinpaths_def |
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
196 |
apply (drule_tac x= "(x+1) / 2" in bspec, force simp: field_split_simps) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
197 |
apply (rule differentiable_chain_at derivative_intros | force)+ |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
198 |
done |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
199 |
show "\<And>x'. dist x' x < dist ((x + 1) / 2) (1/2) \<Longrightarrow> (g1 +++ g2 \<circ> (\<lambda>x. (x + 1) / 2)) x' = g2 x'" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
200 |
using that by (auto simp: dist_real_def joinpaths_def field_simps) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
201 |
qed (use that in \<open>auto simp: dist_norm\<close>) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
202 |
have [simp]: "vector_derivative (g2 \<circ> (\<lambda>x. 2*x-1)) (at ((x+1)/2)) = 2 *\<^sub>R vector_derivative g2 (at x)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
203 |
if "x \<in> {0..1} - insert 0 ((\<lambda>x. 2*x-1) ` S)" for x |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
204 |
using that by (auto simp: vector_derivative_chain_at field_split_simps g2D) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
205 |
have "continuous_on ({1/2..1} - insert (1/2) S) (\<lambda>x. vector_derivative (g1 +++ g2) (at x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
206 |
using co12 by (rule continuous_on_subset) force |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
207 |
then have coDhalf: "continuous_on ({1/2..1} - insert (1/2) S) (\<lambda>x. vector_derivative (g2 \<circ> (\<lambda>x. 2*x-1)) (at x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
208 |
proof (rule continuous_on_eq [OF _ vector_derivative_at]) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
209 |
show "(g1 +++ g2 has_vector_derivative vector_derivative (g2 \<circ> (\<lambda>x. 2 * x - 1)) (at x)) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
210 |
(at x)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
211 |
if "x \<in> {1 / 2..1} - insert (1 / 2) S" for x |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
212 |
proof (rule_tac f="g2 \<circ> (\<lambda>x. 2*x-1)" and d="dist (3/4) ((x+1)/2)" in has_vector_derivative_transform_within) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
213 |
show "(g2 \<circ> (\<lambda>x. 2 * x - 1) has_vector_derivative vector_derivative (g2 \<circ> (\<lambda>x. 2 * x - 1)) (at x)) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
214 |
(at x)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
215 |
using that by (force intro: g2D differentiable_chain_at simp: vector_derivative_works [symmetric]) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
216 |
show "\<And>x'. \<lbrakk>dist x' x < dist (3 / 4) ((x + 1) / 2)\<rbrakk> \<Longrightarrow> (g2 \<circ> (\<lambda>x. 2 * x - 1)) x' = (g1 +++ g2) x'" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
217 |
using that by (auto simp: dist_norm joinpaths_def add_divide_distrib) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
218 |
qed (use that in \<open>auto simp: dist_norm\<close>) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
219 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
220 |
have [simp]: "((\<lambda>x. (x+1) / 2) ` ({0..1} - insert 0 ((\<lambda>x. 2 * x - 1) ` S))) = ({1/2..1} - insert (1/2) S)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
221 |
apply (simp add: image_set_diff inj_on_def image_image) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
222 |
apply (auto simp: image_affinity_atLeastAtMost_div add_divide_distrib) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
223 |
done |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
224 |
have "continuous_on ({0..1} - insert 0 ((\<lambda>x. 2*x-1) ` S)) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
225 |
((\<lambda>x. 1/2 * vector_derivative (g2 \<circ> (\<lambda>x. 2*x-1)) (at x)) \<circ> (\<lambda>x. (x+1)/2))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
226 |
by (rule continuous_intros | simp add: coDhalf)+ |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
227 |
then have con_g2: "continuous_on ({0..1} - insert 0 ((\<lambda>x. 2*x-1) ` S)) (\<lambda>x. vector_derivative g2 (at x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
228 |
by (rule continuous_on_eq) (simp add: scaleR_conv_of_real) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
229 |
have "continuous_on {0..1} g2" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
230 |
using continuous_on_joinpaths_D2 assms piecewise_C1_differentiable_on_def by blast |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
231 |
with \<open>finite S\<close> show ?thesis |
78475 | 232 |
by (meson C1_differentiable_on_eq con_g2 finite_imageI finite_insert g2D piecewise_C1_differentiable_on_def) |
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
233 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
234 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
235 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
236 |
subsection \<open>Valid paths, and their start and finish\<close> |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
237 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
238 |
definition\<^marker>\<open>tag important\<close> valid_path :: "(real \<Rightarrow> 'a :: real_normed_vector) \<Rightarrow> bool" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
239 |
where "valid_path f \<equiv> f piecewise_C1_differentiable_on {0..1::real}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
240 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
241 |
definition closed_path :: "(real \<Rightarrow> 'a :: real_normed_vector) \<Rightarrow> bool" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
242 |
where "closed_path g \<equiv> g 0 = g 1" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
243 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
244 |
text\<open>In particular, all results for paths apply\<close> |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
245 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
246 |
lemma valid_path_imp_path: "valid_path g \<Longrightarrow> path g" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
247 |
by (simp add: path_def piecewise_C1_differentiable_on_def valid_path_def) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
248 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
249 |
lemma connected_valid_path_image: "valid_path g \<Longrightarrow> connected(path_image g)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
250 |
by (metis connected_path_image valid_path_imp_path) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
251 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
252 |
lemma compact_valid_path_image: "valid_path g \<Longrightarrow> compact(path_image g)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
253 |
by (metis compact_path_image valid_path_imp_path) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
254 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
255 |
lemma bounded_valid_path_image: "valid_path g \<Longrightarrow> bounded(path_image g)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
256 |
by (metis bounded_path_image valid_path_imp_path) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
257 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
258 |
lemma closed_valid_path_image: "valid_path g \<Longrightarrow> closed(path_image g)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
259 |
by (metis closed_path_image valid_path_imp_path) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
260 |
|
77140
9a60c1759543
Lots more new material thanks to Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
71193
diff
changeset
|
261 |
lemma valid_path_translation_eq: "valid_path ((+)d \<circ> p) \<longleftrightarrow> valid_path p" |
9a60c1759543
Lots more new material thanks to Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
71193
diff
changeset
|
262 |
by (simp add: valid_path_def piecewise_C1_differentiable_on_translation_eq) |
9a60c1759543
Lots more new material thanks to Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
71193
diff
changeset
|
263 |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
264 |
lemma valid_path_compose: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
265 |
assumes "valid_path g" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
266 |
and der: "\<And>x. x \<in> path_image g \<Longrightarrow> f field_differentiable (at x)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
267 |
and con: "continuous_on (path_image g) (deriv f)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
268 |
shows "valid_path (f \<circ> g)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
269 |
proof - |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
270 |
obtain S where "finite S" and g_diff: "g C1_differentiable_on {0..1} - S" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
271 |
using \<open>valid_path g\<close> unfolding valid_path_def piecewise_C1_differentiable_on_def by auto |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
272 |
have "f \<circ> g differentiable at t" when "t\<in>{0..1} - S" for t |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
273 |
proof (rule differentiable_chain_at) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
274 |
show "g differentiable at t" using \<open>valid_path g\<close> |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
275 |
by (meson C1_differentiable_on_eq \<open>g C1_differentiable_on {0..1} - S\<close> that) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
276 |
next |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
277 |
have "g t\<in>path_image g" using that DiffD1 image_eqI path_image_def by metis |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
278 |
then show "f differentiable at (g t)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
279 |
using der[THEN field_differentiable_imp_differentiable] by auto |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
280 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
281 |
moreover have "continuous_on ({0..1} - S) (\<lambda>x. vector_derivative (f \<circ> g) (at x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
282 |
proof (rule continuous_on_eq [where f = "\<lambda>x. vector_derivative g (at x) * deriv f (g x)"], |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
283 |
rule continuous_intros) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
284 |
show "continuous_on ({0..1} - S) (\<lambda>x. vector_derivative g (at x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
285 |
using g_diff C1_differentiable_on_eq by auto |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
286 |
next |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
287 |
have "continuous_on {0..1} (\<lambda>x. deriv f (g x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
288 |
using continuous_on_compose[OF _ con[unfolded path_image_def],unfolded comp_def] |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
289 |
\<open>valid_path g\<close> piecewise_C1_differentiable_on_def valid_path_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
290 |
by blast |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
291 |
then show "continuous_on ({0..1} - S) (\<lambda>x. deriv f (g x))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
292 |
using continuous_on_subset by blast |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
293 |
next |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
294 |
show "vector_derivative g (at t) * deriv f (g t) = vector_derivative (f \<circ> g) (at t)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
295 |
when "t \<in> {0..1} - S" for t |
78475 | 296 |
by (metis C1_differentiable_on_eq DiffD1 der g_diff imageI path_image_def that |
297 |
vector_derivative_chain_at_general) |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
298 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
299 |
ultimately have "f \<circ> g C1_differentiable_on {0..1} - S" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
300 |
using C1_differentiable_on_eq by blast |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
301 |
moreover have "path (f \<circ> g)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
302 |
using der |
77140
9a60c1759543
Lots more new material thanks to Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
71193
diff
changeset
|
303 |
by (simp add: path_continuous_image[OF valid_path_imp_path[OF \<open>valid_path g\<close>]] continuous_at_imp_continuous_on field_differentiable_imp_continuous_at) |
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
304 |
ultimately show ?thesis unfolding valid_path_def piecewise_C1_differentiable_on_def path_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
305 |
using \<open>finite S\<close> by auto |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
306 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
307 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
308 |
lemma valid_path_uminus_comp[simp]: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
309 |
fixes g::"real \<Rightarrow> 'a ::real_normed_field" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
310 |
shows "valid_path (uminus \<circ> g) \<longleftrightarrow> valid_path g" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
311 |
proof |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
312 |
show "valid_path g \<Longrightarrow> valid_path (uminus \<circ> g)" for g::"real \<Rightarrow> 'a" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
313 |
by (auto intro!: valid_path_compose derivative_intros) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
314 |
then show "valid_path g" when "valid_path (uminus \<circ> g)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
315 |
by (metis fun.map_comp group_add_class.minus_comp_minus id_comp that) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
316 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
317 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
318 |
lemma valid_path_offset[simp]: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
319 |
shows "valid_path (\<lambda>t. g t - z) \<longleftrightarrow> valid_path g" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
320 |
proof |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
321 |
show *: "valid_path (g::real\<Rightarrow>'a) \<Longrightarrow> valid_path (\<lambda>t. g t - z)" for g z |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
322 |
unfolding valid_path_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
323 |
by (fastforce intro:derivative_intros C1_differentiable_imp_piecewise piecewise_C1_differentiable_diff) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
324 |
show "valid_path (\<lambda>t. g t - z) \<Longrightarrow> valid_path g" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
325 |
using *[of "\<lambda>t. g t - z" "-z",simplified] . |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
326 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
327 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
328 |
lemma valid_path_imp_reverse: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
329 |
assumes "valid_path g" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
330 |
shows "valid_path(reversepath g)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
331 |
proof - |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
332 |
obtain S where "finite S" and S: "g C1_differentiable_on ({0..1} - S)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
333 |
using assms by (auto simp: valid_path_def piecewise_C1_differentiable_on_def) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
334 |
then have "finite ((-) 1 ` S)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
335 |
by auto |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
336 |
moreover have "(reversepath g C1_differentiable_on ({0..1} - (-) 1 ` S))" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
337 |
unfolding reversepath_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
338 |
apply (rule C1_differentiable_compose [of "\<lambda>x::real. 1-x" _ g, unfolded o_def]) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
339 |
using S |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
340 |
by (force simp: finite_vimageI inj_on_def C1_differentiable_on_eq elim!: continuous_on_subset)+ |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
341 |
ultimately show ?thesis using assms |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
342 |
by (auto simp: valid_path_def piecewise_C1_differentiable_on_def path_def [symmetric]) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
343 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
344 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
345 |
lemma valid_path_reversepath [simp]: "valid_path(reversepath g) \<longleftrightarrow> valid_path g" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
346 |
using valid_path_imp_reverse by force |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
347 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
348 |
lemma valid_path_join: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
349 |
assumes "valid_path g1" "valid_path g2" "pathfinish g1 = pathstart g2" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
350 |
shows "valid_path(g1 +++ g2)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
351 |
proof - |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
352 |
have "g1 1 = g2 0" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
353 |
using assms by (auto simp: pathfinish_def pathstart_def) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
354 |
moreover have "(g1 \<circ> (\<lambda>x. 2*x)) piecewise_C1_differentiable_on {0..1/2}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
355 |
apply (rule piecewise_C1_differentiable_compose) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
356 |
using assms |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
357 |
apply (auto simp: valid_path_def piecewise_C1_differentiable_on_def continuous_on_joinpaths) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
358 |
apply (force intro: finite_vimageI [where h = "(*)2"] inj_onI) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
359 |
done |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
360 |
moreover have "(g2 \<circ> (\<lambda>x. 2*x-1)) piecewise_C1_differentiable_on {1/2..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
361 |
apply (rule piecewise_C1_differentiable_compose) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
362 |
using assms unfolding valid_path_def piecewise_C1_differentiable_on_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
363 |
by (auto intro!: continuous_intros finite_vimageI [where h = "(\<lambda>x. 2*x - 1)"] inj_onI |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
364 |
simp: image_affinity_atLeastAtMost_diff continuous_on_joinpaths) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
365 |
ultimately show ?thesis |
78475 | 366 |
unfolding valid_path_def continuous_on_joinpaths joinpaths_def |
367 |
by (intro piecewise_C1_differentiable_cases) (auto simp: o_def) |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
368 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
369 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
370 |
lemma valid_path_join_D1: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
371 |
fixes g1 :: "real \<Rightarrow> 'a::real_normed_field" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
372 |
shows "valid_path (g1 +++ g2) \<Longrightarrow> valid_path g1" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
373 |
unfolding valid_path_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
374 |
by (rule piecewise_C1_differentiable_D1) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
375 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
376 |
lemma valid_path_join_D2: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
377 |
fixes g2 :: "real \<Rightarrow> 'a::real_normed_field" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
378 |
shows "\<lbrakk>valid_path (g1 +++ g2); pathfinish g1 = pathstart g2\<rbrakk> \<Longrightarrow> valid_path g2" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
379 |
unfolding valid_path_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
380 |
by (rule piecewise_C1_differentiable_D2) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
381 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
382 |
lemma valid_path_join_eq [simp]: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
383 |
fixes g2 :: "real \<Rightarrow> 'a::real_normed_field" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
384 |
shows "pathfinish g1 = pathstart g2 \<Longrightarrow> (valid_path(g1 +++ g2) \<longleftrightarrow> valid_path g1 \<and> valid_path g2)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
385 |
using valid_path_join_D1 valid_path_join_D2 valid_path_join by blast |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
386 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
387 |
lemma valid_path_shiftpath [intro]: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
388 |
assumes "valid_path g" "pathfinish g = pathstart g" "a \<in> {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
389 |
shows "valid_path(shiftpath a g)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
390 |
using assms |
78475 | 391 |
unfolding valid_path_def shiftpath_alt_def |
392 |
apply (intro piecewise_C1_differentiable_cases) |
|
393 |
apply (simp_all add: add.commute) |
|
394 |
apply (rule piecewise_C1_differentiable_affine [of g 1 a, simplified o_def scaleR_one]) |
|
395 |
apply (force simp: pathfinish_def pathstart_def elim: piecewise_C1_differentiable_on_subset) |
|
396 |
apply (rule piecewise_C1_differentiable_affine [of g 1 "a-1", simplified o_def scaleR_one algebra_simps]) |
|
397 |
apply (auto simp: pathfinish_def pathstart_def elim: piecewise_C1_differentiable_on_subset) |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
398 |
done |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
399 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
400 |
lemma vector_derivative_linepath_within: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
401 |
"x \<in> {0..1} \<Longrightarrow> vector_derivative (linepath a b) (at x within {0..1}) = b - a" |
78475 | 402 |
by (simp add: has_vector_derivative_linepath_within vector_derivative_at_within_ivl) |
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
403 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
404 |
lemma vector_derivative_linepath_at [simp]: "vector_derivative (linepath a b) (at x) = b - a" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
405 |
by (simp add: has_vector_derivative_linepath_within vector_derivative_at) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
406 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
407 |
lemma valid_path_linepath [iff]: "valid_path (linepath a b)" |
78475 | 408 |
using C1_differentiable_on_eq piecewise_C1_differentiable_on_def valid_path_def by fastforce |
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
409 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
410 |
lemma valid_path_subpath: |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
411 |
fixes g :: "real \<Rightarrow> 'a :: real_normed_vector" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
412 |
assumes "valid_path g" "u \<in> {0..1}" "v \<in> {0..1}" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
413 |
shows "valid_path(subpath u v g)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
414 |
proof (cases "v=u") |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
415 |
case True |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
416 |
then show ?thesis |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
417 |
unfolding valid_path_def subpath_def |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
418 |
by (force intro: C1_differentiable_on_const C1_differentiable_imp_piecewise) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
419 |
next |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
420 |
case False |
78475 | 421 |
let ?f = "\<lambda>x. ((v-u) * x + u)" |
422 |
have "(g \<circ> ?f) piecewise_C1_differentiable_on {0..1}" |
|
423 |
proof (rule piecewise_C1_differentiable_compose) |
|
424 |
show "?f piecewise_C1_differentiable_on {0..1}" |
|
425 |
by (simp add: C1_differentiable_imp_piecewise) |
|
426 |
have "g piecewise_C1_differentiable_on (if u \<le> v then {u..v} else {v..u})" |
|
427 |
using assms piecewise_C1_differentiable_on_subset valid_path_def by force |
|
428 |
then show "g piecewise_C1_differentiable_on ?f ` {0..1}" |
|
429 |
by (simp add: image_affinity_atLeastAtMost split: if_split_asm) |
|
430 |
show "\<And>x. finite ({0..1} \<inter> ?f -` {x})" |
|
431 |
using False |
|
432 |
by (simp add: Int_commute [of "{0..1}"] inj_on_def crossproduct_eq finite_vimage_IntI) |
|
433 |
qed |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
434 |
then show ?thesis |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
435 |
by (auto simp: o_def valid_path_def subpath_def) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
436 |
qed |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
437 |
|
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
438 |
lemma valid_path_rectpath [simp, intro]: "valid_path (rectpath a b)" |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
439 |
by (simp add: Let_def rectpath_def) |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
440 |
|
80052
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
441 |
lemma linear_image_valid_path: |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
442 |
fixes p :: "real \<Rightarrow> 'a :: euclidean_space" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
443 |
assumes "valid_path p" "linear f" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
444 |
shows "valid_path (f \<circ> p)" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
445 |
unfolding valid_path_def piecewise_C1_differentiable_on_def |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
446 |
proof (intro conjI) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
447 |
from assms have "path p" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
448 |
by (simp add: valid_path_imp_path) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
449 |
thus "continuous_on {0..1} (f \<circ> p)" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
450 |
unfolding o_def path_def by (intro linear_continuous_on_compose[OF _ assms(2)]) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
451 |
from assms(1) obtain S where S: "finite S" "p C1_differentiable_on {0..1} - S" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
452 |
by (auto simp: valid_path_def piecewise_C1_differentiable_on_def) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
453 |
from S(2) obtain p' :: "real \<Rightarrow> 'a" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
454 |
where p': "\<And>x. x \<in> {0..1} - S \<Longrightarrow> (p has_vector_derivative p' x) (at x)" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
455 |
"continuous_on ({0..1} - S) p'" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
456 |
by (fastforce simp: C1_differentiable_on_def) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
457 |
|
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
458 |
have "(f \<circ> p has_vector_derivative f (p' x)) (at x)" if "x \<in> {0..1} - S" for x |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
459 |
by (rule vector_derivative_diff_chain_within [OF p'(1)[OF that]] |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
460 |
linear_imp_has_derivative assms)+ |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
461 |
moreover have "continuous_on ({0..1} - S) (\<lambda>x. f (p' x))" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
462 |
by (rule linear_continuous_on_compose [OF p'(2) assms(2)]) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
463 |
ultimately have "f \<circ> p C1_differentiable_on {0..1} - S" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
464 |
unfolding C1_differentiable_on_def by (intro exI[of _ "\<lambda>x. f (p' x)"]) fast |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
465 |
thus "\<exists>S. finite S \<and> f \<circ> p C1_differentiable_on {0..1} - S" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
466 |
using \<open>finite S\<close> by blast |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
467 |
qed |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
468 |
|
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
469 |
lemma valid_path_times: |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
470 |
fixes \<gamma>::"real \<Rightarrow> 'a ::real_normed_field" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
471 |
assumes "c\<noteq>0" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
472 |
shows "valid_path ((*) c \<circ> \<gamma>) = valid_path \<gamma>" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
473 |
proof |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
474 |
assume "valid_path ((*) c \<circ> \<gamma>)" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
475 |
then have "valid_path ((*) (1/c) \<circ> ((*) c \<circ> \<gamma>))" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
476 |
by (simp add: valid_path_compose) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
477 |
then show "valid_path \<gamma>" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
478 |
unfolding comp_def using \<open>c\<noteq>0\<close> by auto |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
479 |
next |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
480 |
assume "valid_path \<gamma>" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
481 |
then show "valid_path ((*) c \<circ> \<gamma>)" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
482 |
by (simp add: valid_path_compose) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
483 |
qed |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
484 |
|
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
485 |
lemma path_compose_cnj_iff [simp]: "path (cnj \<circ> p) \<longleftrightarrow> path p" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
486 |
proof - |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
487 |
have "path (cnj \<circ> p)" if "path p" for p |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
488 |
by (intro path_continuous_image continuous_intros that) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
489 |
from this[of p] and this[of "cnj \<circ> p"] show ?thesis |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
490 |
by (auto simp: o_def) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
491 |
qed |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
492 |
|
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
493 |
lemma valid_path_cnj: |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
494 |
fixes g::"real \<Rightarrow> complex" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
495 |
shows "valid_path (cnj \<circ> g) = valid_path g" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
496 |
proof |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
497 |
show valid:"valid_path (cnj \<circ> g)" if "valid_path g" for g |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
498 |
proof - |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
499 |
obtain S where "finite S" and g_diff: "g C1_differentiable_on {0..1} - S" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
500 |
using \<open>valid_path g\<close> unfolding valid_path_def piecewise_C1_differentiable_on_def by auto |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
501 |
|
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
502 |
have g_diff':"g differentiable at t" when "t\<in>{0..1} - S" for t |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
503 |
by (meson C1_differentiable_on_eq \<open>g C1_differentiable_on {0..1} - S\<close> that) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
504 |
then have "(cnj \<circ> g) differentiable at t" when "t\<in>{0..1} - S" for t |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
505 |
using bounded_linear_cnj bounded_linear_imp_differentiable differentiable_chain_at that by blast |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
506 |
moreover have "continuous_on ({0..1} - S) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
507 |
(\<lambda>x. vector_derivative (cnj \<circ> g) (at x))" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
508 |
proof - |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
509 |
have "continuous_on ({0..1} - S) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
510 |
(\<lambda>x. vector_derivative (cnj \<circ> g) (at x)) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
511 |
= continuous_on ({0..1} - S) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
512 |
(\<lambda>x. cnj (vector_derivative g (at x)))" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
513 |
apply (rule continuous_on_cong[OF refl]) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
514 |
unfolding comp_def using g_diff' |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
515 |
using has_vector_derivative_cnj vector_derivative_at vector_derivative_works by blast |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
516 |
also have "\<dots>" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
517 |
apply (intro continuous_intros) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
518 |
using C1_differentiable_on_eq g_diff by blast |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
519 |
finally show ?thesis . |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
520 |
qed |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
521 |
ultimately have "cnj \<circ> g C1_differentiable_on {0..1} - S" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
522 |
using C1_differentiable_on_eq by blast |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
523 |
moreover have "path (cnj \<circ> g)" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
524 |
apply (rule path_continuous_image[OF valid_path_imp_path[OF \<open>valid_path g\<close>]]) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
525 |
by (intro continuous_intros) |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
526 |
ultimately show ?thesis unfolding valid_path_def piecewise_C1_differentiable_on_def path_def |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
527 |
using \<open>finite S\<close> by auto |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
528 |
qed |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
529 |
from this[of "cnj o g"] |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
530 |
show "valid_path (cnj \<circ> g) \<Longrightarrow> valid_path g" |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
531 |
unfolding comp_def by simp |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
532 |
qed |
35b2143aeec6
An assortment of new material, mostly due to Manuel
paulson <lp15@cam.ac.uk>
parents:
78475
diff
changeset
|
533 |
|
71193
777d673fa672
Removed duplicate theorems from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
71189
diff
changeset
|
534 |
end |