435 apply (auto simp: path_def reversepath_def) |
435 apply (auto simp: path_def reversepath_def) |
436 using continuous_on_compose [of "{0..1}" "\<lambda>x. 1 - x" g] |
436 using continuous_on_compose [of "{0..1}" "\<lambda>x. 1 - x" g] |
437 apply (auto simp: continuous_on_op_minus) |
437 apply (auto simp: continuous_on_op_minus) |
438 done |
438 done |
439 |
439 |
440 lemma forall_01_trivial: "(\<forall>x\<in>{0..1}. x \<le> 0 \<longrightarrow> P x) \<longleftrightarrow> P (0::real)" |
440 lemma half_bounded_equal: "1 \<le> x * 2 \<Longrightarrow> x * 2 \<le> 1 \<longleftrightarrow> x = (1/2::real)" |
441 by auto |
441 by simp |
442 |
|
443 lemma forall_half1_trivial: "(\<forall>x\<in>{1/2..1}. x * 2 \<le> 1 \<longrightarrow> P x) \<longleftrightarrow> P (1/2::real)" |
|
444 by auto (metis add_divide_distrib mult_2_right real_sum_of_halves) |
|
445 |
442 |
446 lemma continuous_on_joinpaths: |
443 lemma continuous_on_joinpaths: |
447 assumes "continuous_on {0..1} g1" "continuous_on {0..1} g2" "pathfinish g1 = pathstart g2" |
444 assumes "continuous_on {0..1} g1" "continuous_on {0..1} g2" "pathfinish g1 = pathstart g2" |
448 shows "continuous_on {0..1} (g1 +++ g2)" |
445 shows "continuous_on {0..1} (g1 +++ g2)" |
449 proof - |
446 proof - |
450 have *: "{0..1::real} = {0..1/2} \<union> {1/2..1}" |
447 have *: "{0..1::real} = {0..1/2} \<union> {1/2..1}" |
451 by auto |
448 by auto |
452 have gg: "g2 0 = g1 1" |
449 have gg: "g2 0 = g1 1" |
453 by (metis assms(3) pathfinish_def pathstart_def) |
450 by (metis assms(3) pathfinish_def pathstart_def) |
454 have 1: "continuous_on {0..1 / 2} (g1 +++ g2)" |
451 have 1: "continuous_on {0..1/2} (g1 +++ g2)" |
455 apply (rule continuous_on_eq [of _ "g1 o (\<lambda>x. 2*x)"]) |
452 apply (rule continuous_on_eq [of _ "g1 o (\<lambda>x. 2*x)"]) |
456 apply (simp add: joinpaths_def) |
453 apply (rule continuous_intros | simp add: joinpaths_def assms)+ |
457 apply (rule continuous_intros | simp add: assms)+ |
454 done |
458 done |
455 have "continuous_on {1/2..1} (g2 o (\<lambda>x. 2*x-1))" |
459 have 2: "continuous_on {1 / 2..1} (g1 +++ g2)" |
456 apply (rule continuous_on_subset [of "{1/2..1}"]) |
460 apply (rule continuous_on_eq [of _ "g2 o (\<lambda>x. 2*x-1)"]) |
457 apply (rule continuous_intros | simp add: image_affinity_atLeastAtMost_diff assms)+ |
461 apply (simp add: joinpaths_def) |
458 done |
462 apply (rule continuous_intros | simp add: forall_half1_trivial gg)+ |
459 then have 2: "continuous_on {1/2..1} (g1 +++ g2)" |
463 apply (rule continuous_on_subset) |
460 apply (rule continuous_on_eq [of "{1/2..1}" "g2 o (\<lambda>x. 2*x-1)"]) |
464 apply (rule assms, auto) |
461 apply (rule assms continuous_intros | simp add: joinpaths_def mult.commute half_bounded_equal gg)+ |
465 done |
462 done |
466 show ?thesis |
463 show ?thesis |
467 apply (subst *) |
464 apply (subst *) |
468 apply (rule continuous_on_union) |
465 apply (rule continuous_on_union) |
469 using 1 2 |
466 using 1 2 |
798 apply (rule continuous_on_union) |
795 apply (rule continuous_on_union) |
799 apply (rule closed_real_atLeastAtMost)+ |
796 apply (rule closed_real_atLeastAtMost)+ |
800 apply (rule continuous_on_eq[of _ "g \<circ> (\<lambda>x. a + x)"]) |
797 apply (rule continuous_on_eq[of _ "g \<circ> (\<lambda>x. a + x)"]) |
801 prefer 3 |
798 prefer 3 |
802 apply (rule continuous_on_eq[of _ "g \<circ> (\<lambda>x. a - 1 + x)"]) |
799 apply (rule continuous_on_eq[of _ "g \<circ> (\<lambda>x. a - 1 + x)"]) |
803 defer |
|
804 prefer 3 |
800 prefer 3 |
805 apply (rule continuous_intros)+ |
801 apply (rule continuous_intros)+ |
806 prefer 2 |
802 prefer 2 |
807 apply (rule continuous_intros)+ |
803 apply (rule continuous_intros)+ |
808 apply (rule_tac[1-2] continuous_on_subset[OF assms(1)[unfolded path_def]]) |
804 apply (rule_tac[1-2] continuous_on_subset[OF assms(1)[unfolded path_def]]) |