| author | paulson <lp15@cam.ac.uk> | 
| Mon, 15 Aug 2022 21:57:55 +0100 | |
| changeset 75866 | 9eeed5c424f9 | 
| parent 71193 | 777d673fa672 | 
| child 77140 | 9a60c1759543 | 
| 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  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
6  | 
imports  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
7  | 
Retracts  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
8  | 
begin  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
9  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
10  | 
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
 | 
11  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
12  | 
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
 | 
13  | 
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
 | 
14  | 
  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
 | 
15  | 
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
 | 
16  | 
proof -  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
17  | 
  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
 | 
18  | 
by (simp add: assms homeomorphic_arc_image_interval)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
19  | 
then  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
20  | 
show ?thesis  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
21  | 
apply (rule path_connected_complement_homeomorphic_convex_compact)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
22  | 
apply (auto simp: assms)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
23  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
24  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
25  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
26  | 
lemma connected_arc_complement:  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
27  | 
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
 | 
28  | 
  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
 | 
29  | 
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
 | 
30  | 
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
 | 
31  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
32  | 
lemma inside_arc_empty:  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
33  | 
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
 | 
34  | 
assumes "arc \<gamma>"  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
35  | 
    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
 | 
36  | 
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
 | 
37  | 
case True  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
38  | 
then show ?thesis  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
39  | 
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
 | 
40  | 
next  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
41  | 
case False  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
42  | 
show ?thesis  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
43  | 
proof (rule inside_bounded_complement_connected_empty)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
44  | 
show "connected (- path_image \<gamma>)"  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
45  | 
apply (rule connected_arc_complement [OF assms])  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
46  | 
using False  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
47  | 
by (metis DIM_ge_Suc0 One_nat_def Suc_1 not_less_eq_eq order_class.order.antisym)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
48  | 
show "bounded (path_image \<gamma>)"  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
49  | 
by (simp add: assms bounded_arc_image)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
50  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
51  | 
qed  | 
| 
 
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 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
 | 
54  | 
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
 | 
55  | 
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
 | 
56  | 
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
 | 
57  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
58  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
59  | 
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
 | 
60  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
61  | 
lemma continuous_on_joinpaths_D1:  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
62  | 
    "continuous_on {0..1} (g1 +++ g2) \<Longrightarrow> 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
 | 
63  | 
apply (rule continuous_on_eq [of _ "(g1 +++ g2) \<circ> ((*)(inverse 2))"])  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
64  | 
apply (rule continuous_intros | simp)+  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
65  | 
apply (auto elim!: continuous_on_subset simp: joinpaths_def)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
66  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
67  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
68  | 
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
 | 
69  | 
    "\<lbrakk>continuous_on {0..1} (g1 +++ g2); pathfinish g1 = pathstart g2\<rbrakk> \<Longrightarrow> 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
 | 
70  | 
apply (rule continuous_on_eq [of _ "(g1 +++ g2) \<circ> (\<lambda>x. inverse 2*x + 1/2)"])  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
71  | 
apply (rule continuous_intros | simp)+  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
72  | 
apply (auto elim!: continuous_on_subset simp add: joinpaths_def pathfinish_def pathstart_def Ball_def)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
73  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
74  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
75  | 
lemma piecewise_differentiable_D1:  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
76  | 
  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
 | 
77  | 
  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
 | 
78  | 
proof -  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
79  | 
  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
 | 
80  | 
    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
 | 
81  | 
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
 | 
82  | 
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
 | 
83  | 
show ?thesis  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
84  | 
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
 | 
85  | 
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
 | 
86  | 
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
 | 
87  | 
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
 | 
88  | 
    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
 | 
89  | 
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
 | 
90  | 
      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
 | 
91  | 
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
 | 
92  | 
      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
 | 
93  | 
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
 | 
94  | 
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
 | 
95  | 
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
 | 
96  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
97  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
98  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
99  | 
lemma piecewise_differentiable_D2:  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
100  | 
  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
 | 
101  | 
  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
 | 
102  | 
proof -  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
103  | 
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
 | 
104  | 
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
 | 
105  | 
  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
 | 
106  | 
    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
 | 
107  | 
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
 | 
108  | 
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
 | 
109  | 
show ?thesis  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
110  | 
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
 | 
111  | 
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
 | 
112  | 
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
 | 
113  | 
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
 | 
114  | 
    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
 | 
115  | 
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
 | 
116  | 
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
 | 
117  | 
using that  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
118  | 
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
 | 
119  | 
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
 | 
120  | 
      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
 | 
121  | 
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
 | 
122  | 
      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
 | 
123  | 
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
 | 
124  | 
      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
 | 
125  | 
proof -  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
126  | 
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
 | 
127  | 
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
 | 
128  | 
show ?thesis  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
129  | 
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
 | 
130  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
131  | 
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
 | 
132  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
133  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
134  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
135  | 
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
 | 
136  | 
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
 | 
137  | 
  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
 | 
138  | 
    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
 | 
139  | 
proof -  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
140  | 
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
 | 
141  | 
             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
 | 
142  | 
             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
 | 
143  | 
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
 | 
144  | 
  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
 | 
145  | 
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
 | 
146  | 
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
 | 
147  | 
using that g12D  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
148  | 
apply (simp only: joinpaths_def)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
149  | 
by (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
 | 
150  | 
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
 | 
151  | 
\<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
 | 
152  | 
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
 | 
153  | 
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
 | 
154  | 
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
 | 
155  | 
               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
 | 
156  | 
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
 | 
157  | 
using that  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
158  | 
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
 | 
159  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
160  | 
  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
 | 
161  | 
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
 | 
162  | 
  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
 | 
163  | 
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
 | 
164  | 
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
 | 
165  | 
      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
 | 
166  | 
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
 | 
167  | 
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
 | 
168  | 
using that  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
169  | 
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
 | 
170  | 
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
 | 
171  | 
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
 | 
172  | 
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
 | 
173  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
174  | 
  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
 | 
175  | 
((\<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
 | 
176  | 
apply (rule continuous_intros)+  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
177  | 
using coDhalf  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
178  | 
apply (simp add: scaleR_conv_of_real image_set_diff image_image)  | 
| 
 
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  | 
  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
 | 
181  | 
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
 | 
182  | 
  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
 | 
183  | 
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
 | 
184  | 
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
 | 
185  | 
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
 | 
186  | 
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
 | 
187  | 
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
 | 
188  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
189  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
190  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
191  | 
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
 | 
192  | 
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
 | 
193  | 
  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
 | 
194  | 
    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
 | 
195  | 
proof -  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
196  | 
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
 | 
197  | 
             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
 | 
198  | 
             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
 | 
199  | 
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
 | 
200  | 
  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
 | 
201  | 
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
 | 
202  | 
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
 | 
203  | 
using g12D that  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
204  | 
apply (simp only: joinpaths_def)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
205  | 
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
 | 
206  | 
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
 | 
207  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
208  | 
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
 | 
209  | 
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
 | 
210  | 
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
 | 
211  | 
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
 | 
212  | 
               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
 | 
213  | 
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
 | 
214  | 
  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
 | 
215  | 
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
 | 
216  | 
  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
 | 
217  | 
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
 | 
218  | 
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
 | 
219  | 
(at x)"  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
220  | 
      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
 | 
221  | 
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
 | 
222  | 
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
 | 
223  | 
(at x)"  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
224  | 
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
 | 
225  | 
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
 | 
226  | 
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
 | 
227  | 
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
 | 
228  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
229  | 
  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
 | 
230  | 
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
 | 
231  | 
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
 | 
232  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
233  | 
  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
 | 
234  | 
((\<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
 | 
235  | 
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
 | 
236  | 
  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
 | 
237  | 
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
 | 
238  | 
  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
 | 
239  | 
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
 | 
240  | 
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
 | 
241  | 
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
 | 
242  | 
apply (rule_tac x="insert 0 ((\<lambda>x. 2 * x - 1) ` S)" in exI)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
243  | 
apply (simp add: g2D con_g2)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
244  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
245  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
246  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
247  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
248  | 
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
 | 
249  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
250  | 
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
 | 
251  | 
  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
 | 
252  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
253  | 
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
 | 
254  | 
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
 | 
255  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
256  | 
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
 | 
257  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
258  | 
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
 | 
259  | 
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
 | 
260  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
261  | 
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
 | 
262  | 
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
 | 
263  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
264  | 
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
 | 
265  | 
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
 | 
266  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
267  | 
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
 | 
268  | 
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
 | 
269  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
270  | 
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
 | 
271  | 
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
 | 
272  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
273  | 
lemma valid_path_compose:  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
274  | 
assumes "valid_path g"  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
275  | 
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
 | 
276  | 
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
 | 
277  | 
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
 | 
278  | 
proof -  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
279  | 
  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
 | 
280  | 
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
 | 
281  | 
  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
 | 
282  | 
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
 | 
283  | 
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
 | 
284  | 
        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
 | 
285  | 
next  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
286  | 
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
 | 
287  | 
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
 | 
288  | 
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
 | 
289  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
290  | 
  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
 | 
291  | 
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
 | 
292  | 
rule continuous_intros)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
293  | 
      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
 | 
294  | 
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
 | 
295  | 
next  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
296  | 
      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
 | 
297  | 
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
 | 
298  | 
\<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
 | 
299  | 
by blast  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
300  | 
      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
 | 
301  | 
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
 | 
302  | 
next  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
303  | 
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
 | 
304  | 
          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
 | 
305  | 
proof (rule vector_derivative_chain_at_general[symmetric])  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
306  | 
show "g differentiable at t" by (meson C1_differentiable_on_eq g_diff that)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
307  | 
next  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
308  | 
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
 | 
309  | 
then show "f field_differentiable at (g t)" using der by auto  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
310  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
311  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
312  | 
  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
 | 
313  | 
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
 | 
314  | 
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
 | 
315  | 
apply (rule path_continuous_image[OF valid_path_imp_path[OF \<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
 | 
316  | 
using der  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
317  | 
by (simp add: continuous_at_imp_continuous_on field_differentiable_imp_continuous_at)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
318  | 
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
 | 
319  | 
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
 | 
320  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
321  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
322  | 
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
 | 
323  | 
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
 | 
324  | 
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
 | 
325  | 
proof  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
326  | 
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
 | 
327  | 
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
 | 
328  | 
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
 | 
329  | 
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
 | 
330  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
331  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
332  | 
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
 | 
333  | 
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
 | 
334  | 
proof  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
335  | 
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
 | 
336  | 
unfolding valid_path_def  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
337  | 
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
 | 
338  | 
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
 | 
339  | 
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
 | 
340  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
341  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
342  | 
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
 | 
343  | 
assumes "valid_path g"  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
344  | 
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
 | 
345  | 
proof -  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
346  | 
  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
 | 
347  | 
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
 | 
348  | 
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
 | 
349  | 
by auto  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
350  | 
  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
 | 
351  | 
unfolding reversepath_def  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
352  | 
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
 | 
353  | 
using S  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
354  | 
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
 | 
355  | 
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
 | 
356  | 
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
 | 
357  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
358  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
359  | 
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
 | 
360  | 
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
 | 
361  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
362  | 
lemma valid_path_join:  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
363  | 
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
 | 
364  | 
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
 | 
365  | 
proof -  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
366  | 
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
 | 
367  | 
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
 | 
368  | 
  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
 | 
369  | 
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
 | 
370  | 
using assms  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
371  | 
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
 | 
372  | 
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
 | 
373  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
374  | 
  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
 | 
375  | 
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
 | 
376  | 
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
 | 
377  | 
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
 | 
378  | 
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
 | 
379  | 
ultimately show ?thesis  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
380  | 
apply (simp only: valid_path_def continuous_on_joinpaths joinpaths_def)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
381  | 
apply (rule piecewise_C1_differentiable_cases)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
382  | 
apply (auto simp: o_def)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
383  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
384  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
385  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
386  | 
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
 | 
387  | 
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
 | 
388  | 
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
 | 
389  | 
unfolding valid_path_def  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
390  | 
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
 | 
391  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
392  | 
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
 | 
393  | 
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
 | 
394  | 
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
 | 
395  | 
unfolding valid_path_def  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
396  | 
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
 | 
397  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
398  | 
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
 | 
399  | 
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
 | 
400  | 
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
 | 
401  | 
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
 | 
402  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
403  | 
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
 | 
404  | 
  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
 | 
405  | 
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
 | 
406  | 
using assms  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
407  | 
apply (auto simp: valid_path_def shiftpath_alt_def)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
408  | 
apply (rule piecewise_C1_differentiable_cases)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
409  | 
apply (auto simp: algebra_simps)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
410  | 
apply (rule piecewise_C1_differentiable_affine [of g 1 a, simplified o_def scaleR_one])  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
411  | 
apply (auto simp: pathfinish_def pathstart_def elim: piecewise_C1_differentiable_on_subset)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
412  | 
apply (rule piecewise_C1_differentiable_affine [of g 1 "a-1", simplified o_def scaleR_one algebra_simps])  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
413  | 
apply (auto simp: pathfinish_def pathstart_def elim: piecewise_C1_differentiable_on_subset)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
414  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
415  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
416  | 
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
 | 
417  | 
    "x \<in> {0..1} \<Longrightarrow> vector_derivative (linepath a b) (at x within {0..1}) = b - a"
 | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
418  | 
apply (rule vector_derivative_within_cbox [of 0 "1::real", simplified])  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
419  | 
apply (auto simp: has_vector_derivative_linepath_within)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
420  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
421  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
422  | 
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
 | 
423  | 
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
 | 
424  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
425  | 
lemma valid_path_linepath [iff]: "valid_path (linepath a b)"  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
426  | 
apply (simp add: valid_path_def piecewise_C1_differentiable_on_def C1_differentiable_on_eq continuous_on_linepath)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
427  | 
  apply (rule_tac x="{}" in exI)
 | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
428  | 
apply (simp add: differentiable_on_def differentiable_def)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
429  | 
using has_vector_derivative_def has_vector_derivative_linepath_within  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
430  | 
apply (fastforce simp add: continuous_on_eq_continuous_within)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
431  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
432  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
433  | 
lemma valid_path_subpath:  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
434  | 
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
 | 
435  | 
  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
 | 
436  | 
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
 | 
437  | 
proof (cases "v=u")  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
438  | 
case True  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
439  | 
then show ?thesis  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
440  | 
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
 | 
441  | 
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
 | 
442  | 
next  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
443  | 
case False  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
444  | 
  have "(g \<circ> (\<lambda>x. ((v-u) * x + u))) 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
 | 
445  | 
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
 | 
446  | 
apply (simp add: C1_differentiable_imp_piecewise)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
447  | 
apply (simp add: image_affinity_atLeastAtMost)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
448  | 
using assms False  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
449  | 
apply (auto simp: algebra_simps valid_path_def piecewise_C1_differentiable_on_subset)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
450  | 
apply (subst Int_commute)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
451  | 
apply (auto simp: inj_on_def algebra_simps crossproduct_eq finite_vimage_IntI)  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
452  | 
done  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
453  | 
then show ?thesis  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
454  | 
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
 | 
455  | 
qed  | 
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
456  | 
|
| 
 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents:  
diff
changeset
 | 
457  | 
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
 | 
458  | 
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
 | 
459  | 
|
| 
71193
 
777d673fa672
Removed duplicate theorems from HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
71189 
diff
changeset
 | 
460  | 
end  |