5913 defer |
5913 defer |
5914 apply (erule bexE) |
5914 apply (erule bexE) |
5915 proof - |
5915 proof - |
5916 fix y |
5916 fix y |
5917 assume as: "y\<in>cbox (x - ?d) (x + ?d)" |
5917 assume as: "y\<in>cbox (x - ?d) (x + ?d)" |
5918 { |
|
5919 fix i :: 'a |
|
5920 assume i: "i \<in> Basis" |
|
5921 have "x \<bullet> i \<le> d + y \<bullet> i" "y \<bullet> i \<le> d + x \<bullet> i" |
|
5922 using as[unfolded mem_box, THEN bspec[where x=i]] i |
|
5923 by (auto simp: inner_simps) |
|
5924 then have "1 \<ge> inverse d * (x \<bullet> i - y \<bullet> i)" "1 \<ge> inverse d * (y \<bullet> i - x \<bullet> i)" |
|
5925 apply (rule_tac[!] mult_left_le_imp_le[OF _ assms]) |
|
5926 unfolding mult.assoc[symmetric] |
|
5927 using assms |
|
5928 by (auto simp add: field_simps) |
|
5929 then have "inverse d * (x \<bullet> i * 2) \<le> 2 + inverse d * (y \<bullet> i * 2)" |
|
5930 "inverse d * (y \<bullet> i * 2) \<le> 2 + inverse d * (x \<bullet> i * 2)" |
|
5931 using `0<d` by (auto simp add: field_simps) } |
|
5932 then have "inverse (2 * d) *\<^sub>R (y - (x - ?d)) \<in> cbox 0 (\<Sum>Basis)" |
5918 then have "inverse (2 * d) *\<^sub>R (y - (x - ?d)) \<in> cbox 0 (\<Sum>Basis)" |
5933 unfolding mem_box using assms |
5919 using assms by (simp add: mem_box field_simps inner_simps) |
5934 by (auto simp add: field_simps inner_simps simp del: inverse_eq_divide) |
5920 with `0 < d` show "\<exists>z\<in>cbox 0 (\<Sum>Basis). y = x - ?d + (2 * d) *\<^sub>R z" |
5935 then show "\<exists>z\<in>cbox 0 (\<Sum>Basis). y = x - ?d + (2 * d) *\<^sub>R z" |
5921 by (intro bexI[of _ "inverse (2 * d) *\<^sub>R (y - (x - ?d))"]) auto |
5936 apply - |
|
5937 apply (rule_tac x="inverse (2 * d) *\<^sub>R (y - (x - ?d))" in bexI) |
|
5938 using assms |
|
5939 apply auto |
|
5940 done |
|
5941 next |
5922 next |
5942 fix y z |
5923 fix y z |
5943 assume as: "z\<in>cbox 0 (\<Sum>Basis)" "y = x - ?d + (2*d) *\<^sub>R z" |
5924 assume as: "z\<in>cbox 0 (\<Sum>Basis)" "y = x - ?d + (2*d) *\<^sub>R z" |
5944 have "\<And>i. i\<in>Basis \<Longrightarrow> 0 \<le> d * (z \<bullet> i) \<and> d * (z \<bullet> i) \<le> d" |
5925 have "\<And>i. i\<in>Basis \<Longrightarrow> 0 \<le> d * (z \<bullet> i) \<and> d * (z \<bullet> i) \<le> d" |
5945 using assms as(1)[unfolded mem_box] |
5926 using assms as(1)[unfolded mem_box] |
6074 have "f x \<le> 1 / (1 + t) * f w + (t / (1 + t)) * f y" |
6055 have "f x \<le> 1 / (1 + t) * f w + (t / (1 + t)) * f y" |
6075 using assms(2)[unfolded convex_on_def,rule_format,of w y "1/(1+t)" "t / (1+t)",unfolded w] |
6056 using assms(2)[unfolded convex_on_def,rule_format,of w y "1/(1+t)" "t / (1+t)",unfolded w] |
6076 using `0 < t` `2 < t` and `y \<in> s` `w \<in> s` |
6057 using `0 < t` `2 < t` and `y \<in> s` `w \<in> s` |
6077 by (auto simp add:field_simps) |
6058 by (auto simp add:field_simps) |
6078 also have "\<dots> = (f w + t * f y) / (1 + t)" |
6059 also have "\<dots> = (f w + t * f y) / (1 + t)" |
6079 using `t > 0` unfolding divide_inverse by (auto simp add: field_simps) |
6060 using `t > 0` by (auto simp add: divide_simps) |
6080 also have "\<dots> < e + f y" |
6061 also have "\<dots> < e + f y" |
6081 using `t > 0` * `e > 0` by (auto simp add: field_simps) |
6062 using `t > 0` * `e > 0` by (auto simp add: field_simps) |
6082 finally have "f x - f y < e" by auto |
6063 finally have "f x - f y < e" by auto |
6083 } |
6064 } |
6084 ultimately show ?thesis by auto |
6065 ultimately show ?thesis by auto |