src/HOL/Multivariate_Analysis/Path_Connected.thy
changeset 61204 3e491e34a62e
parent 60974 6a6f15d8fbc4
child 61426 d53db136e8fd
equal deleted inserted replaced
61203:a8a8eca85801 61204:3e491e34a62e
   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]])