src/HOL/Multivariate_Analysis/Convex_Euclidean_Space.thy
changeset 51524 7cb5ac44ca9e
parent 51480 3793c3a11378
child 53015 a1119cf551e8
equal deleted inserted replaced
51523:97b5e8a1291c 51524:7cb5ac44ca9e
   466       qed
   466       qed
   467       then have "u x + (1 - u x) = 1 \<Longrightarrow>
   467       then have "u x + (1 - u x) = 1 \<Longrightarrow>
   468           u x *\<^sub>R x + (1 - u x) *\<^sub>R ((\<Sum>xa\<in>s - {x}. u xa *\<^sub>R xa) /\<^sub>R (1 - u x)) \<in> V"
   468           u x *\<^sub>R x + (1 - u x) *\<^sub>R ((\<Sum>xa\<in>s - {x}. u xa *\<^sub>R xa) /\<^sub>R (1 - u x)) \<in> V"
   469         apply -
   469         apply -
   470         apply (rule as(3)[rule_format])
   470         apply (rule as(3)[rule_format])
   471         unfolding  RealVector.scaleR_right.setsum
   471         unfolding  Real_Vector_Spaces.scaleR_right.setsum
   472         using x(1) as(6) apply auto
   472         using x(1) as(6) apply auto
   473         done
   473         done
   474       then show "(\<Sum>x\<in>s. u x *\<^sub>R x) \<in> V"
   474       then show "(\<Sum>x\<in>s. u x *\<^sub>R x) \<in> V"
   475         unfolding scaleR_scaleR[symmetric] and scaleR_right.setsum [symmetric]
   475         unfolding scaleR_scaleR[symmetric] and scaleR_right.setsum [symmetric]
   476         apply (subst *)
   476         apply (subst *)
   528     show "\<exists>s ua. finite s \<and> s \<noteq> {} \<and> s \<subseteq> p \<and>
   528     show "\<exists>s ua. finite s \<and> s \<noteq> {} \<and> s \<subseteq> p \<and>
   529         setsum ua s = 1 \<and> (\<Sum>v\<in>s. ua v *\<^sub>R v) = u *\<^sub>R x + v *\<^sub>R y"
   529         setsum ua s = 1 \<and> (\<Sum>v\<in>s. ua v *\<^sub>R v) = u *\<^sub>R x + v *\<^sub>R y"
   530       apply (rule_tac x="sx \<union> sy" in exI)
   530       apply (rule_tac x="sx \<union> sy" in exI)
   531       apply (rule_tac x="\<lambda>a. (if a\<in>sx then u * ux a else 0) + (if a\<in>sy then v * uy a else 0)" in exI)
   531       apply (rule_tac x="\<lambda>a. (if a\<in>sx then u * ux a else 0) + (if a\<in>sy then v * uy a else 0)" in exI)
   532       unfolding scaleR_left_distrib setsum_addf if_smult scaleR_zero_left ** setsum_restrict_set[OF xy, symmetric]
   532       unfolding scaleR_left_distrib setsum_addf if_smult scaleR_zero_left ** setsum_restrict_set[OF xy, symmetric]
   533       unfolding scaleR_scaleR[symmetric] RealVector.scaleR_right.setsum [symmetric] and setsum_right_distrib[symmetric]
   533       unfolding scaleR_scaleR[symmetric] Real_Vector_Spaces.scaleR_right.setsum [symmetric] and setsum_right_distrib[symmetric]
   534       unfolding x y
   534       unfolding x y
   535       using x(1-3) y(1-3) uv apply simp
   535       using x(1-3) y(1-3) uv apply simp
   536       done
   536       done
   537   qed
   537   qed
   538 qed
   538 qed
  2846   have "z : f ` S" using z_def rel_interior_subset[of "f ` S"] by auto
  2846   have "z : f ` S" using z_def rel_interior_subset[of "f ` S"] by auto
  2847   from this obtain x where x_def: "x : S & (f x = z)" by auto
  2847   from this obtain x where x_def: "x : S & (f x = z)" by auto
  2848   obtain e2 where e2_def: "e2>0 & cball z e2 Int affine hull (f ` S) <= (f ` S)"
  2848   obtain e2 where e2_def: "e2>0 & cball z e2 Int affine hull (f ` S) <= (f ` S)"
  2849     using z_def rel_interior_cball[of "f ` S"] by auto
  2849     using z_def rel_interior_cball[of "f ` S"] by auto
  2850   obtain K where K_def: "K>0 & (! x. norm (f x) <= norm x * K)"
  2850   obtain K where K_def: "K>0 & (! x. norm (f x) <= norm x * K)"
  2851    using assms RealVector.bounded_linear.pos_bounded[of f] by auto
  2851    using assms Real_Vector_Spaces.bounded_linear.pos_bounded[of f] by auto
  2852   def e1 == "1/K" hence e1_def: "e1>0 & (! x. e1 * norm (f x) <= norm x)"
  2852   def e1 == "1/K" hence e1_def: "e1>0 & (! x. e1 * norm (f x) <= norm x)"
  2853    using K_def pos_le_divide_eq[of e1] by auto
  2853    using K_def pos_le_divide_eq[of e1] by auto
  2854   def e == "e1 * e2" hence "e>0" using e1_def e2_def mult_pos_pos by auto
  2854   def e == "e1 * e2" hence "e>0" using e1_def e2_def mult_pos_pos by auto
  2855   { fix y assume y_def: "y : cball x e Int affine hull S"
  2855   { fix y assume y_def: "y : cball x e Int affine hull S"
  2856     from this have h1: "f y : affine hull (f ` S)"
  2856     from this have h1: "f y : affine hull (f ` S)"