src/HOL/Multivariate_Analysis/Convex_Euclidean_Space.thy
author hoelzl
Thu, 31 Jan 2013 11:31:30 +0100
changeset 51000 c9adb50f74ad
parent 50979 21da2a03b9d2
child 51475 ebf9d4fd00ba
permissions -rw-r--r--
use order topology for extended reals
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41959
b460124855b8 tuned headers;
wenzelm
parents: 41413
diff changeset
     1
(*  Title:      HOL/Multivariate_Analysis/Convex_Euclidean_Space.thy
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
     2
    Author:     Robert Himmelmann, TU Muenchen
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
     3
    Author:     Bogdan Grechuk, University of Edinburgh
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
     4
*)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
     5
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
     6
header {* Convex sets, functions and related things. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
     7
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
     8
theory Convex_Euclidean_Space
44132
0f35a870ecf1 full import paths
huffman
parents: 44125
diff changeset
     9
imports
0f35a870ecf1 full import paths
huffman
parents: 44125
diff changeset
    10
  Topology_Euclidean_Space
0f35a870ecf1 full import paths
huffman
parents: 44125
diff changeset
    11
  "~~/src/HOL/Library/Convex"
0f35a870ecf1 full import paths
huffman
parents: 44125
diff changeset
    12
  "~~/src/HOL/Library/Set_Algebras"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
    13
begin
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
    14
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
    15
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
    16
(* ------------------------------------------------------------------------- *)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
    17
(* To be moved elsewhere                                                     *)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
    18
(* ------------------------------------------------------------------------- *)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
    19
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
    20
lemma linear_scaleR: "linear (\<lambda>x. scaleR c x)"
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
    21
  by (simp add: linear_def scaleR_add_right)
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
    22
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
    23
lemma injective_scaleR: "c \<noteq> 0 \<Longrightarrow> inj (\<lambda>(x::'a::real_vector). scaleR c x)"
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
    24
  by (simp add: inj_on_def)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    25
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    26
lemma linear_add_cmul:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    27
  assumes "linear f"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    28
  shows "f(a *\<^sub>R x + b *\<^sub>R y) = a *\<^sub>R f x +  b *\<^sub>R f y"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    29
  using linear_add[of f] linear_cmul[of f] assms by simp
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    30
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    31
lemma mem_convex_2:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    32
  assumes "convex S" "x : S" "y : S" "u>=0" "v>=0" "u+v=1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    33
  shows "(u *\<^sub>R x + v *\<^sub>R y) : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    34
  using assms convex_def[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    35
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    36
lemma mem_convex_alt:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    37
  assumes "convex S" "x : S" "y : S" "u>=0" "v>=0" "u+v>0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    38
  shows "((u/(u+v)) *\<^sub>R x + (v/(u+v)) *\<^sub>R y) : S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
    39
  apply (subst mem_convex_2)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    40
  using assms apply (auto simp add: algebra_simps zero_le_divide_iff)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    41
  using add_divide_distrib[of u v "u+v"] apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    42
  done
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    43
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
    44
lemma inj_on_image_mem_iff: "inj_on f B ==> (A <= B) ==> (f a : f`A) ==> (a : B) ==> (a : A)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    45
  by (blast dest: inj_onD)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    46
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    47
lemma independent_injective_on_span_image:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
    48
  assumes iS: "independent S"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    49
    and lf: "linear f" and fi: "inj_on f (span S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    50
  shows "independent (f ` S)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    51
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    52
  {
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    53
    fix a
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    54
    assume a: "a : S" "f a : span (f ` S - {f a})"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    55
    have eq: "f ` S - {f a} = f ` (S - {a})"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    56
      using fi a span_inc by (auto simp add: inj_on_def)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    57
    from a have "f a : f ` span (S -{a})"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    58
      unfolding eq span_linear_image[OF lf, of "S - {a}"] by blast
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    59
    moreover have "span (S -{a}) <= span S" using span_mono[of "S-{a}" S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    60
    ultimately have "a : span (S -{a})" using fi a span_inc by (auto simp add: inj_on_def)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    61
    with a(1) iS have False by (simp add: dependent_def)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    62
  }
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    63
  then show ?thesis unfolding dependent_def by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    64
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    65
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    66
lemma dim_image_eq:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    67
  fixes f :: "'n::euclidean_space => 'm::euclidean_space"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
    68
  assumes lf: "linear f" and fi: "inj_on f (span S)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    69
  shows "dim (f ` S) = dim (S:: ('n::euclidean_space) set)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    70
proof -
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
    71
  obtain B where B_def: "B<=S & independent B & S <= span B & card B = dim S"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    72
    using basis_exists[of S] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    73
  then have "span S = span B"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    74
    using span_mono[of B S] span_mono[of S "span B"] span_span[of B] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    75
  then have "independent (f ` B)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    76
    using independent_injective_on_span_image[of B f] B_def assms by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    77
  moreover have "card (f ` B) = card B"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    78
    using assms card_image[of f B] subset_inj_on[of f "span S" B] B_def span_inc by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    79
  moreover have "(f ` B) <= (f ` S)" using B_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    80
  ultimately have "dim (f ` S) >= dim S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    81
    using independent_card_le_dim[of "f ` B" "f ` S"] B_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    82
  then show ?thesis using dim_image_le[of f S] assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    83
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    84
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    85
lemma linear_injective_on_subspace_0:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    86
  assumes lf: "linear f" and "subspace S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    87
  shows "inj_on f S <-> (!x : S. f x = 0 --> x = 0)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
    88
proof -
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    89
  have "inj_on f S <-> (!x : S. !y : S. f x = f y --> x = y)" by (simp add: inj_on_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    90
  also have "... <-> (!x : S. !y : S. f x - f y = 0 --> x - y = 0)" by simp
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    91
  also have "... <-> (!x : S. !y : S. f (x - y) = 0 --> x - y = 0)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    92
    by (simp add: linear_sub[OF lf])
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
    93
  also have "... <-> (! x : S. f x = 0 --> x = 0)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    94
    using `subspace S` subspace_def[of S] subspace_sub[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    95
  finally show ?thesis .
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    96
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    97
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
    98
lemma subspace_Inter: "(!s : f. subspace s) ==> subspace (Inter f)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
    99
  unfolding subspace_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   100
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   101
lemma span_eq[simp]: "(span s = s) <-> subspace s"
44457
d366fa5551ef declare euclidean_simps [simp] at the point they are proved;
huffman
parents: 44365
diff changeset
   102
  unfolding span_def by (rule hull_eq, rule subspace_Inter)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   103
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   104
lemma substdbasis_expansion_unique:
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   105
  assumes d: "d \<subseteq> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   106
  shows "(\<Sum>i\<in>d. f i *\<^sub>R i) = (x::'a::euclidean_space)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   107
      \<longleftrightarrow> (\<forall>i\<in>Basis. (i \<in> d \<longrightarrow> f i = x \<bullet> i) \<and> (i \<notin> d \<longrightarrow> x \<bullet> i = 0))"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   108
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   109
  have *: "\<And>x a b P. x * (if P then a else b) = (if P then x*a else x*b)" by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   110
  have **: "finite d" by (auto intro: finite_subset[OF assms])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   111
  have ***: "\<And>i. i \<in> Basis \<Longrightarrow> (\<Sum>i\<in>d. f i *\<^sub>R i) \<bullet> i = (\<Sum>x\<in>d. if x = i then f x else 0)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   112
    using d
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   113
    by (auto intro!: setsum_cong simp: inner_Basis inner_setsum_left)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   114
  show ?thesis
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   115
    unfolding euclidean_eq_iff[where 'a='a] by (auto simp: setsum_delta[OF **] ***)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   116
qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   117
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   118
lemma independent_substdbasis: "d \<subseteq> Basis \<Longrightarrow> independent d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   119
  by (rule independent_mono[OF independent_Basis])
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   120
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   121
lemma dim_cball:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   122
  assumes "0<e"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   123
  shows "dim (cball (0 :: 'n::euclidean_space) e) = DIM('n)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   124
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   125
  { fix x :: "'n::euclidean_space"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   126
    def y == "(e/norm x) *\<^sub>R x"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   127
    then have "y : cball 0 e" using cball_def dist_norm[of 0 y] assms by auto
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
   128
    moreover have *: "x = (norm x/e) *\<^sub>R y" using y_def assms by simp
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
   129
    moreover from * have "x = (norm x/e) *\<^sub>R y" by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   130
    ultimately have "x : span (cball 0 e)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   131
      using span_mul[of y "cball 0 e" "norm x/e"] span_inc[of "cball 0 e"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   132
  } then have "span (cball 0 e) = (UNIV :: ('n::euclidean_space) set)" by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   133
  then show ?thesis
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   134
    using dim_span[of "cball (0 :: 'n::euclidean_space) e"] by (auto simp add: dim_UNIV)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   135
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   136
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   137
lemma indep_card_eq_dim_span:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   138
  fixes B :: "('n::euclidean_space) set"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   139
  assumes "independent B"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   140
  shows "finite B & card B = dim (span B)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   141
  using assms basis_card_eq_dim[of B "span B"] span_inc by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   142
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   143
lemma setsum_not_0: "setsum f A ~= 0 ==> EX a:A. f a ~= 0"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   144
  by (rule ccontr) auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   145
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   146
lemma translate_inj_on:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   147
  fixes A :: "('a::ab_group_add) set"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   148
  shows "inj_on (%x. a+x) A"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   149
  unfolding inj_on_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   150
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   151
lemma translation_assoc:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   152
  fixes a b :: "'a::ab_group_add"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   153
  shows "(\<lambda>x. b+x) ` ((\<lambda>x. a+x) ` S) = (\<lambda>x. (a+b)+x) ` S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   154
  by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   155
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   156
lemma translation_invert:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   157
  fixes a :: "'a::ab_group_add"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   158
  assumes "(\<lambda>x. a+x) ` A = (\<lambda>x. a+x) ` B"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   159
  shows "A = B"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   160
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   161
  have "(%x. -a+x) ` ((%x. a+x) ` A) = (%x. -a+x) ` ((%x. a+x) ` B)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   162
    using assms by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   163
  then show ?thesis
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   164
    using translation_assoc[of "-a" a A] translation_assoc[of "-a" a B] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   165
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   166
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   167
lemma translation_galois:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   168
  fixes a :: "'a::ab_group_add"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   169
  shows "T=((\<lambda>x. a+x) ` S) <-> S=((\<lambda>x. (-a)+x) ` T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   170
  using translation_assoc[of "-a" a S] apply auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   171
  using translation_assoc[of a "-a" T] apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   172
  done
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   173
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   174
lemma translation_inverse_subset:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   175
  assumes "((%x. -a+x) ` V) <= (S :: 'n::ab_group_add set)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   176
  shows "V <= ((%x. a+x) ` S)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   177
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   178
  { fix x
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   179
    assume "x:V"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   180
    then have "x-a : S" using assms by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   181
    then have "x : {a + v |v. v : S}"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   182
      apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   183
      apply (rule exI[of _ "x-a"])
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   184
      apply simp
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   185
      done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   186
    then have "x : ((%x. a+x) ` S)" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   187
  } then show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   188
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   189
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   190
lemma basis_to_basis_subspace_isomorphism:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   191
  assumes s: "subspace (S:: ('n::euclidean_space) set)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   192
    and t: "subspace (T :: ('m::euclidean_space) set)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   193
    and d: "dim S = dim T"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   194
    and B: "B <= S" "independent B" "S <= span B" "card B = dim S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   195
    and C: "C <= T" "independent C" "T <= span C" "card C = dim T"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   196
  shows "EX f. linear f & f ` B = C & f ` S = T & inj_on f S"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   197
proof -
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   198
(* Proof is a modified copy of the proof of similar lemma subspace_isomorphism
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   199
*)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   200
  from B independent_bound have fB: "finite B" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   201
  from C independent_bound have fC: "finite C" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   202
  from B(4) C(4) card_le_inj[of B C] d obtain f where
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   203
    f: "f ` B \<subseteq> C" "inj_on f B" using `finite B` `finite C` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   204
  from linear_independent_extend[OF B(2)] obtain g where
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   205
    g: "linear g" "\<forall>x\<in> B. g x = f x" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   206
  from inj_on_iff_eq_card[OF fB, of f] f(2)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   207
  have "card (f ` B) = card B" by simp
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   208
  with B(4) C(4) have ceq: "card (f ` B) = card C" using d
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   209
    by simp
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   210
  have "g ` B = f ` B" using g(2)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   211
    by (auto simp add: image_iff)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   212
  also have "\<dots> = C" using card_subset_eq[OF fC f(1) ceq] .
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   213
  finally have gBC: "g ` B = C" .
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   214
  have gi: "inj_on g B" using f(2) g(2)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   215
    by (auto simp add: inj_on_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   216
  note g0 = linear_indep_image_lemma[OF g(1) fB, unfolded gBC, OF C(2) gi]
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   217
  { fix x y
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   218
    assume x: "x \<in> S" and y: "y \<in> S" and gxy: "g x = g y"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   219
    from B(3) x y have x': "x \<in> span B" and y': "y \<in> span B" by blast+
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   220
    from gxy have th0: "g (x - y) = 0" by (simp add: linear_sub[OF g(1)])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   221
    have th1: "x - y \<in> span B" using x' y' by (metis span_sub)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   222
    have "x=y" using g0[OF th1 th0] by simp
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   223
  } then have giS: "inj_on g S" unfolding inj_on_def by blast
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   224
  from span_subspace[OF B(1,3) s]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   225
  have "g ` S = span (g ` B)" by (simp add: span_linear_image[OF g(1)])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   226
  also have "\<dots> = span C" unfolding gBC ..
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   227
  also have "\<dots> = T" using span_subspace[OF C(1,3) t] .
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   228
  finally have gS: "g ` S = T" .
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   229
  from g(1) gS giS gBC show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   230
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   231
44524
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   232
lemma closure_bounded_linear_image:
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   233
  assumes f: "bounded_linear f"
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   234
  shows "f ` (closure S) \<subseteq> closure (f ` S)"
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   235
  using linear_continuous_on [OF f] closed_closure closure_subset
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   236
  by (rule image_closure_subset)
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   237
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   238
lemma closure_linear_image:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   239
  fixes f :: "('m::euclidean_space) => ('n::real_normed_vector)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   240
  assumes "linear f"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   241
  shows "f ` (closure S) <= closure (f ` S)"
44524
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   242
  using assms unfolding linear_conv_bounded_linear
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   243
  by (rule closure_bounded_linear_image)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   244
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   245
lemma closure_injective_linear_image:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   246
  fixes f :: "('n::euclidean_space) => ('n::euclidean_space)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   247
  assumes "linear f" "inj f"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   248
  shows "f ` (closure S) = closure (f ` S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   249
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   250
  obtain f' where f'_def: "linear f' & f o f' = id & f' o f = id"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   251
    using assms linear_injective_isomorphism[of f] isomorphism_expand by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   252
  then have "f' ` closure (f ` S) <= closure (S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   253
    using closure_linear_image[of f' "f ` S"] image_compose[of f' f] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   254
  then have "f ` f' ` closure (f ` S) <= f ` closure (S)" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   255
  then have "closure (f ` S) <= f ` closure (S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   256
    using image_compose[of f f' "closure (f ` S)"] f'_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   257
  then show ?thesis using closure_linear_image[of f S] assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   258
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   259
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   260
lemma closure_direct_sum:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   261
  shows "closure (S <*> T) = closure S <*> closure T"
44365
5daa55003649 add lemmas interior_Times and closure_Times
huffman
parents: 44361
diff changeset
   262
  by (rule closure_Times)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   263
44524
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   264
lemma closure_scaleR:
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   265
  fixes S :: "('a::real_normed_vector) set"
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   266
  shows "(op *\<^sub>R c) ` (closure S) = closure ((op *\<^sub>R c) ` S)"
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   267
proof
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   268
  show "(op *\<^sub>R c) ` (closure S) \<subseteq> closure ((op *\<^sub>R c) ` S)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   269
    using bounded_linear_scaleR_right by (rule closure_bounded_linear_image)
44524
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
   270
  show "closure ((op *\<^sub>R c) ` S) \<subseteq> (op *\<^sub>R c) ` (closure S)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   271
    by (intro closure_minimal image_mono closure_subset closed_scaling closed_closure)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   272
qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   273
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   274
lemma fst_linear: "linear fst"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   275
  unfolding linear_def by (simp add: algebra_simps)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   276
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   277
lemma snd_linear: "linear snd"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   278
  unfolding linear_def by (simp add: algebra_simps)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   279
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   280
lemma fst_snd_linear: "linear (%(x,y). x + y)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   281
  unfolding linear_def by (simp add: algebra_simps)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   282
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   283
lemma scaleR_2:
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   284
  fixes x :: "'a::real_vector"
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   285
  shows "scaleR 2 x = x + x"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   286
  unfolding one_add_one [symmetric] scaleR_left_distrib by simp
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   287
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   288
lemma vector_choose_size:
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   289
  "0 <= c ==> \<exists>(x::'a::euclidean_space). norm x = c"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   290
  apply (rule exI[where x="c *\<^sub>R (SOME i. i \<in> Basis)"])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
   291
  apply (auto simp: SOME_Basis)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   292
  done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   293
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   294
lemma setsum_delta_notmem:
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   295
  assumes "x \<notin> s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   296
  shows "setsum (\<lambda>y. if (y = x) then P x else Q y) s = setsum Q s"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   297
    and "setsum (\<lambda>y. if (x = y) then P x else Q y) s = setsum Q s"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   298
    and "setsum (\<lambda>y. if (y = x) then P y else Q y) s = setsum Q s"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   299
    and "setsum (\<lambda>y. if (x = y) then P y else Q y) s = setsum Q s"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
   300
  apply (rule_tac [!] setsum_cong2)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   301
  using assms apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   302
  done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   303
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   304
lemma setsum_delta'':
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   305
  fixes s::"'a::real_vector set"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   306
  assumes "finite s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   307
  shows "(\<Sum>x\<in>s. (if y = x then f x else 0) *\<^sub>R x) = (if y\<in>s then (f y) *\<^sub>R y else 0)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   308
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   309
  have *: "\<And>x y. (if y = x then f x else (0::real)) *\<^sub>R x = (if x=y then (f x) *\<^sub>R x else 0)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   310
    by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   311
  show ?thesis
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   312
    unfolding * using setsum_delta[OF assms, of y "\<lambda>x. f x *\<^sub>R x"] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   313
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   314
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   315
lemma if_smult:"(if P then x else (y::real)) *\<^sub>R v = (if P then x *\<^sub>R v else y *\<^sub>R v)" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   316
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   317
lemma image_smult_interval:
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   318
  "(\<lambda>x. m *\<^sub>R (x::'a::ordered_euclidean_space)) ` {a..b} =
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   319
    (if {a..b} = {} then {} else if 0 \<le> m then {m *\<^sub>R a..m *\<^sub>R b} else {m *\<^sub>R b..m *\<^sub>R a})"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   320
  using image_affinity_interval[of m 0 a b] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   321
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   322
lemma dist_triangle_eq:
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
   323
  fixes x y z :: "'a::real_inner"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   324
  shows "dist x z = dist x y + dist y z \<longleftrightarrow> norm (x - y) *\<^sub>R (y - z) = norm (y - z) *\<^sub>R (x - y)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   325
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   326
  have *: "x - y + (y - z) = x - z" by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   327
  show ?thesis unfolding dist_norm norm_triangle_eq[of "x - y" "y - z", unfolded *]
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   328
    by (auto simp add:norm_minus_commute)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   329
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   330
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   331
lemma norm_minus_eqI:"x = - y \<Longrightarrow> norm x = norm y" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   332
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   333
lemma Min_grI:
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   334
  assumes "finite A" "A \<noteq> {}" "\<forall>a\<in>A. x < a"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   335
  shows "x < Min A"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   336
  unfolding Min_gr_iff[OF assms(1,2)] using assms(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   337
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   338
lemma norm_lt: "norm x < norm y \<longleftrightarrow> inner x x < inner y y"
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   339
  unfolding norm_eq_sqrt_inner by simp
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   340
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   341
lemma norm_le: "norm x \<le> norm y \<longleftrightarrow> inner x x \<le> inner y y"
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   342
  unfolding norm_eq_sqrt_inner by simp
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   343
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
   344
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
   345
subsection {* Affine set and affine hull *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   346
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   347
definition affine :: "'a::real_vector set \<Rightarrow> bool"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   348
  where "affine s \<longleftrightarrow> (\<forall>x\<in>s. \<forall>y\<in>s. \<forall>u v. u + v = 1 \<longrightarrow> u *\<^sub>R x + v *\<^sub>R y \<in> s)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   349
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   350
lemma affine_alt: "affine s \<longleftrightarrow> (\<forall>x\<in>s. \<forall>y\<in>s. \<forall>u::real. (1 - u) *\<^sub>R x + u *\<^sub>R y \<in> s)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   351
  unfolding affine_def by (metis eq_diff_eq')
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   352
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   353
lemma affine_empty[intro]: "affine {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   354
  unfolding affine_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   355
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   356
lemma affine_sing[intro]: "affine {x}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   357
  unfolding affine_alt by (auto simp add: scaleR_left_distrib [symmetric])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   358
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   359
lemma affine_UNIV[intro]: "affine UNIV"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   360
  unfolding affine_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   361
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   362
lemma affine_Inter: "(\<forall>s\<in>f. affine s) \<Longrightarrow> affine (\<Inter> f)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   363
  unfolding affine_def by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   364
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   365
lemma affine_Int: "affine s \<Longrightarrow> affine t \<Longrightarrow> affine (s \<inter> t)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   366
  unfolding affine_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   367
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   368
lemma affine_affine_hull: "affine(affine hull s)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   369
  unfolding hull_def
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   370
  using affine_Inter[of "{t. affine t \<and> s \<subseteq> t}"] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   371
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   372
lemma affine_hull_eq[simp]: "(affine hull s = s) \<longleftrightarrow> affine s"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   373
  by (metis affine_affine_hull hull_same)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   374
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   375
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
   376
subsubsection {* Some explicit formulations (from Lars Schewe) *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   377
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   378
lemma affine:
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   379
  fixes V::"'a::real_vector set"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   380
  shows "affine V \<longleftrightarrow>
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   381
    (\<forall>s u. finite s \<and> s \<noteq> {} \<and> s \<subseteq> V \<and> setsum u s = 1 \<longrightarrow> (setsum (\<lambda>x. (u x) *\<^sub>R x)) s \<in> V)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   382
  unfolding affine_def
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   383
  apply rule
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   384
  apply(rule, rule, rule)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   385
  apply(erule conjE)+
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   386
  defer
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   387
  apply (rule, rule, rule, rule, rule)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   388
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   389
  fix x y u v
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   390
  assume as: "x \<in> V" "y \<in> V" "u + v = (1::real)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   391
    "\<forall>s u. finite s \<and> s \<noteq> {} \<and> s \<subseteq> V \<and> setsum u s = 1 \<longrightarrow> (\<Sum>x\<in>s. u x *\<^sub>R x) \<in> V"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   392
  then show "u *\<^sub>R x + v *\<^sub>R y \<in> V"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   393
    apply (cases "x = y")
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   394
    using as(4)[THEN spec[where x="{x,y}"], THEN spec[where x="\<lambda>w. if w = x then u else v"]]
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   395
      and as(1-3)
49530
wenzelm
parents: 49529
diff changeset
   396
    by (auto simp add: scaleR_left_distrib[symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   397
next
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   398
  fix s u
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   399
  assume as: "\<forall>x\<in>V. \<forall>y\<in>V. \<forall>u v. u + v = 1 \<longrightarrow> u *\<^sub>R x + v *\<^sub>R y \<in> V"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   400
    "finite s" "s \<noteq> {}" "s \<subseteq> V" "setsum u s = (1::real)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   401
  def n \<equiv> "card s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   402
  have "card s = 0 \<or> card s = 1 \<or> card s = 2 \<or> card s > 2" by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   403
  then show "(\<Sum>x\<in>s. u x *\<^sub>R x) \<in> V"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   404
  proof (auto simp only: disjE)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   405
    assume "card s = 2"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   406
    then have "card s = Suc (Suc 0)" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   407
    then obtain a b where "s = {a, b}" unfolding card_Suc_eq by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   408
    then show ?thesis
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   409
      using as(1)[THEN bspec[where x=a], THEN bspec[where x=b]] using as(4,5)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   410
      by (auto simp add: setsum_clauses(2))
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   411
  next
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   412
    assume "card s > 2"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   413
    then show ?thesis using as and n_def
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   414
    proof (induct n arbitrary: u s)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   415
      case 0
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   416
      then show ?case by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   417
    next
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   418
      case (Suc n)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   419
      fix s :: "'a set" and u :: "'a \<Rightarrow> real"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   420
      assume IA:
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   421
        "\<And>u s.  \<lbrakk>2 < card s; \<forall>x\<in>V. \<forall>y\<in>V. \<forall>u v. u + v = 1 \<longrightarrow> u *\<^sub>R x + v *\<^sub>R y \<in> V; finite s;
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   422
          s \<noteq> {}; s \<subseteq> V; setsum u s = 1; n = card s \<rbrakk> \<Longrightarrow> (\<Sum>x\<in>s. u x *\<^sub>R x) \<in> V"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   423
        and as:
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   424
          "Suc n = card s" "2 < card s" "\<forall>x\<in>V. \<forall>y\<in>V. \<forall>u v. u + v = 1 \<longrightarrow> u *\<^sub>R x + v *\<^sub>R y \<in> V"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   425
           "finite s" "s \<noteq> {}" "s \<subseteq> V" "setsum u s = 1"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   426
      have "\<exists>x\<in>s. u x \<noteq> 1"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   427
      proof (rule ccontr)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   428
        assume "\<not> ?thesis"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   429
        then have "setsum u s = real_of_nat (card s)" unfolding card_eq_setsum by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   430
        then show False
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   431
          using as(7) and `card s > 2`
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   432
          by (metis One_nat_def less_Suc0 Zero_not_Suc of_nat_1 of_nat_eq_iff numeral_2_eq_2)
45498
2dc373f1867a avoid numeral-representation-specific rules in metis proof
huffman
parents: 45051
diff changeset
   433
      qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   434
      then obtain x where x:"x\<in>s" "u x \<noteq> 1" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   435
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   436
      have c: "card (s - {x}) = card s - 1"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   437
        apply (rule card_Diff_singleton) using `x\<in>s` as(4) by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   438
      have *: "s = insert x (s - {x})" "finite (s - {x})"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   439
        using `x\<in>s` and as(4) by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   440
      have **: "setsum u (s - {x}) = 1 - u x"
49530
wenzelm
parents: 49529
diff changeset
   441
        using setsum_clauses(2)[OF *(2), of u x, unfolded *(1)[symmetric] as(7)] by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   442
      have ***: "inverse (1 - u x) * setsum u (s - {x}) = 1"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   443
        unfolding ** using `u x \<noteq> 1` by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   444
      have "(\<Sum>xa\<in>s - {x}. (inverse (1 - u x) * u xa) *\<^sub>R xa) \<in> V"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   445
      proof (cases "card (s - {x}) > 2")
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   446
        case True
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   447
        then have "s - {x} \<noteq> {}" "card (s - {x}) = n"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   448
          unfolding c and as(1)[symmetric]
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   449
        proof (rule_tac ccontr)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   450
          assume "\<not> s - {x} \<noteq> {}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   451
          then have "card (s - {x}) = 0" unfolding card_0_eq[OF *(2)] by simp
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   452
          then show False using True by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   453
        qed auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   454
        then show ?thesis
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   455
          apply (rule_tac IA[of "s - {x}" "\<lambda>y. (inverse (1 - u x) * u y)"])
49530
wenzelm
parents: 49529
diff changeset
   456
          unfolding setsum_right_distrib[symmetric] using as and *** and True
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   457
          apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   458
          done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   459
      next
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   460
        case False
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   461
        then have "card (s - {x}) = Suc (Suc 0)" using as(2) and c by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   462
        then obtain a b where "(s - {x}) = {a, b}" "a\<noteq>b" unfolding card_Suc_eq by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   463
        then show ?thesis using as(3)[THEN bspec[where x=a], THEN bspec[where x=b]]
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   464
          using *** *(2) and `s \<subseteq> V`
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   465
          unfolding setsum_right_distrib by (auto simp add: setsum_clauses(2))
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   466
      qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   467
      then have "u x + (1 - u x) = 1 \<Longrightarrow>
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   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"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   469
        apply -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   470
        apply (rule as(3)[rule_format])
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   471
        unfolding  RealVector.scaleR_right.setsum
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   472
        using x(1) as(6) apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   473
        done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   474
      then show "(\<Sum>x\<in>s. u x *\<^sub>R x) \<in> V"
49530
wenzelm
parents: 49529
diff changeset
   475
        unfolding scaleR_scaleR[symmetric] and scaleR_right.setsum [symmetric]
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   476
        apply (subst *)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   477
        unfolding setsum_clauses(2)[OF *(2)]
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   478
        using `u x \<noteq> 1` apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   479
        done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   480
    qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   481
  next
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   482
    assume "card s = 1"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   483
    then obtain a where "s={a}" by (auto simp add: card_Suc_eq)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   484
    then show ?thesis using as(4,5) by simp
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   485
  qed (insert `s\<noteq>{}` `finite s`, auto)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   486
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   487
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   488
lemma affine_hull_explicit:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   489
  "affine hull p = {y. \<exists>s u. finite s \<and> s \<noteq> {} \<and> s \<subseteq> p \<and> setsum u s = 1 \<and> setsum (\<lambda>v. (u v) *\<^sub>R v) s = y}"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   490
  apply (rule hull_unique)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   491
  apply (subst subset_eq)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   492
  prefer 3
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   493
  apply rule
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   494
  unfolding mem_Collect_eq
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   495
  apply (erule exE)+
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   496
  apply (erule conjE)+
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   497
  prefer 2
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   498
  apply rule
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   499
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   500
  fix x
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   501
  assume "x\<in>p"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   502
  then show "\<exists>s u. finite s \<and> s \<noteq> {} \<and> s \<subseteq> p \<and> setsum u s = 1 \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = x"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   503
    apply (rule_tac x="{x}" in exI, rule_tac x="\<lambda>x. 1" in exI)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   504
    apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   505
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   506
next
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   507
  fix t x s u
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   508
  assume as: "p \<subseteq> t" "affine t" "finite s" "s \<noteq> {}" "s \<subseteq> p" "setsum u s = 1" "(\<Sum>v\<in>s. u v *\<^sub>R v) = x"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   509
  then show "x \<in> t"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   510
    using as(2)[unfolded affine, THEN spec[where x=s], THEN spec[where x=u]] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   511
next
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   512
  show "affine {y. \<exists>s u. finite s \<and> s \<noteq> {} \<and> s \<subseteq> p \<and> setsum u s = 1 \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = y}"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   513
    unfolding affine_def
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   514
    apply (rule, rule, rule, rule, rule)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   515
    unfolding mem_Collect_eq
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   516
  proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   517
    fix u v :: real
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   518
    assume uv: "u + v = 1"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   519
    fix x
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   520
    assume "\<exists>s u. finite s \<and> s \<noteq> {} \<and> s \<subseteq> p \<and> setsum u s = 1 \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = x"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   521
    then obtain sx ux where
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   522
      x: "finite sx" "sx \<noteq> {}" "sx \<subseteq> p" "setsum ux sx = 1" "(\<Sum>v\<in>sx. ux v *\<^sub>R v) = x" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   523
    fix y assume "\<exists>s u. finite s \<and> s \<noteq> {} \<and> s \<subseteq> p \<and> setsum u s = 1 \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = y"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   524
    then obtain sy uy where
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   525
      y: "finite sy" "sy \<noteq> {}" "sy \<subseteq> p" "setsum uy sy = 1" "(\<Sum>v\<in>sy. uy v *\<^sub>R v) = y" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   526
    have xy: "finite (sx \<union> sy)" using x(1) y(1) by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   527
    have **: "(sx \<union> sy) \<inter> sx = sx" "(sx \<union> sy) \<inter> sy = sy" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   528
    show "\<exists>s ua. finite s \<and> s \<noteq> {} \<and> s \<subseteq> p \<and>
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   529
        setsum ua s = 1 \<and> (\<Sum>v\<in>s. ua v *\<^sub>R v) = u *\<^sub>R x + v *\<^sub>R y"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   530
      apply (rule_tac x="sx \<union> sy" in exI)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   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)
49530
wenzelm
parents: 49529
diff changeset
   532
      unfolding scaleR_left_distrib setsum_addf if_smult scaleR_zero_left ** setsum_restrict_set[OF xy, symmetric]
wenzelm
parents: 49529
diff changeset
   533
      unfolding scaleR_scaleR[symmetric] RealVector.scaleR_right.setsum [symmetric] and setsum_right_distrib[symmetric]
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   534
      unfolding x y
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   535
      using x(1-3) y(1-3) uv apply simp
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   536
      done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   537
  qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   538
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   539
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   540
lemma affine_hull_finite:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   541
  assumes "finite s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   542
  shows "affine hull s = {y. \<exists>u. setsum u s = 1 \<and> setsum (\<lambda>v. u v *\<^sub>R v) s = y}"
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
   543
  unfolding affine_hull_explicit and set_eq_iff and mem_Collect_eq apply (rule,rule)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   544
  apply(erule exE)+
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   545
  apply(erule conjE)+
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   546
  defer
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   547
  apply (erule exE)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   548
  apply (erule conjE)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   549
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   550
  fix x u
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   551
  assume "setsum u s = 1" "(\<Sum>v\<in>s. u v *\<^sub>R v) = x"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   552
  then show "\<exists>sa u. finite sa \<and>
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   553
      \<not> (\<forall>x. (x \<in> sa) = (x \<in> {})) \<and> sa \<subseteq> s \<and> setsum u sa = 1 \<and> (\<Sum>v\<in>sa. u v *\<^sub>R v) = x"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   554
    apply (rule_tac x=s in exI, rule_tac x=u in exI)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   555
    using assms apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   556
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   557
next
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   558
  fix x t u
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   559
  assume "t \<subseteq> s"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   560
  then have *: "s \<inter> t = t" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   561
  assume "finite t" "\<not> (\<forall>x. (x \<in> t) = (x \<in> {}))" "setsum u t = 1" "(\<Sum>v\<in>t. u v *\<^sub>R v) = x"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   562
  then show "\<exists>u. setsum u s = 1 \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = x"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   563
    apply (rule_tac x="\<lambda>x. if x\<in>t then u x else 0" in exI)
49530
wenzelm
parents: 49529
diff changeset
   564
    unfolding if_smult scaleR_zero_left and setsum_restrict_set[OF assms, symmetric] and *
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   565
    apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   566
    done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   567
qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   568
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   569
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
   570
subsubsection {* Stepping theorems and hence small special cases *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   571
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   572
lemma affine_hull_empty[simp]: "affine hull {} = {}"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   573
  by (rule hull_unique) auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   574
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   575
lemma affine_hull_finite_step:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   576
  fixes y :: "'a::real_vector"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   577
  shows
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   578
    "(\<exists>u. setsum u {} = w \<and> setsum (\<lambda>x. u x *\<^sub>R x) {} = y) \<longleftrightarrow> w = 0 \<and> y = 0" (is ?th1)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   579
    "finite s \<Longrightarrow>
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   580
      (\<exists>u. setsum u (insert a s) = w \<and> setsum (\<lambda>x. u x *\<^sub>R x) (insert a s) = y) \<longleftrightarrow>
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   581
      (\<exists>v u. setsum u s = w - v \<and> setsum (\<lambda>x. u x *\<^sub>R x) s = y - v *\<^sub>R a)" (is "?as \<Longrightarrow> (?lhs = ?rhs)")
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   582
proof -
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   583
  show ?th1 by simp
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   584
  assume ?as
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   585
  { assume ?lhs
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   586
    then obtain u where u:"setsum u (insert a s) = w \<and> (\<Sum>x\<in>insert a s. u x *\<^sub>R x) = y" by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   587
    have ?rhs
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   588
    proof (cases "a \<in> s")
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   589
      case True
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   590
      then have *: "insert a s = s" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   591
      show ?thesis using u[unfolded *] apply(rule_tac x=0 in exI) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   592
    next
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   593
      case False
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   594
      then show ?thesis
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   595
        apply (rule_tac x="u a" in exI)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   596
        using u and `?as` apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   597
        done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   598
    qed }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   599
  moreover
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   600
  { assume ?rhs
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   601
    then obtain v u where vu:"setsum u s = w - v"  "(\<Sum>x\<in>s. u x *\<^sub>R x) = y - v *\<^sub>R a" by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   602
    have *: "\<And>x M. (if x = a then v else M) *\<^sub>R x = (if x = a then v *\<^sub>R x else M *\<^sub>R x)" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   603
    have ?lhs
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   604
    proof (cases "a \<in> s")
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   605
      case True
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   606
      then show ?thesis
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   607
        apply (rule_tac x="\<lambda>x. (if x=a then v else 0) + u x" in exI)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   608
        unfolding setsum_clauses(2)[OF `?as`] apply simp
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   609
        unfolding scaleR_left_distrib and setsum_addf
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   610
        unfolding vu and * and scaleR_zero_left
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   611
        apply (auto simp add: setsum_delta[OF `?as`])
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   612
        done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   613
    next
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   614
      case False
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   615
      then have **:
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   616
        "\<And>x. x \<in> s \<Longrightarrow> u x = (if x = a then v else u x)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   617
        "\<And>x. x \<in> s \<Longrightarrow> u x *\<^sub>R x = (if x = a then v *\<^sub>R x else u x *\<^sub>R x)" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   618
      from False show ?thesis
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   619
        apply (rule_tac x="\<lambda>x. if x=a then v else u x" in exI)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   620
        unfolding setsum_clauses(2)[OF `?as`] and * using vu
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   621
        using setsum_cong2[of s "\<lambda>x. u x *\<^sub>R x" "\<lambda>x. if x = a then v *\<^sub>R x else u x *\<^sub>R x", OF **(2)]
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   622
        using setsum_cong2[of s u "\<lambda>x. if x = a then v else u x", OF **(1)]
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   623
        apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   624
        done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   625
    qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   626
  }
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   627
  ultimately show "?lhs = ?rhs" by blast
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   628
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   629
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   630
lemma affine_hull_2:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   631
  fixes a b :: "'a::real_vector"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   632
  shows "affine hull {a,b} = {u *\<^sub>R a + v *\<^sub>R b| u v. (u + v = 1)}" (is "?lhs = ?rhs")
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   633
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   634
  have *:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   635
    "\<And>x y z. z = x - y \<longleftrightarrow> y + z = (x::real)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   636
    "\<And>x y z. z = x - y \<longleftrightarrow> y + z = (x::'a)" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   637
  have "?lhs = {y. \<exists>u. setsum u {a, b} = 1 \<and> (\<Sum>v\<in>{a, b}. u v *\<^sub>R v) = y}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   638
    using affine_hull_finite[of "{a,b}"] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   639
  also have "\<dots> = {y. \<exists>v u. u b = 1 - v \<and> u b *\<^sub>R b = y - v *\<^sub>R a}"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   640
    by (simp add: affine_hull_finite_step(2)[of "{b}" a])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   641
  also have "\<dots> = ?rhs" unfolding * by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   642
  finally show ?thesis by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   643
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   644
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   645
lemma affine_hull_3:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   646
  fixes a b c :: "'a::real_vector"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   647
  shows "affine hull {a,b,c} = { u *\<^sub>R a + v *\<^sub>R b + w *\<^sub>R c| u v w. u + v + w = 1}" (is "?lhs = ?rhs")
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   648
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   649
  have *:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   650
    "\<And>x y z. z = x - y \<longleftrightarrow> y + z = (x::real)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   651
    "\<And>x y z. z = x - y \<longleftrightarrow> y + z = (x::'a)" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   652
  show ?thesis
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   653
    apply (simp add: affine_hull_finite affine_hull_finite_step)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   654
    unfolding *
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   655
    apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   656
    apply (rule_tac x=v in exI) apply(rule_tac x=va in exI) apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   657
    apply (rule_tac x=u in exI) apply force
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   658
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   659
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   660
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   661
lemma mem_affine:
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
   662
  assumes "affine S" "x : S" "y : S" "u + v = 1"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   663
  shows "(u *\<^sub>R x + v *\<^sub>R y) : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   664
  using assms affine_def[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   665
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   666
lemma mem_affine_3:
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
   667
  assumes "affine S" "x : S" "y : S" "z : S" "u + v + w = 1"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   668
  shows "(u *\<^sub>R x + v *\<^sub>R y + w *\<^sub>R z) : S"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   669
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   670
  have "(u *\<^sub>R x + v *\<^sub>R y + w *\<^sub>R z) : affine hull {x, y, z}"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   671
    using affine_hull_3[of x y z] assms by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   672
  moreover
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   673
  have "affine hull {x, y, z} <= affine hull S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   674
    using hull_mono[of "{x, y, z}" "S"] assms by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   675
  moreover
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   676
  have "affine hull S = S" using assms affine_hull_eq[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   677
  ultimately show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   678
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   679
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   680
lemma mem_affine_3_minus:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   681
  assumes "affine S" "x : S" "y : S" "z : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   682
  shows "x + v *\<^sub>R (y-z) : S"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   683
  using mem_affine_3[of S x y z 1 v "-v"] assms by (simp add: algebra_simps)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   684
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   685
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
   686
subsubsection {* Some relations between affine hull and subspaces *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   687
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   688
lemma affine_hull_insert_subset_span:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   689
  "affine hull (insert a s) \<subseteq> {a + v| v . v \<in> span {x - a | x . x \<in> s}}"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   690
  unfolding subset_eq Ball_def
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   691
  unfolding affine_hull_explicit span_explicit mem_Collect_eq
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
   692
  apply (rule, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
   693
  apply (erule exE)+
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
   694
  apply (erule conjE)+
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   695
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   696
  fix x t u
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   697
  assume as: "finite t" "t \<noteq> {}" "t \<subseteq> insert a s" "setsum u t = 1" "(\<Sum>v\<in>t. u v *\<^sub>R v) = x"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   698
  have "(\<lambda>x. x - a) ` (t - {a}) \<subseteq> {x - a |x. x \<in> s}" using as(3) by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   699
  then show "\<exists>v. x = a + v \<and> (\<exists>S u. finite S \<and> S \<subseteq> {x - a |x. x \<in> s} \<and> (\<Sum>v\<in>S. u v *\<^sub>R v) = v)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   700
    apply (rule_tac x="x - a" in exI)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   701
    apply (rule conjI, simp)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   702
    apply (rule_tac x="(\<lambda>x. x - a) ` (t - {a})" in exI)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   703
    apply (rule_tac x="\<lambda>x. u (x + a)" in exI)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   704
    apply (rule conjI) using as(1) apply simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   705
    apply (erule conjI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   706
    using as(1)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   707
    apply (simp add: setsum_reindex[unfolded inj_on_def] scaleR_right_diff_distrib
49530
wenzelm
parents: 49529
diff changeset
   708
      setsum_subtractf scaleR_left.setsum[symmetric] setsum_diff1 scaleR_left_diff_distrib)
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   709
    unfolding as
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   710
    apply simp
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   711
    done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   712
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   713
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   714
lemma affine_hull_insert_span:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   715
  assumes "a \<notin> s"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   716
  shows "affine hull (insert a s) = {a + v | v . v \<in> span {x - a | x.  x \<in> s}}"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   717
  apply (rule, rule affine_hull_insert_subset_span)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   718
  unfolding subset_eq Ball_def
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   719
  unfolding affine_hull_explicit and mem_Collect_eq
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   720
proof (rule, rule, erule exE, erule conjE)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   721
  fix y v
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   722
  assume "y = a + v" "v \<in> span {x - a |x. x \<in> s}"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   723
  then obtain t u where obt:"finite t" "t \<subseteq> {x - a |x. x \<in> s}" "a + (\<Sum>v\<in>t. u v *\<^sub>R v) = y"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   724
    unfolding span_explicit by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   725
  def f \<equiv> "(\<lambda>x. x + a) ` t"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   726
  have f:"finite f" "f \<subseteq> s" "(\<Sum>v\<in>f. u (v - a) *\<^sub>R (v - a)) = y - a"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   727
    unfolding f_def using obt by (auto simp add: setsum_reindex[unfolded inj_on_def])
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   728
  have *: "f \<inter> {a} = {}" "f \<inter> - {a} = f" using f(2) assms by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   729
  show "\<exists>sa u. finite sa \<and> sa \<noteq> {} \<and> sa \<subseteq> insert a s \<and> setsum u sa = 1 \<and> (\<Sum>v\<in>sa. u v *\<^sub>R v) = y"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   730
    apply (rule_tac x = "insert a f" in exI)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   731
    apply (rule_tac x = "\<lambda>x. if x=a then 1 - setsum (\<lambda>x. u (x - a)) f else u (x - a)" in exI)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   732
    using assms and f unfolding setsum_clauses(2)[OF f(1)] and if_smult
35577
43b93e294522 Generalized setsum_cases
hoelzl
parents: 35542
diff changeset
   733
    unfolding setsum_cases[OF f(1), of "\<lambda>x. x = a"]
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   734
    apply (auto simp add: setsum_subtractf scaleR_left.setsum algebra_simps *)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   735
    done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   736
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   737
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   738
lemma affine_hull_span:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   739
  assumes "a \<in> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   740
  shows "affine hull s = {a + v | v. v \<in> span {x - a | x. x \<in> s - {a}}}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   741
  using affine_hull_insert_span[of a "s - {a}", unfolded insert_Diff[OF assms]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   742
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   743
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
   744
subsubsection {* Parallel affine sets *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   745
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   746
definition affine_parallel :: "'a::real_vector set => 'a::real_vector set => bool"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   747
  where "affine_parallel S T = (? a. T = ((%x. a + x) ` S))"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   748
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   749
lemma affine_parallel_expl_aux:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   750
  fixes S T :: "'a::real_vector set"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   751
  assumes "!x. (x : S <-> (a+x) : T)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   752
  shows "T = ((%x. a + x) ` S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   753
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   754
  { fix x
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   755
    assume "x : T"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   756
    then have "(-a)+x : S" using assms by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   757
    then have "x : ((%x. a + x) ` S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   758
      using imageI[of "-a+x" S "(%x. a+x)"] by auto }
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   759
  moreover have "T >= ((%x. a + x) ` S)" using assms by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   760
  ultimately show ?thesis by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   761
qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   762
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   763
lemma affine_parallel_expl: "affine_parallel S T = (? a. !x. (x : S <-> (a+x) : T))"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   764
  unfolding affine_parallel_def
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   765
  using affine_parallel_expl_aux[of S _ T] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   766
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   767
lemma affine_parallel_reflex: "affine_parallel S S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   768
  unfolding affine_parallel_def apply (rule exI[of _ "0"]) by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   769
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   770
lemma affine_parallel_commut:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   771
  assumes "affine_parallel A B"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   772
  shows "affine_parallel B A"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   773
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   774
  from assms obtain a where "B=((%x. a + x) ` A)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   775
    unfolding affine_parallel_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   776
  then show ?thesis
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   777
    using translation_galois[of B a A] unfolding affine_parallel_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   778
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   779
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   780
lemma affine_parallel_assoc:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   781
  assumes "affine_parallel A B" "affine_parallel B C"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   782
  shows "affine_parallel A C"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   783
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   784
  from assms obtain ab where "B=((%x. ab + x) ` A)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   785
    unfolding affine_parallel_def by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   786
  moreover
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   787
  from assms obtain bc where "C=((%x. bc + x) ` B)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   788
    unfolding affine_parallel_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   789
  ultimately show ?thesis
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   790
    using translation_assoc[of bc ab A] unfolding affine_parallel_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   791
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   792
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   793
lemma affine_translation_aux:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   794
  fixes a :: "'a::real_vector"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   795
  assumes "affine ((%x. a + x) ` S)" shows "affine S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   796
proof-
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   797
  { fix x y u v
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   798
    assume xy: "x : S" "y : S" "(u :: real)+v=1"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   799
    then have "(a+x):((%x. a + x) ` S)" "(a+y):((%x. a + x) ` S)" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   800
    then have h1: "u *\<^sub>R  (a+x) + v *\<^sub>R (a+y) : ((%x. a + x) ` S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   801
      using xy assms unfolding affine_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   802
    have "u *\<^sub>R (a+x) + v *\<^sub>R (a+y) = (u+v) *\<^sub>R a + (u *\<^sub>R x + v *\<^sub>R y)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   803
      by (simp add: algebra_simps)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   804
    also have "...= a + (u *\<^sub>R x + v *\<^sub>R y)" using `u+v=1` by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   805
    ultimately have "a + (u *\<^sub>R x + v *\<^sub>R y) : ((%x. a + x) ` S)" using h1 by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   806
    then have "u *\<^sub>R x + v *\<^sub>R y : S" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   807
  }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   808
  then show ?thesis unfolding affine_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   809
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   810
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   811
lemma affine_translation:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   812
  fixes a :: "'a::real_vector"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   813
  shows "affine S <-> affine ((%x. a + x) ` S)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   814
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   815
  have "affine S ==> affine ((%x. a + x) ` S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   816
    using affine_translation_aux[of "-a" "((%x. a + x) ` S)"]
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   817
    using translation_assoc[of "-a" a S] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   818
  then show ?thesis using affine_translation_aux by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   819
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   820
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   821
lemma parallel_is_affine:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   822
  fixes S T :: "'a::real_vector set"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   823
  assumes "affine S" "affine_parallel S T"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   824
  shows "affine T"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   825
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   826
  from assms obtain a where "T=((%x. a + x) ` S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   827
    unfolding affine_parallel_def by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   828
  then show ?thesis using affine_translation assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   829
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   830
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
   831
lemma subspace_imp_affine: "subspace s \<Longrightarrow> affine s"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   832
  unfolding subspace_def affine_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   833
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   834
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
   835
subsubsection {* Subspace parallel to an affine set *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   836
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   837
lemma subspace_affine: "subspace S <-> (affine S & 0 : S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   838
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   839
  have h0: "subspace S ==> (affine S & 0 : S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   840
    using subspace_imp_affine[of S] subspace_0 by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   841
  { assume assm: "affine S & 0 : S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   842
    { fix c :: real
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   843
      fix x assume x_def: "x : S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   844
      have "c *\<^sub>R x = (1-c) *\<^sub>R 0 + c *\<^sub>R x" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   845
      moreover
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   846
      have "(1-c) *\<^sub>R 0 + c *\<^sub>R x : S" using affine_alt[of S] assm x_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   847
      ultimately have "c *\<^sub>R x : S" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   848
    }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   849
    then have h1: "!c. !x : S. c *\<^sub>R x : S" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   850
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   851
    { fix x y assume xy_def: "x : S" "y : S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   852
      def u == "(1 :: real)/2"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   853
      have "(1/2) *\<^sub>R (x+y) = (1/2) *\<^sub>R (x+y)" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   854
      moreover
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   855
      have "(1/2) *\<^sub>R (x+y)=(1/2) *\<^sub>R x + (1-(1/2)) *\<^sub>R y" by (simp add: algebra_simps)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   856
      moreover
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   857
      have "(1-u) *\<^sub>R x + u *\<^sub>R y : S" using affine_alt[of S] assm xy_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   858
      ultimately
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   859
      have "(1/2) *\<^sub>R (x+y) : S" using u_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   860
      moreover
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   861
      have "(x+y) = 2 *\<^sub>R ((1/2) *\<^sub>R (x+y))" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   862
      ultimately
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   863
      have "(x+y) : S" using h1[rule_format, of "(1/2) *\<^sub>R (x+y)" "2"] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   864
    }
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   865
    then have "!x : S. !y : S. (x+y) : S" by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   866
    then have "subspace S" using h1 assm unfolding subspace_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   867
  }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   868
  then show ?thesis using h0 by metis
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   869
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   870
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   871
lemma affine_diffs_subspace:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   872
  assumes "affine S" "a : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   873
  shows "subspace ((%x. (-a)+x) ` S)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   874
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   875
  have "affine ((%x. (-a)+x) ` S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   876
    using  affine_translation assms by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   877
  moreover have "0 : ((%x. (-a)+x) ` S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   878
    using assms exI[of "(%x. x:S & -a+x=0)" a] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   879
  ultimately show ?thesis using subspace_affine by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   880
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   881
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   882
lemma parallel_subspace_explicit:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   883
  assumes "affine S" "a : S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   884
  assumes "L == {y. ? x : S. (-a)+x=y}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   885
  shows "subspace L & affine_parallel S L"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   886
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   887
  have par: "affine_parallel S L"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   888
    unfolding affine_parallel_def using assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   889
  then have "affine L" using assms parallel_is_affine by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   890
  moreover have "0 : L"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   891
    using assms apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   892
    using exI[of "(%x. x:S & -a+x=0)" a] apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   893
    done
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   894
  ultimately show ?thesis using subspace_affine par by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   895
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   896
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   897
lemma parallel_subspace_aux:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   898
  assumes "subspace A" "subspace B" "affine_parallel A B"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   899
  shows "A>=B"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   900
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   901
  from assms obtain a where a_def: "!x. (x : A <-> (a+x) : B)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   902
    using affine_parallel_expl[of A B] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   903
  then have "-a : A" using assms subspace_0[of B] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   904
  then have "a : A" using assms subspace_neg[of A "-a"] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   905
  then show ?thesis using assms a_def unfolding subspace_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   906
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   907
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   908
lemma parallel_subspace:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   909
  assumes "subspace A" "subspace B" "affine_parallel A B"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   910
  shows "A = B"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   911
proof
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   912
  show "A >= B"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   913
    using assms parallel_subspace_aux by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   914
  show "A <= B"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   915
    using assms parallel_subspace_aux[of B A] affine_parallel_commut by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   916
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   917
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   918
lemma affine_parallel_subspace:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   919
  assumes "affine S" "S ~= {}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   920
  shows "?!L. subspace L & affine_parallel S L"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   921
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   922
  have ex: "? L. subspace L & affine_parallel S L"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
   923
    using assms parallel_subspace_explicit by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   924
  { fix L1 L2
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   925
    assume ass: "subspace L1 & affine_parallel S L1" "subspace L2 & affine_parallel S L2"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   926
    then have "affine_parallel L1 L2"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   927
      using affine_parallel_commut[of S L1] affine_parallel_assoc[of L1 S L2] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   928
    then have "L1 = L2"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   929
      using ass parallel_subspace by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   930
  }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   931
  then show ?thesis using ex by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   932
qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   933
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   934
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
   935
subsection {* Cones *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   936
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   937
definition cone :: "'a::real_vector set \<Rightarrow> bool"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   938
  where "cone s \<longleftrightarrow> (\<forall>x\<in>s. \<forall>c\<ge>0. (c *\<^sub>R x) \<in> s)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   939
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   940
lemma cone_empty[intro, simp]: "cone {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   941
  unfolding cone_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   942
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   943
lemma cone_univ[intro, simp]: "cone UNIV"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   944
  unfolding cone_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   945
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   946
lemma cone_Inter[intro]: "(\<forall>s\<in>f. cone s) \<Longrightarrow> cone(\<Inter> f)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   947
  unfolding cone_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   948
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   949
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
   950
subsubsection {* Conic hull *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   951
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   952
lemma cone_cone_hull: "cone (cone hull s)"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
   953
  unfolding hull_def by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   954
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   955
lemma cone_hull_eq: "(cone hull s = s) \<longleftrightarrow> cone s"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   956
  apply (rule hull_eq)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   957
  using cone_Inter unfolding subset_eq apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   958
  done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
   959
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   960
lemma mem_cone:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   961
  assumes "cone S" "x : S" "c>=0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   962
  shows "c *\<^sub>R x : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   963
  using assms cone_def[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   964
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   965
lemma cone_contains_0:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   966
  assumes "cone S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   967
  shows "(S ~= {}) <-> (0 : S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   968
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   969
  { assume "S ~= {}" then obtain a where "a:S" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   970
    then have "0 : S" using assms mem_cone[of S a 0] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   971
  }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   972
  then show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   973
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   974
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
   975
lemma cone_0: "cone {0}"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   976
  unfolding cone_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   977
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   978
lemma cone_Union[intro]: "(!s:f. cone s) --> (cone (Union f))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   979
  unfolding cone_def by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   980
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
   981
lemma cone_iff:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   982
  assumes "S ~= {}"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   983
  shows "cone S <-> 0:S & (!c. c>0 --> ((op *\<^sub>R c) ` S) = S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   984
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   985
  { assume "cone S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   986
    { fix c
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   987
      assume "(c :: real) > 0"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   988
      { fix x
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   989
        assume "x : S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   990
        then have "x : (op *\<^sub>R c) ` S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   991
          unfolding image_def
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   992
          using `cone S` `c>0` mem_cone[of S x "1/c"]
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   993
            exI[of "(%t. t:S & x = c *\<^sub>R t)" "(1 / c) *\<^sub>R x"] apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   994
          done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   995
      }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   996
      moreover
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   997
      { fix x assume "x : (op *\<^sub>R c) ` S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   998
        (*from this obtain t where "t:S & x = c *\<^sub>R t" by auto*)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
   999
        then have "x:S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1000
          using `cone S` `c>0` unfolding cone_def image_def `c>0` by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1001
      }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1002
      ultimately have "((op *\<^sub>R c) ` S) = S" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1003
    }
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1004
    then have "0:S & (!c. c>0 --> ((op *\<^sub>R c) ` S) = S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1005
      using `cone S` cone_contains_0[of S] assms by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1006
  }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1007
  moreover
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1008
  { assume a: "0:S & (!c. c>0 --> ((op *\<^sub>R c) ` S) = S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1009
    { fix x assume "x:S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1010
      fix c1
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1011
      assume "(c1 :: real) >= 0"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1012
      then have "(c1=0) | (c1>0)" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1013
      then have "c1 *\<^sub>R x : S" using a `x:S` by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1014
    }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1015
    then have "cone S" unfolding cone_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1016
  }
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1017
  ultimately show ?thesis by blast
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1018
qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1019
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1020
lemma cone_hull_empty: "cone hull {} = {}"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1021
  by (metis cone_empty cone_hull_eq)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1022
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1023
lemma cone_hull_empty_iff: "(S = {}) <-> (cone hull S = {})"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1024
  by (metis bot_least cone_hull_empty hull_subset xtrans(5))
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1025
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1026
lemma cone_hull_contains_0: "(S ~= {}) <-> (0 : cone hull S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1027
  using cone_cone_hull[of S] cone_contains_0[of "cone hull S"] cone_hull_empty_iff[of S]
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1028
  by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1029
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1030
lemma mem_cone_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1031
  assumes "x : S" "c>=0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1032
  shows "c *\<^sub>R x : cone hull S"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1033
  by (metis assms cone_cone_hull hull_inc mem_cone)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1034
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1035
lemma cone_hull_expl: "cone hull S = {c *\<^sub>R x | c x. c>=0 & x : S}" (is "?lhs = ?rhs")
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1036
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1037
  { fix x
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1038
    assume "x : ?rhs"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1039
    then obtain cx xx where x_def: "x= cx *\<^sub>R xx & (cx :: real)>=0 & xx : S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1040
      by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1041
    fix c
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1042
    assume c_def: "(c :: real) >= 0"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1043
    then have "c *\<^sub>R x = (c*cx) *\<^sub>R xx"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1044
      using x_def by (simp add: algebra_simps)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1045
    moreover
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1046
    have "(c*cx) >= 0"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1047
      using c_def x_def using mult_nonneg_nonneg by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1048
    ultimately
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1049
    have "c *\<^sub>R x : ?rhs" using x_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1050
  } then have "cone ?rhs" unfolding cone_def by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1051
  then have "?rhs : Collect cone" unfolding mem_Collect_eq by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1052
  { fix x
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1053
    assume "x : S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1054
    then have "1 *\<^sub>R x : ?rhs"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1055
      apply auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1056
      apply (rule_tac x="1" in exI)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1057
      apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1058
      done
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1059
    then have "x : ?rhs" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1060
  } then have "S <= ?rhs" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1061
  then have "?lhs <= ?rhs"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1062
    using `?rhs : Collect cone` hull_minimal[of S "?rhs" "cone"] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1063
  moreover
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1064
  { fix x
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1065
    assume "x : ?rhs"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1066
    then obtain cx xx where x_def: "x= cx *\<^sub>R xx & (cx :: real)>=0 & xx : S" by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1067
    then have "xx : cone hull S" using hull_subset[of S] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1068
    then have "x : ?lhs"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1069
      using x_def cone_cone_hull[of S] cone_def[of "cone hull S"] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1070
  }
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1071
  ultimately show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1072
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1073
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1074
lemma cone_closure:
44524
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
  1075
  fixes S :: "('a::real_normed_vector) set"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1076
  assumes "cone S"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1077
  shows "cone (closure S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1078
proof (cases "S = {}")
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1079
  case True
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1080
  then show ?thesis by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1081
next
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1082
  case False
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1083
  then have "0:S & (!c. c>0 --> op *\<^sub>R c ` S = S)"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1084
    using cone_iff[of S] assms by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1085
  then have "0:(closure S) & (!c. c>0 --> op *\<^sub>R c ` (closure S) = (closure S))"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1086
    using closure_subset by (auto simp add: closure_scaleR)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1087
  then show ?thesis using cone_iff[of "closure S"] by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1088
qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1089
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1090
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1091
subsection {* Affine dependence and consequential theorems (from Lars Schewe) *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1092
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1093
definition affine_dependent :: "'a::real_vector set \<Rightarrow> bool"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1094
  where "affine_dependent s \<longleftrightarrow> (\<exists>x\<in>s. x \<in> (affine hull (s - {x})))"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1095
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1096
lemma affine_dependent_explicit:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1097
  "affine_dependent p \<longleftrightarrow>
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1098
    (\<exists>s u. finite s \<and> s \<subseteq> p \<and> setsum u s = 0 \<and>
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1099
    (\<exists>v\<in>s. u v \<noteq> 0) \<and> setsum (\<lambda>v. u v *\<^sub>R v) s = 0)"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1100
  unfolding affine_dependent_def affine_hull_explicit mem_Collect_eq
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1101
  apply rule
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1102
  apply (erule bexE, erule exE, erule exE)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1103
  apply (erule conjE)+
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1104
  defer
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1105
  apply (erule exE, erule exE)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1106
  apply (erule conjE)+
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1107
  apply (erule bexE)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1108
proof -
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1109
  fix x s u
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1110
  assume as: "x \<in> p" "finite s" "s \<noteq> {}" "s \<subseteq> p - {x}" "setsum u s = 1" "(\<Sum>v\<in>s. u v *\<^sub>R v) = x"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1111
  have "x\<notin>s" using as(1,4) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1112
  show "\<exists>s u. finite s \<and> s \<subseteq> p \<and> setsum u s = 0 \<and> (\<exists>v\<in>s. u v \<noteq> 0) \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = 0"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1113
    apply (rule_tac x="insert x s" in exI, rule_tac x="\<lambda>v. if v = x then - 1 else u v" in exI)
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1114
    unfolding if_smult and setsum_clauses(2)[OF as(2)] and setsum_delta_notmem[OF `x\<notin>s`] and as
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1115
    using as apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1116
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1117
next
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1118
  fix s u v
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1119
  assume as:"finite s" "s \<subseteq> p" "setsum u s = 0" "(\<Sum>v\<in>s. u v *\<^sub>R v) = 0" "v \<in> s" "u v \<noteq> 0"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1120
  have "s \<noteq> {v}" using as(3,6) by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1121
  then show "\<exists>x\<in>p. \<exists>s u. finite s \<and> s \<noteq> {} \<and> s \<subseteq> p - {x} \<and> setsum u s = 1 \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = x"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1122
    apply (rule_tac x=v in bexI, rule_tac x="s - {v}" in exI,
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1123
      rule_tac x="\<lambda>x. - (1 / u v) * u x" in exI)
49530
wenzelm
parents: 49529
diff changeset
  1124
    unfolding scaleR_scaleR[symmetric] and scaleR_right.setsum [symmetric]
wenzelm
parents: 49529
diff changeset
  1125
    unfolding setsum_right_distrib[symmetric] and setsum_diff1[OF as(1)]
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1126
    using as apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1127
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1128
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1129
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1130
lemma affine_dependent_explicit_finite:
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1131
  fixes s :: "'a::real_vector set"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1132
  assumes "finite s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1133
  shows "affine_dependent s \<longleftrightarrow> (\<exists>u. setsum u s = 0 \<and> (\<exists>v\<in>s. u v \<noteq> 0) \<and> setsum (\<lambda>v. u v *\<^sub>R v) s = 0)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1134
  (is "?lhs = ?rhs")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1135
proof
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1136
  have *: "\<And>vt u v. (if vt then u v else 0) *\<^sub>R v = (if vt then (u v) *\<^sub>R v else (0::'a))"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1137
    by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1138
  assume ?lhs
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1139
  then obtain t u v where
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1140
      "finite t" "t \<subseteq> s" "setsum u t = 0" "v\<in>t" "u v \<noteq> 0"  "(\<Sum>v\<in>t. u v *\<^sub>R v) = 0"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1141
    unfolding affine_dependent_explicit by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1142
  then show ?rhs
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1143
    apply (rule_tac x="\<lambda>x. if x\<in>t then u x else 0" in exI)
49530
wenzelm
parents: 49529
diff changeset
  1144
    apply auto unfolding * and setsum_restrict_set[OF assms, symmetric]
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1145
    unfolding Int_absorb1[OF `t\<subseteq>s`]
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1146
    apply auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1147
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1148
next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1149
  assume ?rhs
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1150
  then obtain u v where "setsum u s = 0"  "v\<in>s" "u v \<noteq> 0" "(\<Sum>v\<in>s. u v *\<^sub>R v) = 0" by auto
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1151
  then show ?lhs unfolding affine_dependent_explicit
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1152
    using assms by auto
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1153
qed
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1154
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1155
44465
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1156
subsection {* Connectedness of convex sets *}
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1157
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1158
lemma connected_real_lemma:
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1159
  fixes f :: "real \<Rightarrow> 'a::metric_space"
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1160
  assumes ab: "a \<le> b" and fa: "f a \<in> e1" and fb: "f b \<in> e2"
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1161
    and dst: "\<And>e x. a <= x \<Longrightarrow> x <= b \<Longrightarrow> 0 < e ==> \<exists>d > 0. \<forall>y. abs(y - x) < d \<longrightarrow> dist(f y) (f x) < e"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1162
    and e1: "\<forall>y \<in> e1. \<exists>e > 0. \<forall>y'. dist y' y < e \<longrightarrow> y' \<in> e1"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1163
    and e2: "\<forall>y \<in> e2. \<exists>e > 0. \<forall>y'. dist y' y < e \<longrightarrow> y' \<in> e2"
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1164
    and e12: "~(\<exists>x \<ge> a. x <= b \<and> f x \<in> e1 \<and> f x \<in> e2)"
44465
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1165
  shows "\<exists>x \<ge> a. x <= b \<and> f x \<notin> e1 \<and> f x \<notin> e2" (is "\<exists> x. ?P x")
49529
d523702bdae7 tuned proofs;
wenzelm
parents: 47445
diff changeset
  1166
proof -
44465
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1167
  let ?S = "{c. \<forall>x \<ge> a. x <= c \<longrightarrow> f x \<in> e1}"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1168
  have Se: " \<exists>x. x \<in> ?S"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1169
    apply (rule exI[where x=a])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1170
    apply (auto simp add: fa)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1171
    done
44465
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1172
  have Sub: "\<exists>y. isUb UNIV ?S y"
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1173
    apply (rule exI[where x= b])
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1174
    using ab fb e12 apply (auto simp add: isUb_def setle_def)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1175
    done
44465
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1176
  from reals_complete[OF Se Sub] obtain l where
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1177
    l: "isLub UNIV ?S l"by blast
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1178
  have alb: "a \<le> l" "l \<le> b" using l ab fa fb e12
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1179
    apply (auto simp add: isLub_def leastP_def isUb_def setle_def setge_def)
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1180
    apply (metis linorder_linear)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1181
    done
44465
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1182
  have ale1: "\<forall>z \<ge> a. z < l \<longrightarrow> f z \<in> e1" using l
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1183
    apply (auto simp add: isLub_def leastP_def isUb_def setle_def setge_def)
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1184
    apply (metis linorder_linear not_le)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1185
    done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1186
  have th1: "\<And>z x e d :: real. z <= x + e \<Longrightarrow> e < d ==> z < x \<or> abs(z - x) < d" by arith
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1187
  have th2: "\<And>e x:: real. 0 < e ==> ~(x + e <= x)" by arith
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1188
  have "\<And>d::real. 0 < d \<Longrightarrow> 0 < d/2 \<and> d/2 < d" by simp
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1189
  then have th3: "\<And>d::real. d > 0 \<Longrightarrow> \<exists>e > 0. e < d" by blast
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1190
  { assume le2: "f l \<in> e2"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1191
    from le2 fa fb e12 alb have la: "l \<noteq> a" by metis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1192
    then have lap: "l - a > 0" using alb by arith
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1193
    from e2[rule_format, OF le2] obtain e where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1194
      e: "e > 0" "\<forall>y. dist y (f l) < e \<longrightarrow> y \<in> e2" by metis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1195
    from dst[OF alb e(1)] obtain d where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1196
      d: "d > 0" "\<forall>y. \<bar>y - l\<bar> < d \<longrightarrow> dist (f y) (f l) < e" by metis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1197
    let ?d' = "min (d/2) ((l - a)/2)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1198
    have "?d' < d \<and> 0 < ?d' \<and> ?d' < l - a" using lap d(1)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1199
      by (simp add: min_max.less_infI2)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1200
    then have "\<exists>d'. d' < d \<and> d' >0 \<and> l - d' > a" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1201
    then obtain d' where d': "d' > 0" "d' < d" "l - d' > a" by metis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1202
    from d e have th0: "\<forall>y. \<bar>y - l\<bar> < d \<longrightarrow> f y \<in> e2" by metis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1203
    from th0[rule_format, of "l - d'"] d' have "f (l - d') \<in> e2" by auto
44465
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1204
    moreover
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1205
    have "f (l - d') \<in> e1" using ale1[rule_format, of "l -d'"] d' by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1206
    ultimately have False using e12 alb d' by auto }
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1207
  moreover
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1208
  { assume le1: "f l \<in> e1"
44465
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1209
    from le1 fa fb e12 alb have lb: "l \<noteq> b" by metis
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1210
    then have blp: "b - l > 0" using alb by arith
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1211
    from e1[rule_format, OF le1] obtain e where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1212
      e: "e > 0" "\<forall>y. dist y (f l) < e \<longrightarrow> y \<in> e1" by metis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1213
    from dst[OF alb e(1)] obtain d where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1214
      d: "d > 0" "\<forall>y. \<bar>y - l\<bar> < d \<longrightarrow> dist (f y) (f l) < e" by metis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1215
    have "\<And>d::real. 0 < d \<Longrightarrow> d/2 < d \<and> 0 < d/2" by simp
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1216
    then have "\<exists>d'. d' < d \<and> d' >0" using d(1) by blast
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1217
    then obtain d' where d': "d' > 0" "d' < d" by metis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1218
    from d e have th0: "\<forall>y. \<bar>y - l\<bar> < d \<longrightarrow> f y \<in> e1" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1219
    then have "\<forall>y. l \<le> y \<and> y \<le> l + d' \<longrightarrow> f y \<in> e1" using d' by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1220
    with ale1 have "\<forall>y. a \<le> y \<and> y \<le> l + d' \<longrightarrow> f y \<in> e1" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1221
    with l d' have False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1222
      by (auto simp add: isLub_def isUb_def setle_def setge_def leastP_def) }
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1223
  ultimately show ?thesis using alb by metis
44465
fa56622bb7bc move connected_real_lemma to the one place it is used
huffman
parents: 44457
diff changeset
  1224
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1225
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1226
lemma convex_connected:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1227
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1228
  assumes "convex s" shows "connected s"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1229
proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1230
  { fix e1 e2
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1231
    assume as:"open e1" "open e2" "e1 \<inter> e2 \<inter> s = {}" "s \<subseteq> e1 \<union> e2"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1232
    assume "e1 \<inter> s \<noteq> {}" "e2 \<inter> s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1233
    then obtain x1 x2 where x1:"x1\<in>e1" "x1\<in>s" and x2:"x2\<in>e2" "x2\<in>s" by auto
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1234
    then have n: "norm (x1 - x2) > 0" unfolding zero_less_norm_iff using as(3) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1235
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1236
    { fix x e::real assume as:"0 \<le> x" "x \<le> 1" "0 < e"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1237
      { fix y
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1238
        have *: "(1 - x) *\<^sub>R x1 + x *\<^sub>R x2 - ((1 - y) *\<^sub>R x1 + y *\<^sub>R x2) = (y - x) *\<^sub>R x1 - (y - x) *\<^sub>R x2"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1239
          by (simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1240
        assume "\<bar>y - x\<bar> < e / norm (x1 - x2)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1241
        hence "norm ((1 - x) *\<^sub>R x1 + x *\<^sub>R x2 - ((1 - y) *\<^sub>R x1 + y *\<^sub>R x2)) < e"
49530
wenzelm
parents: 49529
diff changeset
  1242
          unfolding * and scaleR_right_diff_distrib[symmetric]
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1243
          unfolding less_divide_eq using n by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1244
      }
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1245
      then have "\<exists>d>0. \<forall>y. \<bar>y - x\<bar> < d \<longrightarrow> norm ((1 - x) *\<^sub>R x1 + x *\<^sub>R x2 - ((1 - y) *\<^sub>R x1 + y *\<^sub>R x2)) < e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1246
        apply (rule_tac x="e / norm (x1 - x2)" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1247
        using as
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1248
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1249
        unfolding zero_less_divide_iff
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1250
        using n apply simp
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1251
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1252
    } note * = this
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1253
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1254
    have "\<exists>x\<ge>0. x \<le> 1 \<and> (1 - x) *\<^sub>R x1 + x *\<^sub>R x2 \<notin> e1 \<and> (1 - x) *\<^sub>R x1 + x *\<^sub>R x2 \<notin> e2"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1255
      apply (rule connected_real_lemma)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1256
      apply (simp add: `x1\<in>e1` `x2\<in>e2` dist_commute)+
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1257
      using * apply (simp add: dist_norm)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1258
      using as(1,2)[unfolded open_dist] apply simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1259
      using as(1,2)[unfolded open_dist] apply simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1260
      using assms[unfolded convex_alt, THEN bspec[where x=x1], THEN bspec[where x=x2]] using x1 x2
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1261
      using as(3) apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1262
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1263
    then obtain x where "x\<ge>0" "x\<le>1" "(1 - x) *\<^sub>R x1 + x *\<^sub>R x2 \<notin> e1"  "(1 - x) *\<^sub>R x1 + x *\<^sub>R x2 \<notin> e2"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1264
      by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1265
    then have False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1266
      using as(4)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1267
      using assms[unfolded convex_alt, THEN bspec[where x=x1], THEN bspec[where x=x2]]
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1268
      using x1(2) x2(2) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1269
    }
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1270
  then show ?thesis unfolding connected_def by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1271
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1272
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1273
text {* One rather trivial consequence. *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1274
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  1275
lemma connected_UNIV[intro]: "connected (UNIV :: 'a::real_normed_vector set)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1276
  by(simp add: convex_connected convex_UNIV)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1277
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1278
text {* Balls, being convex, are connected. *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1279
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1280
lemma convex_box: fixes a::"'a::euclidean_space"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  1281
  assumes "\<And>i. i\<in>Basis \<Longrightarrow> convex {x. P i x}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  1282
  shows "convex {x. \<forall>i\<in>Basis. P i (x\<bullet>i)}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  1283
  using assms unfolding convex_def
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  1284
  by (auto simp: inner_add_left)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  1285
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  1286
lemma convex_positive_orthant: "convex {x::'a::euclidean_space. (\<forall>i\<in>Basis. 0 \<le> x\<bullet>i)}"
36623
d26348b667f2 Moved Convex theory to library.
hoelzl
parents: 36590
diff changeset
  1287
  by (rule convex_box) (simp add: atLeast_def[symmetric] convex_real_interval)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1288
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1289
lemma convex_local_global_minimum:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1290
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1291
  assumes "0<e" "convex_on s f" "ball x e \<subseteq> s" "\<forall>y\<in>ball x e. f x \<le> f y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1292
  shows "\<forall>y\<in>s. f x \<le> f y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1293
proof(rule ccontr)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1294
  have "x\<in>s" using assms(1,3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1295
  assume "\<not> (\<forall>y\<in>s. f x \<le> f y)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1296
  then obtain y where "y\<in>s" and y:"f x > f y" by auto
49530
wenzelm
parents: 49529
diff changeset
  1297
  hence xy:"0 < dist x y" by (auto simp add: dist_nz[symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1298
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1299
  then obtain u where "0 < u" "u \<le> 1" and u:"u < e / dist x y"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1300
    using real_lbound_gt_zero[of 1 "e / dist x y"]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1301
    using xy `e>0` and divide_pos_pos[of e "dist x y"] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1302
  hence "f ((1-u) *\<^sub>R x + u *\<^sub>R y) \<le> (1-u) * f x + u * f y" using `x\<in>s` `y\<in>s`
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1303
    using assms(2)[unfolded convex_on_def, THEN bspec[where x=x], THEN bspec[where x=y], THEN spec[where x="1-u"]]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1304
    by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1305
  moreover
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1306
  have *: "x - ((1 - u) *\<^sub>R x + u *\<^sub>R y) = u *\<^sub>R (x - y)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1307
    by (simp add: algebra_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1308
  have "(1 - u) *\<^sub>R x + u *\<^sub>R y \<in> ball x e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1309
    unfolding mem_ball dist_norm unfolding * and norm_scaleR and abs_of_pos[OF `0<u`]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1310
    unfolding dist_norm[symmetric]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1311
    using u unfolding pos_less_divide_eq[OF xy] by auto
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1312
  then have "f x \<le> f ((1 - u) *\<^sub>R x + u *\<^sub>R y)" using assms(4) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1313
  ultimately show False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1314
    using mult_strict_left_mono[OF y `u>0`] unfolding left_diff_distrib by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1315
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1316
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1317
lemma convex_ball:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1318
  fixes x :: "'a::real_normed_vector"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1319
  shows "convex (ball x e)"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1320
proof (auto simp add: convex_def)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1321
  fix y z
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1322
  assume yz: "dist x y < e" "dist x z < e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1323
  fix u v :: real
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1324
  assume uv: "0 \<le> u" "0 \<le> v" "u + v = 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1325
  have "dist x (u *\<^sub>R y + v *\<^sub>R z) \<le> u * dist x y + v * dist x z"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1326
    using uv yz
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1327
    using convex_distance[of "ball x e" x, unfolded convex_on_def, THEN bspec[where x=y], THEN bspec[where x=z]]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1328
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1329
  then show "dist x (u *\<^sub>R y + v *\<^sub>R z) < e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1330
    using convex_bound_lt[OF yz uv] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1331
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1332
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1333
lemma convex_cball:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1334
  fixes x :: "'a::real_normed_vector"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1335
  shows "convex(cball x e)"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1336
proof (auto simp add: convex_def Ball_def)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1337
  fix y z
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1338
  assume yz: "dist x y \<le> e" "dist x z \<le> e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1339
  fix u v :: real
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1340
  assume uv: "0 \<le> u" "0 \<le> v" "u + v = 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1341
  have "dist x (u *\<^sub>R y + v *\<^sub>R z) \<le> u * dist x y + v * dist x z"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1342
    using uv yz
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1343
    using convex_distance[of "cball x e" x, unfolded convex_on_def, THEN bspec[where x=y], THEN bspec[where x=z]]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1344
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1345
  then show "dist x (u *\<^sub>R y + v *\<^sub>R z) \<le> e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1346
    using convex_bound_le[OF yz uv] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1347
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1348
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1349
lemma connected_ball:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1350
  fixes x :: "'a::real_normed_vector"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1351
  shows "connected (ball x e)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1352
  using convex_connected convex_ball by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1353
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1354
lemma connected_cball:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1355
  fixes x :: "'a::real_normed_vector"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1356
  shows "connected(cball x e)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1357
  using convex_connected convex_cball by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1358
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1359
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1360
subsection {* Convex hull *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1361
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1362
lemma convex_convex_hull: "convex(convex hull s)"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1363
  unfolding hull_def using convex_Inter[of "{t. convex t \<and> s \<subseteq> t}"]
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1364
  by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1365
34064
eee04bbbae7e avoid dependency on implicit dest rule predicate1D in proofs
haftmann
parents: 33758
diff changeset
  1366
lemma convex_hull_eq: "convex hull s = s \<longleftrightarrow> convex s"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1367
  by (metis convex_convex_hull hull_same)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1368
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1369
lemma bounded_convex_hull:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1370
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1371
  assumes "bounded s" shows "bounded(convex hull s)"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1372
proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1373
  from assms obtain B where B: "\<forall>x\<in>s. norm x \<le> B"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1374
    unfolding bounded_iff by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1375
  show ?thesis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1376
    apply (rule bounded_subset[OF bounded_cball, of _ 0 B])
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1377
    unfolding subset_hull[of convex, OF convex_cball]
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1378
    unfolding subset_eq mem_cball dist_norm using B apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1379
    done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1380
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1381
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1382
lemma finite_imp_bounded_convex_hull:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1383
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1384
  shows "finite s \<Longrightarrow> bounded(convex hull s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1385
  using bounded_convex_hull finite_imp_bounded by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1386
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1387
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1388
subsubsection {* Convex hull is "preserved" by a linear function *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1389
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1390
lemma convex_hull_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1391
  assumes "bounded_linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1392
  shows "f ` (convex hull s) = convex hull (f ` s)"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1393
  apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1394
  unfolding subset_eq ball_simps
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1395
  apply (rule_tac[!] hull_induct, rule hull_inc)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1396
  prefer 3
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1397
  apply (erule imageE)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1398
  apply (rule_tac x=xa in image_eqI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1399
  apply assumption
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1400
  apply (rule hull_subset[unfolded subset_eq, rule_format])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1401
  apply assumption
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1402
proof -
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1403
  interpret f: bounded_linear f by fact
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1404
  show "convex {x. f x \<in> convex hull f ` s}"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1405
    unfolding convex_def
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1406
    by (auto simp add: f.scaleR f.add convex_convex_hull[unfolded convex_def, rule_format])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1407
next
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1408
  interpret f: bounded_linear f by fact
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1409
  show "convex {x. x \<in> f ` (convex hull s)}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1410
    using  convex_convex_hull[unfolded convex_def, of s]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1411
    unfolding convex_def by (auto simp add: f.scaleR [symmetric] f.add [symmetric])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1412
qed auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1413
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1414
lemma in_convex_hull_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1415
  assumes "bounded_linear f" "x \<in> convex hull s"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1416
  shows "(f x) \<in> convex hull (f ` s)"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1417
  using convex_hull_linear_image[OF assms(1)] assms(2) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1418
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1419
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1420
subsubsection {* Stepping theorems for convex hulls of finite sets *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1421
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1422
lemma convex_hull_empty[simp]: "convex hull {} = {}"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1423
  by (rule hull_unique) auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1424
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1425
lemma convex_hull_singleton[simp]: "convex hull {a} = {a}"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1426
  by (rule hull_unique) auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1427
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1428
lemma convex_hull_insert:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1429
  fixes s :: "'a::real_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1430
  assumes "s \<noteq> {}"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1431
  shows "convex hull (insert a s) =
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1432
    {x. \<exists>u\<ge>0. \<exists>v\<ge>0. \<exists>b. (u + v = 1) \<and> b \<in> (convex hull s) \<and> (x = u *\<^sub>R a + v *\<^sub>R b)}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1433
  (is "?xyz = ?hull")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1434
  apply (rule, rule hull_minimal, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1435
  unfolding insert_iff
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1436
  prefer 3
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1437
  apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1438
proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1439
  fix x
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1440
  assume x: "x = a \<or> x \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1441
  then show "x \<in> ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1442
    apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1443
    unfolding mem_Collect_eq
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1444
    apply (rule_tac x=1 in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1445
    defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1446
    apply (rule_tac x=0 in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1447
    using assms hull_subset[of s convex]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1448
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1449
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1450
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1451
  fix x
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1452
  assume "x \<in> ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1453
  then obtain u v b where obt: "u\<ge>0" "v\<ge>0" "u + v = 1" "b \<in> convex hull s" "x = u *\<^sub>R a + v *\<^sub>R b"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1454
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1455
  have "a \<in> convex hull insert a s" "b\<in>convex hull insert a s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1456
    using hull_mono[of s "insert a s" convex] hull_mono[of "{a}" "insert a s" convex] and obt(4)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1457
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1458
  then show "x \<in> convex hull insert a s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1459
    unfolding obt(5)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1460
    using convex_convex_hull[of "insert a s", unfolded convex_def]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1461
    apply (erule_tac x = a in ballE)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1462
    apply (erule_tac x = b in ballE)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1463
    apply (erule_tac x = u in allE)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1464
    using obt apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1465
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1466
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1467
  show "convex ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1468
    unfolding convex_def
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1469
    apply (rule, rule, rule, rule, rule, rule, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1470
  proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1471
    fix x y u v
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1472
    assume as: "(0::real) \<le> u" "0 \<le> v" "u + v = 1" "x\<in>?hull" "y\<in>?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1473
    from as(4) obtain u1 v1 b1
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1474
      where obt1: "u1\<ge>0" "v1\<ge>0" "u1 + v1 = 1" "b1 \<in> convex hull s" "x = u1 *\<^sub>R a + v1 *\<^sub>R b1" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1475
    from as(5) obtain u2 v2 b2
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1476
      where obt2: "u2\<ge>0" "v2\<ge>0" "u2 + v2 = 1" "b2 \<in> convex hull s" "y = u2 *\<^sub>R a + v2 *\<^sub>R b2" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1477
    have *: "\<And>(x::'a) s1 s2. x - s1 *\<^sub>R x - s2 *\<^sub>R x = ((1::real) - (s1 + s2)) *\<^sub>R x"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1478
      by (auto simp add: algebra_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1479
    have **: "\<exists>b \<in> convex hull s. u *\<^sub>R x + v *\<^sub>R y =
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1480
      (u * u1) *\<^sub>R a + (v * u2) *\<^sub>R a + (b - (u * u1) *\<^sub>R b - (v * u2) *\<^sub>R b)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1481
    proof (cases "u * v1 + v * v2 = 0")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1482
      case True
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1483
      have *: "\<And>(x::'a) s1 s2. x - s1 *\<^sub>R x - s2 *\<^sub>R x = ((1::real) - (s1 + s2)) *\<^sub>R x"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1484
        by (auto simp add: algebra_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1485
      from True have ***: "u * v1 = 0" "v * v2 = 0"
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  1486
        using mult_nonneg_nonneg[OF `u\<ge>0` `v1\<ge>0`] mult_nonneg_nonneg[OF `v\<ge>0` `v2\<ge>0`] by arith+
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1487
      then have "u * u1 + v * u2 = 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1488
        using as(3) obt1(3) obt2(3) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1489
      then show ?thesis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1490
        unfolding obt1(5) obt2(5) *
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1491
        using assms hull_subset[of s convex]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1492
        by (auto simp add: *** scaleR_right_distrib)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1493
    next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1494
      case False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1495
      have "1 - (u * u1 + v * u2) = (u + v) - (u * u1 + v * u2)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1496
        using as(3) obt1(3) obt2(3) by (auto simp add: field_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1497
      also have "\<dots> = u * (v1 + u1 - u1) + v * (v2 + u2 - u2)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1498
        using as(3) obt1(3) obt2(3) by (auto simp add: field_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1499
      also have "\<dots> = u * v1 + v * v2"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1500
        by simp
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1501
      finally have **:"1 - (u * u1 + v * u2) = u * v1 + v * v2" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1502
      have "0 \<le> u * v1 + v * v2" "0 \<le> u * v1" "0 \<le> u * v1 + v * v2" "0 \<le> v * v2"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1503
        apply (rule add_nonneg_nonneg)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1504
        prefer 4
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1505
        apply (rule add_nonneg_nonneg)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1506
        apply (rule_tac [!] mult_nonneg_nonneg)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1507
        using as(1,2) obt1(1,2) obt2(1,2) apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1508
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1509
      then show ?thesis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1510
        unfolding obt1(5) obt2(5)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1511
        unfolding * and **
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1512
        using False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1513
        apply (rule_tac x = "((u * v1) / (u * v1 + v * v2)) *\<^sub>R b1 + ((v * v2) / (u * v1 + v * v2)) *\<^sub>R b2" in bexI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1514
        defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1515
        apply (rule convex_convex_hull[of s, unfolded convex_def, rule_format])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1516
        using obt1(4) obt2(4)
49530
wenzelm
parents: 49529
diff changeset
  1517
        unfolding add_divide_distrib[symmetric] and zero_le_divide_iff
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1518
        apply (auto simp add: scaleR_left_distrib scaleR_right_distrib)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1519
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1520
    qed
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1521
    have u1: "u1 \<le> 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1522
      unfolding obt1(3)[symmetric] and not_le using obt1(2) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1523
    have u2: "u2 \<le> 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1524
      unfolding obt2(3)[symmetric] and not_le using obt2(2) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1525
    have "u1 * u + u2 * v \<le> (max u1 u2) * u + (max u1 u2) * v"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1526
      apply (rule add_mono)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1527
      apply (rule_tac [!] mult_right_mono)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1528
      using as(1,2) obt1(1,2) obt2(1,2)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1529
      apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1530
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1531
    also have "\<dots> \<le> 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1532
      unfolding distrib_left[symmetric] and as(3) using u1 u2 by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1533
    finally show "u *\<^sub>R x + v *\<^sub>R y \<in> ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1534
      unfolding mem_Collect_eq
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1535
      apply (rule_tac x="u * u1 + v * u2" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1536
      apply (rule conjI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1537
      defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1538
      apply (rule_tac x="1 - u * u1 - v * u2" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1539
      unfolding Bex_def
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1540
      using as(1,2) obt1(1,2) obt2(1,2) **
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1541
      apply (auto intro!: mult_nonneg_nonneg add_nonneg_nonneg simp add: algebra_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1542
      done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1543
  qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1544
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1545
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1546
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1547
subsubsection {* Explicit expression for convex hull *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1548
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1549
lemma convex_hull_indexed:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1550
  fixes s :: "'a::real_vector set"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1551
  shows "convex hull s =
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1552
    {y. \<exists>k u x. (\<forall>i\<in>{1::nat .. k}. 0 \<le> u i \<and> x i \<in> s) \<and>
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1553
        (setsum u {1..k} = 1) \<and>
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1554
        (setsum (\<lambda>i. u i *\<^sub>R x i) {1..k} = y)}" (is "?xyz = ?hull")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1555
  apply (rule hull_unique)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1556
  apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1557
  defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1558
  apply (subst convex_def)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1559
  apply (rule, rule, rule, rule, rule, rule, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1560
proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1561
  fix x
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1562
  assume "x\<in>s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1563
  then show "x \<in> ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1564
    unfolding mem_Collect_eq
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1565
    apply (rule_tac x=1 in exI, rule_tac x="\<lambda>x. 1" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1566
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1567
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1568
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1569
  fix t
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1570
  assume as: "s \<subseteq> t" "convex t"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1571
  show "?hull \<subseteq> t"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1572
    apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1573
    unfolding mem_Collect_eq
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1574
    apply (erule exE | erule conjE)+
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1575
  proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1576
    fix x k u y
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1577
    assume assm:
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1578
      "\<forall>i\<in>{1::nat..k}. 0 \<le> u i \<and> y i \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1579
      "setsum u {1..k} = 1" "(\<Sum>i = 1..k. u i *\<^sub>R y i) = x"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1580
    show "x\<in>t"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1581
      unfolding assm(3) [symmetric]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1582
      apply (rule as(2)[unfolded convex, rule_format])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1583
      using assm(1,2) as(1) apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1584
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1585
  qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1586
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1587
  fix x y u v
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1588
  assume uv: "0\<le>u" "0\<le>v" "u + v = (1::real)" and xy: "x\<in>?hull" "y\<in>?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1589
  from xy obtain k1 u1 x1 where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1590
      x: "\<forall>i\<in>{1::nat..k1}. 0\<le>u1 i \<and> x1 i \<in> s" "setsum u1 {Suc 0..k1} = 1" "(\<Sum>i = Suc 0..k1. u1 i *\<^sub>R x1 i) = x"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1591
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1592
  from xy obtain k2 u2 x2 where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1593
      y: "\<forall>i\<in>{1::nat..k2}. 0\<le>u2 i \<and> x2 i \<in> s" "setsum u2 {Suc 0..k2} = 1" "(\<Sum>i = Suc 0..k2. u2 i *\<^sub>R x2 i) = y"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1594
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1595
  have *: "\<And>P (x1::'a) x2 s1 s2 i.
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1596
    (if P i then s1 else s2) *\<^sub>R (if P i then x1 else x2) = (if P i then s1 *\<^sub>R x1 else s2 *\<^sub>R x2)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1597
    "{1..k1 + k2} \<inter> {1..k1} = {1..k1}" "{1..k1 + k2} \<inter> - {1..k1} = (\<lambda>i. i + k1) ` {1..k2}"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1598
    prefer 3
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1599
    apply (rule, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1600
    unfolding image_iff
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1601
    apply (rule_tac x = "x - k1" in bexI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1602
    apply (auto simp add: not_le)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1603
    done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1604
  have inj: "inj_on (\<lambda>i. i + k1) {1..k2}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1605
    unfolding inj_on_def by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1606
  show "u *\<^sub>R x + v *\<^sub>R y \<in> ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1607
    apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1608
    apply (rule_tac x="k1 + k2" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1609
    apply (rule_tac x="\<lambda>i. if i \<in> {1..k1} then u * u1 i else v * u2 (i - k1)" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1610
    apply (rule_tac x="\<lambda>i. if i \<in> {1..k1} then x1 i else x2 (i - k1)" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1611
    apply (rule, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1612
    defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1613
    apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1614
    unfolding * and setsum_cases[OF finite_atLeastAtMost[of 1 "k1 + k2"]] and
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1615
      setsum_reindex[OF inj] and o_def Collect_mem_eq
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1616
    unfolding scaleR_scaleR[symmetric] scaleR_right.setsum [symmetric] setsum_right_distrib[symmetric]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1617
  proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1618
    fix i
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1619
    assume i: "i \<in> {1..k1+k2}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1620
    show "0 \<le> (if i \<in> {1..k1} then u * u1 i else v * u2 (i - k1)) \<and>
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1621
      (if i \<in> {1..k1} then x1 i else x2 (i - k1)) \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1622
    proof (cases "i\<in>{1..k1}")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1623
      case True
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1624
      then show ?thesis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1625
        using mult_nonneg_nonneg[of u "u1 i"] and uv(1) x(1)[THEN bspec[where x=i]] by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1626
    next
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1627
      case False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1628
      def j \<equiv> "i - k1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1629
      from i False have "j \<in> {1..k2}" unfolding j_def by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1630
      then show ?thesis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1631
        unfolding j_def[symmetric]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1632
        using False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1633
        using mult_nonneg_nonneg[of v "u2 j"] and uv(2) y(1)[THEN bspec[where x=j]]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1634
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1635
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1636
    qed
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1637
  qed (auto simp add: not_le x(2,3) y(2,3) uv(3))
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1638
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1639
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1640
lemma convex_hull_finite:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1641
  fixes s :: "'a::real_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1642
  assumes "finite s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1643
  shows "convex hull s = {y. \<exists>u. (\<forall>x\<in>s. 0 \<le> u x) \<and>
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1644
    setsum u s = 1 \<and> setsum (\<lambda>x. u x *\<^sub>R x) s = y}" (is "?HULL = ?set")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1645
proof (rule hull_unique, auto simp add: convex_def[of ?set])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1646
  fix x
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1647
  assume "x \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1648
  then show "\<exists>u. (\<forall>x\<in>s. 0 \<le> u x) \<and> setsum u s = 1 \<and> (\<Sum>x\<in>s. u x *\<^sub>R x) = x"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1649
    apply (rule_tac x="\<lambda>y. if x=y then 1 else 0" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1650
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1651
    unfolding setsum_delta'[OF assms] and setsum_delta''[OF assms]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1652
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1653
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1654
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1655
  fix u v :: real
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1656
  assume uv: "0 \<le> u" "0 \<le> v" "u + v = 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1657
  fix ux assume ux: "\<forall>x\<in>s. 0 \<le> ux x" "setsum ux s = (1::real)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1658
  fix uy assume uy: "\<forall>x\<in>s. 0 \<le> uy x" "setsum uy s = (1::real)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1659
  { fix x
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1660
    assume "x\<in>s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1661
    then have "0 \<le> u * ux x + v * uy x"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1662
      using ux(1)[THEN bspec[where x=x]] uy(1)[THEN bspec[where x=x]] and uv(1,2)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1663
      apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1664
      apply (metis add_nonneg_nonneg mult_nonneg_nonneg uv(1) uv(2))
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1665
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1666
  }
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1667
  moreover
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1668
  have "(\<Sum>x\<in>s. u * ux x + v * uy x) = 1"
49530
wenzelm
parents: 49529
diff changeset
  1669
    unfolding setsum_addf and setsum_right_distrib[symmetric] and ux(2) uy(2) using uv(3) by auto
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1670
  moreover
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1671
  have "(\<Sum>x\<in>s. (u * ux x + v * uy x) *\<^sub>R x) = u *\<^sub>R (\<Sum>x\<in>s. ux x *\<^sub>R x) + v *\<^sub>R (\<Sum>x\<in>s. uy x *\<^sub>R x)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1672
    unfolding scaleR_left_distrib and setsum_addf and scaleR_scaleR[symmetric] and scaleR_right.setsum [symmetric]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1673
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1674
  ultimately
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1675
  show "\<exists>uc. (\<forall>x\<in>s. 0 \<le> uc x) \<and> setsum uc s = 1 \<and>
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1676
      (\<Sum>x\<in>s. uc x *\<^sub>R x) = u *\<^sub>R (\<Sum>x\<in>s. ux x *\<^sub>R x) + v *\<^sub>R (\<Sum>x\<in>s. uy x *\<^sub>R x)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1677
    apply (rule_tac x="\<lambda>x. u * ux x + v * uy x" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1678
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1679
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1680
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1681
  fix t
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1682
  assume t: "s \<subseteq> t" "convex t"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1683
  fix u
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1684
  assume u: "\<forall>x\<in>s. 0 \<le> u x" "setsum u s = (1::real)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1685
  then show "(\<Sum>x\<in>s. u x *\<^sub>R x) \<in> t"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1686
    using t(2)[unfolded convex_explicit, THEN spec[where x=s], THEN spec[where x=u]]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1687
    using assms and t(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1688
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1689
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1690
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1691
subsubsection {* Another formulation from Lars Schewe *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1692
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1693
lemma setsum_constant_scaleR:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1694
  fixes y :: "'a::real_vector"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1695
  shows "(\<Sum>x\<in>A. y) = of_nat (card A) *\<^sub>R y"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1696
  apply (cases "finite A")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1697
  apply (induct set: finite)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1698
  apply (simp_all add: algebra_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1699
  done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1700
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1701
lemma convex_hull_explicit:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1702
  fixes p :: "'a::real_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1703
  shows "convex hull p = {y. \<exists>s u. finite s \<and> s \<subseteq> p \<and>
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1704
    (\<forall>x\<in>s. 0 \<le> u x) \<and> setsum u s = 1 \<and> setsum (\<lambda>v. u v *\<^sub>R v) s = y}" (is "?lhs = ?rhs")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1705
proof -
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1706
  { fix x assume "x\<in>?lhs"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1707
    then obtain k u y where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1708
        obt: "\<forall>i\<in>{1::nat..k}. 0 \<le> u i \<and> y i \<in> p" "setsum u {1..k} = 1" "(\<Sum>i = 1..k. u i *\<^sub>R y i) = x"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1709
      unfolding convex_hull_indexed by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1710
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1711
    have fin: "finite {1..k}" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1712
    have fin': "\<And>v. finite {i \<in> {1..k}. y i = v}" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1713
    { fix j
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1714
      assume "j\<in>{1..k}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1715
      then have "y j \<in> p" "0 \<le> setsum u {i. Suc 0 \<le> i \<and> i \<le> k \<and> y i = y j}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1716
        using obt(1)[THEN bspec[where x=j]] and obt(2)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1717
        apply simp
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1718
        apply (rule setsum_nonneg)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1719
        using obt(1)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1720
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1721
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1722
    }
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1723
    moreover
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1724
    have "(\<Sum>v\<in>y ` {1..k}. setsum u {i \<in> {1..k}. y i = v}) = 1"
49530
wenzelm
parents: 49529
diff changeset
  1725
      unfolding setsum_image_gen[OF fin, symmetric] using obt(2) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1726
    moreover have "(\<Sum>v\<in>y ` {1..k}. setsum u {i \<in> {1..k}. y i = v} *\<^sub>R v) = x"
49530
wenzelm
parents: 49529
diff changeset
  1727
      using setsum_image_gen[OF fin, of "\<lambda>i. u i *\<^sub>R y i" y, symmetric]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1728
      unfolding scaleR_left.setsum using obt(3) by auto
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1729
    ultimately
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1730
    have "\<exists>s u. finite s \<and> s \<subseteq> p \<and> (\<forall>x\<in>s. 0 \<le> u x) \<and> setsum u s = 1 \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = x"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1731
      apply (rule_tac x="y ` {1..k}" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1732
      apply (rule_tac x="\<lambda>v. setsum u {i\<in>{1..k}. y i = v}" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1733
      apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1734
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1735
    then have "x\<in>?rhs" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1736
  }
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1737
  moreover
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1738
  { fix y assume "y\<in>?rhs"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1739
    then obtain s u where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1740
      obt: "finite s" "s \<subseteq> p" "\<forall>x\<in>s. 0 \<le> u x" "setsum u s = 1" "(\<Sum>v\<in>s. u v *\<^sub>R v) = y" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1741
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1742
    obtain f where f: "inj_on f {1..card s}" "f ` {1..card s} = s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1743
      using ex_bij_betw_nat_finite_1[OF obt(1)] unfolding bij_betw_def by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1744
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1745
    { fix i :: nat
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1746
      assume "i\<in>{1..card s}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1747
      then have "f i \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1748
        apply (subst f(2)[symmetric])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1749
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1750
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1751
      then have "0 \<le> u (f i)" "f i \<in> p" using obt(2,3) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1752
    }
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1753
    moreover have *:"finite {1..card s}" by auto
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1754
    { fix y
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1755
      assume "y\<in>s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1756
      then obtain i where "i\<in>{1..card s}" "f i = y" using f using image_iff[of y f "{1..card s}"]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1757
        by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1758
      then have "{x. Suc 0 \<le> x \<and> x \<le> card s \<and> f x = y} = {i}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1759
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1760
        using f(1)[unfolded inj_on_def]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1761
        apply(erule_tac x=x in ballE)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1762
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1763
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1764
      then have "card {x. Suc 0 \<le> x \<and> x \<le> card s \<and> f x = y} = 1" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1765
      then have "(\<Sum>x\<in>{x \<in> {1..card s}. f x = y}. u (f x)) = u y"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1766
          "(\<Sum>x\<in>{x \<in> {1..card s}. f x = y}. u (f x) *\<^sub>R f x) = u y *\<^sub>R y"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1767
        by (auto simp add: setsum_constant_scaleR)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1768
    }
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1769
    then have "(\<Sum>x = 1..card s. u (f x)) = 1" "(\<Sum>i = 1..card s. u (f i) *\<^sub>R f i) = y"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1770
      unfolding setsum_image_gen[OF *(1), of "\<lambda>x. u (f x) *\<^sub>R f x" f] and setsum_image_gen[OF *(1), of "\<lambda>x. u (f x)" f]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1771
      unfolding f using setsum_cong2[of s "\<lambda>y. (\<Sum>x\<in>{x \<in> {1..card s}. f x = y}. u (f x) *\<^sub>R f x)" "\<lambda>v. u v *\<^sub>R v"]
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1772
      using setsum_cong2 [of s "\<lambda>y. (\<Sum>x\<in>{x \<in> {1..card s}. f x = y}. u (f x))" u]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1773
      unfolding obt(4,5) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1774
    ultimately
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1775
    have "\<exists>k u x. (\<forall>i\<in>{1..k}. 0 \<le> u i \<and> x i \<in> p) \<and> setsum u {1..k} = 1 \<and>
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1776
        (\<Sum>i::nat = 1..k. u i *\<^sub>R x i) = y"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1777
      apply (rule_tac x="card s" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1778
      apply (rule_tac x="u \<circ> f" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1779
      apply (rule_tac x=f in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1780
      apply fastforce
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1781
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1782
    then have "y \<in> ?lhs" unfolding convex_hull_indexed by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1783
  }
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  1784
  ultimately show ?thesis unfolding set_eq_iff by blast
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1785
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1786
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1787
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1788
subsubsection {* A stepping theorem for that expansion *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1789
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1790
lemma convex_hull_finite_step:
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1791
  fixes s :: "'a::real_vector set"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1792
  assumes "finite s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1793
  shows "(\<exists>u. (\<forall>x\<in>insert a s. 0 \<le> u x) \<and> setsum u (insert a s) = w \<and> setsum (\<lambda>x. u x *\<^sub>R x) (insert a s) = y)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1794
     \<longleftrightarrow> (\<exists>v\<ge>0. \<exists>u. (\<forall>x\<in>s. 0 \<le> u x) \<and> setsum u s = w - v \<and> setsum (\<lambda>x. u x *\<^sub>R x) s = y - v *\<^sub>R a)" (is "?lhs = ?rhs")
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1795
proof (rule, case_tac[!] "a\<in>s")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1796
  assume "a\<in>s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1797
  then have *:" insert a s = s" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1798
  assume ?lhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1799
  then show ?rhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1800
    unfolding *
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1801
    apply (rule_tac x=0 in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1802
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1803
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1804
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1805
  assume ?lhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1806
  then obtain u where u: "\<forall>x\<in>insert a s. 0 \<le> u x" "setsum u (insert a s) = w" "(\<Sum>x\<in>insert a s. u x *\<^sub>R x) = y"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1807
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1808
  assume "a \<notin> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1809
  then show ?rhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1810
    apply (rule_tac x="u a" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1811
    using u(1)[THEN bspec[where x=a]]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1812
    apply simp
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1813
    apply (rule_tac x=u in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1814
    using u[unfolded setsum_clauses(2)[OF assms]] and `a\<notin>s`
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1815
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1816
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1817
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1818
  assume "a \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1819
  then have *: "insert a s = s" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1820
  have fin: "finite (insert a s)" using assms by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1821
  assume ?rhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1822
  then obtain v u where uv: "v\<ge>0" "\<forall>x\<in>s. 0 \<le> u x" "setsum u s = w - v" "(\<Sum>x\<in>s. u x *\<^sub>R x) = y - v *\<^sub>R a"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1823
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1824
  show ?lhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1825
    apply (rule_tac x = "\<lambda>x. (if a = x then v else 0) + u x" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1826
    unfolding scaleR_left_distrib and setsum_addf and setsum_delta''[OF fin] and setsum_delta'[OF fin]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1827
    unfolding setsum_clauses(2)[OF assms]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1828
    using uv and uv(2)[THEN bspec[where x=a]] and `a\<in>s`
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1829
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1830
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1831
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1832
  assume ?rhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1833
  then obtain v u where uv: "v\<ge>0" "\<forall>x\<in>s. 0 \<le> u x" "setsum u s = w - v" "(\<Sum>x\<in>s. u x *\<^sub>R x) = y - v *\<^sub>R a"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1834
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1835
  moreover
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1836
  assume "a \<notin> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1837
  moreover
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1838
  have "(\<Sum>x\<in>s. if a = x then v else u x) = setsum u s" "(\<Sum>x\<in>s. (if a = x then v else u x) *\<^sub>R x) = (\<Sum>x\<in>s. u x *\<^sub>R x)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1839
    apply (rule_tac setsum_cong2)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1840
    defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1841
    apply (rule_tac setsum_cong2)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1842
    using `a \<notin> s`
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1843
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1844
    done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1845
  ultimately show ?lhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1846
    apply (rule_tac x="\<lambda>x. if a = x then v else u x" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1847
    unfolding setsum_clauses(2)[OF assms]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1848
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1849
    done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1850
qed
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1851
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1852
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1853
subsubsection {* Hence some special cases *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1854
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1855
lemma convex_hull_2:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1856
  "convex hull {a,b} = {u *\<^sub>R a + v *\<^sub>R b | u v. 0 \<le> u \<and> 0 \<le> v \<and> u + v = 1}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1857
proof- have *:"\<And>u. (\<forall>x\<in>{a, b}. 0 \<le> u x) \<longleftrightarrow> 0 \<le> u a \<and> 0 \<le> u b" by auto have **:"finite {b}" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1858
show ?thesis apply(simp add: convex_hull_finite) unfolding convex_hull_finite_step[OF **, of a 1, unfolded * conj_assoc]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1859
  apply auto apply(rule_tac x=v in exI) apply(rule_tac x="1 - v" in exI) apply simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1860
  apply(rule_tac x=u in exI) apply simp apply(rule_tac x="\<lambda>x. v" in exI) by simp qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1861
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1862
lemma convex_hull_2_alt: "convex hull {a,b} = {a + u *\<^sub>R (b - a) | u.  0 \<le> u \<and> u \<le> 1}"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1863
  unfolding convex_hull_2
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1864
proof(rule Collect_cong) have *:"\<And>x y ::real. x + y = 1 \<longleftrightarrow> x = 1 - y" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1865
  fix x show "(\<exists>v u. x = v *\<^sub>R a + u *\<^sub>R b \<and> 0 \<le> v \<and> 0 \<le> u \<and> v + u = 1) = (\<exists>u. x = a + u *\<^sub>R (b - a) \<and> 0 \<le> u \<and> u \<le> 1)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1866
    unfolding * apply auto apply(rule_tac[!] x=u in exI) by (auto simp add: algebra_simps) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1867
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1868
lemma convex_hull_3:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1869
  "convex hull {a,b,c} = { u *\<^sub>R a + v *\<^sub>R b + w *\<^sub>R c | u v w. 0 \<le> u \<and> 0 \<le> v \<and> 0 \<le> w \<and> u + v + w = 1}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1870
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1871
  have fin:"finite {a,b,c}" "finite {b,c}" "finite {c}" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1872
  have *:"\<And>x y z ::real. x + y + z = 1 \<longleftrightarrow> x = 1 - y - z"
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  1873
    by (auto simp add: field_simps)
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1874
  show ?thesis unfolding convex_hull_finite[OF fin(1)] and convex_hull_finite_step[OF fin(2)] and *
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1875
    unfolding convex_hull_finite_step[OF fin(3)] apply(rule Collect_cong) apply simp apply auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1876
    apply(rule_tac x=va in exI) apply (rule_tac x="u c" in exI) apply simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1877
    apply(rule_tac x="1 - v - w" in exI) apply simp apply(rule_tac x=v in exI) apply simp apply(rule_tac x="\<lambda>x. w" in exI) by simp qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1878
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1879
lemma convex_hull_3_alt:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1880
  "convex hull {a,b,c} = {a + u *\<^sub>R (b - a) + v *\<^sub>R (c - a) | u v.  0 \<le> u \<and> 0 \<le> v \<and> u + v \<le> 1}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1881
proof- have *:"\<And>x y z ::real. x + y + z = 1 \<longleftrightarrow> x = 1 - y - z" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1882
  show ?thesis unfolding convex_hull_3 apply (auto simp add: *) apply(rule_tac x=v in exI) apply(rule_tac x=w in exI) apply (simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1883
    apply(rule_tac x=u in exI) apply(rule_tac x=v in exI) by (simp add: algebra_simps) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1884
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1885
subsection {* Relations among closure notions and corresponding hulls *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1886
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1887
lemma affine_imp_convex: "affine s \<Longrightarrow> convex s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1888
  unfolding affine_def convex_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1889
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  1890
lemma subspace_imp_convex: "subspace s \<Longrightarrow> convex s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1891
  using subspace_imp_affine affine_imp_convex by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1892
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  1893
lemma affine_hull_subset_span: "(affine hull s) \<subseteq> (span s)"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1894
by (metis hull_minimal span_inc subspace_imp_affine subspace_span)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1895
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  1896
lemma convex_hull_subset_span: "(convex hull s) \<subseteq> (span s)"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1897
by (metis hull_minimal span_inc subspace_imp_convex subspace_span)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1898
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1899
lemma convex_hull_subset_affine_hull: "(convex hull s) \<subseteq> (affine hull s)"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1900
by (metis affine_affine_hull affine_imp_convex hull_minimal hull_subset)
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  1901
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1902
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1903
lemma affine_dependent_imp_dependent:
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  1904
  shows "affine_dependent s \<Longrightarrow> dependent s"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1905
  unfolding affine_dependent_def dependent_def
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1906
  using affine_hull_subset_span by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1907
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1908
lemma dependent_imp_affine_dependent:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1909
  assumes "dependent {x - a| x . x \<in> s}" "a \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1910
  shows "affine_dependent (insert a s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1911
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1912
  from assms(1)[unfolded dependent_explicit] obtain S u v
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1913
    where obt:"finite S" "S \<subseteq> {x - a |x. x \<in> s}" "v\<in>S" "u v  \<noteq> 0" "(\<Sum>v\<in>S. u v *\<^sub>R v) = 0" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1914
  def t \<equiv> "(\<lambda>x. x + a) ` S"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1915
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1916
  have inj:"inj_on (\<lambda>x. x + a) S" unfolding inj_on_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1917
  have "0\<notin>S" using obt(2) assms(2) unfolding subset_eq by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1918
  have fin:"finite t" and  "t\<subseteq>s" unfolding t_def using obt(1,2) by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1919
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1920
  hence "finite (insert a t)" and "insert a t \<subseteq> insert a s" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1921
  moreover have *:"\<And>P Q. (\<Sum>x\<in>t. (if x = a then P x else Q x)) = (\<Sum>x\<in>t. Q x)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1922
    apply(rule setsum_cong2) using `a\<notin>s` `t\<subseteq>s` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1923
  have "(\<Sum>x\<in>insert a t. if x = a then - (\<Sum>x\<in>t. u (x - a)) else u (x - a)) = 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1924
    unfolding setsum_clauses(2)[OF fin] using `a\<notin>s` `t\<subseteq>s` apply auto unfolding * by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1925
  moreover have "\<exists>v\<in>insert a t. (if v = a then - (\<Sum>x\<in>t. u (x - a)) else u (v - a)) \<noteq> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1926
    apply(rule_tac x="v + a" in bexI) using obt(3,4) and `0\<notin>S` unfolding t_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1927
  moreover have *:"\<And>P Q. (\<Sum>x\<in>t. (if x = a then P x else Q x) *\<^sub>R x) = (\<Sum>x\<in>t. Q x *\<^sub>R x)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1928
    apply(rule setsum_cong2) using `a\<notin>s` `t\<subseteq>s` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1929
  have "(\<Sum>x\<in>t. u (x - a)) *\<^sub>R a = (\<Sum>v\<in>t. u (v - a) *\<^sub>R v)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1930
    unfolding scaleR_left.setsum unfolding t_def and setsum_reindex[OF inj] and o_def
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1931
    using obt(5) by (auto simp add: setsum_addf scaleR_right_distrib)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1932
  hence "(\<Sum>v\<in>insert a t. (if v = a then - (\<Sum>x\<in>t. u (x - a)) else u (v - a)) *\<^sub>R v) = 0"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1933
    unfolding setsum_clauses(2)[OF fin] using `a\<notin>s` `t\<subseteq>s` by (auto simp add: *)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1934
  ultimately show ?thesis unfolding affine_dependent_explicit
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1935
    apply(rule_tac x="insert a t" in exI) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1936
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1937
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1938
lemma convex_cone:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1939
  "convex s \<and> cone s \<longleftrightarrow> (\<forall>x\<in>s. \<forall>y\<in>s. (x + y) \<in> s) \<and> (\<forall>x\<in>s. \<forall>c\<ge>0. (c *\<^sub>R x) \<in> s)" (is "?lhs = ?rhs")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1940
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1941
  { fix x y assume "x\<in>s" "y\<in>s" and ?lhs
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1942
    hence "2 *\<^sub>R x \<in>s" "2 *\<^sub>R y \<in> s" unfolding cone_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1943
    hence "x + y \<in> s" using `?lhs`[unfolded convex_def, THEN conjunct1]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1944
      apply(erule_tac x="2*\<^sub>R x" in ballE) apply(erule_tac x="2*\<^sub>R y" in ballE)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1945
      apply(erule_tac x="1/2" in allE) apply simp apply(erule_tac x="1/2" in allE) by auto  }
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  1946
  thus ?thesis unfolding convex_def cone_def by blast
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1947
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1948
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1949
lemma affine_dependent_biggerset: fixes s::"('a::euclidean_space) set"
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1950
  assumes "finite s" "card s \<ge> DIM('a) + 2"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1951
  shows "affine_dependent s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1952
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1953
  have "s\<noteq>{}" using assms by auto then obtain a where "a\<in>s" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1954
  have *:"{x - a |x. x \<in> s - {a}} = (\<lambda>x. x - a) ` (s - {a})" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1955
  have "card {x - a |x. x \<in> s - {a}} = card (s - {a})" unfolding *
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1956
    apply(rule card_image) unfolding inj_on_def by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1957
  also have "\<dots> > DIM('a)" using assms(2)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1958
    unfolding card_Diff_singleton[OF assms(1) `a\<in>s`] by auto
49530
wenzelm
parents: 49529
diff changeset
  1959
  finally show ?thesis apply(subst insert_Diff[OF `a\<in>s`, symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1960
    apply(rule dependent_imp_affine_dependent)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1961
    apply(rule dependent_biggerset) by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1962
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1963
lemma affine_dependent_biggerset_general:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1964
  assumes "finite (s::('a::euclidean_space) set)" "card s \<ge> dim s + 2"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1965
  shows "affine_dependent s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1966
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1967
  from assms(2) have "s \<noteq> {}" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1968
  then obtain a where "a\<in>s" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1969
  have *:"{x - a |x. x \<in> s - {a}} = (\<lambda>x. x - a) ` (s - {a})" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1970
  have **:"card {x - a |x. x \<in> s - {a}} = card (s - {a})" unfolding *
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1971
    apply(rule card_image) unfolding inj_on_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1972
  have "dim {x - a |x. x \<in> s - {a}} \<le> dim s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1973
    apply(rule subset_le_dim) unfolding subset_eq
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1974
    using `a\<in>s` by (auto simp add:span_superset span_sub)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1975
  also have "\<dots> < dim s + 1" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1976
  also have "\<dots> \<le> card (s - {a})" using assms
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1977
    using card_Diff_singleton[OF assms(1) `a\<in>s`] by auto
49530
wenzelm
parents: 49529
diff changeset
  1978
  finally show ?thesis apply(subst insert_Diff[OF `a\<in>s`, symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1979
    apply(rule dependent_imp_affine_dependent) apply(rule dependent_biggerset_general) unfolding ** by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1980
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1981
subsection {* Caratheodory's theorem. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1982
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1983
lemma convex_hull_caratheodory: fixes p::"('a::euclidean_space) set"
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1984
  shows "convex hull p = {y. \<exists>s u. finite s \<and> s \<subseteq> p \<and> card s \<le> DIM('a) + 1 \<and>
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1985
  (\<forall>x\<in>s. 0 \<le> u x) \<and> setsum u s = 1 \<and> setsum (\<lambda>v. u v *\<^sub>R v) s = y}"
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  1986
  unfolding convex_hull_explicit set_eq_iff mem_Collect_eq
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1987
proof(rule,rule)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1988
  fix y let ?P = "\<lambda>n. \<exists>s u. finite s \<and> card s = n \<and> s \<subseteq> p \<and> (\<forall>x\<in>s. 0 \<le> u x) \<and> setsum u s = 1 \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1989
  assume "\<exists>s u. finite s \<and> s \<subseteq> p \<and> (\<forall>x\<in>s. 0 \<le> u x) \<and> setsum u s = 1 \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1990
  then obtain N where "?P N" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1991
  hence "\<exists>n\<le>N. (\<forall>k<n. \<not> ?P k) \<and> ?P n" apply(rule_tac ex_least_nat_le) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1992
  then obtain n where "?P n" and smallest:"\<forall>k<n. \<not> ?P k" by blast
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1993
  then obtain s u where obt:"finite s" "card s = n" "s\<subseteq>p" "\<forall>x\<in>s. 0 \<le> u x" "setsum u s = 1"  "(\<Sum>v\<in>s. u v *\<^sub>R v) = y" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1994
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1995
  have "card s \<le> DIM('a) + 1" proof(rule ccontr, simp only: not_le)
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1996
    assume "DIM('a) + 1 < card s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1997
    hence "affine_dependent s" using affine_dependent_biggerset[OF obt(1)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1998
    then obtain w v where wv:"setsum w s = 0" "v\<in>s" "w v \<noteq> 0" "(\<Sum>v\<in>s. w v *\<^sub>R v) = 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1999
      using affine_dependent_explicit_finite[OF obt(1)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2000
    def i \<equiv> "(\<lambda>v. (u v) / (- w v)) ` {v\<in>s. w v < 0}"  def t \<equiv> "Min i"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2001
    have "\<exists>x\<in>s. w x < 0" proof(rule ccontr, simp add: not_less)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2002
      assume as:"\<forall>x\<in>s. 0 \<le> w x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2003
      hence "setsum w (s - {v}) \<ge> 0" apply(rule_tac setsum_nonneg) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2004
      hence "setsum w s > 0" unfolding setsum_diff1'[OF obt(1) `v\<in>s`]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2005
        using as[THEN bspec[where x=v]] and `v\<in>s` using `w v \<noteq> 0` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2006
      thus False using wv(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2007
    qed hence "i\<noteq>{}" unfolding i_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2008
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2009
    hence "t \<ge> 0" using Min_ge_iff[of i 0 ] and obt(1) unfolding t_def i_def
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2010
      using obt(4)[unfolded le_less] apply auto unfolding divide_le_0_iff by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2011
    have t:"\<forall>v\<in>s. u v + t * w v \<ge> 0" proof
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2012
      fix v assume "v\<in>s" hence v:"0\<le>u v" using obt(4)[THEN bspec[where x=v]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2013
      show"0 \<le> u v + t * w v" proof(cases "w v < 0")
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2014
        case False thus ?thesis apply(rule_tac add_nonneg_nonneg)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2015
          using v apply simp apply(rule mult_nonneg_nonneg) using `t\<ge>0` by auto next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2016
        case True hence "t \<le> u v / (- w v)" using `v\<in>s`
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2017
          unfolding t_def i_def apply(rule_tac Min_le) using obt(1) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2018
        thus ?thesis unfolding real_0_le_add_iff
49530
wenzelm
parents: 49529
diff changeset
  2019
          using pos_le_divide_eq[OF True[unfolded neg_0_less_iff_less[symmetric]]] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2020
      qed qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2021
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2022
    obtain a where "a\<in>s" and "t = (\<lambda>v. (u v) / (- w v)) a" and "w a < 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2023
      using Min_in[OF _ `i\<noteq>{}`] and obt(1) unfolding i_def t_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2024
    hence a:"a\<in>s" "u a + t * w a = 0" by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2025
    have *:"\<And>f. setsum f (s - {a}) = setsum f s - ((f a)::'b::ab_group_add)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2026
      unfolding setsum_diff1'[OF obt(1) `a\<in>s`] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2027
    have "(\<Sum>v\<in>s. u v + t * w v) = 1"
49530
wenzelm
parents: 49529
diff changeset
  2028
      unfolding setsum_addf wv(1) setsum_right_distrib[symmetric] obt(5) by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2029
    moreover have "(\<Sum>v\<in>s. u v *\<^sub>R v + (t * w v) *\<^sub>R v) - (u a *\<^sub>R a + (t * w a) *\<^sub>R a) = y"
49530
wenzelm
parents: 49529
diff changeset
  2030
      unfolding setsum_addf obt(6) scaleR_scaleR[symmetric] scaleR_right.setsum [symmetric] wv(4)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2031
      using a(2) [THEN eq_neg_iff_add_eq_0 [THEN iffD2]] by simp
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2032
    ultimately have "?P (n - 1)" apply(rule_tac x="(s - {a})" in exI)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2033
      apply(rule_tac x="\<lambda>v. u v + t * w v" in exI) using obt(1-3) and t and a
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2034
      by (auto simp add: * scaleR_left_distrib)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2035
    thus False using smallest[THEN spec[where x="n - 1"]] by auto qed
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2036
  thus "\<exists>s u. finite s \<and> s \<subseteq> p \<and> card s \<le> DIM('a) + 1
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2037
    \<and> (\<forall>x\<in>s. 0 \<le> u x) \<and> setsum u s = 1 \<and> (\<Sum>v\<in>s. u v *\<^sub>R v) = y" using obt by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2038
qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2039
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2040
lemma caratheodory:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2041
 "convex hull p = {x::'a::euclidean_space. \<exists>s. finite s \<and> s \<subseteq> p \<and>
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2042
      card s \<le> DIM('a) + 1 \<and> x \<in> convex hull s}"
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  2043
  unfolding set_eq_iff apply(rule, rule) unfolding mem_Collect_eq proof-
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2044
  fix x assume "x \<in> convex hull p"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2045
  then obtain s u where "finite s" "s \<subseteq> p" "card s \<le> DIM('a) + 1"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2046
     "\<forall>x\<in>s. 0 \<le> u x" "setsum u s = 1" "(\<Sum>v\<in>s. u v *\<^sub>R v) = x"unfolding convex_hull_caratheodory by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2047
  thus "\<exists>s. finite s \<and> s \<subseteq> p \<and> card s \<le> DIM('a) + 1 \<and> x \<in> convex hull s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2048
    apply(rule_tac x=s in exI) using hull_subset[of s convex]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2049
  using convex_convex_hull[unfolded convex_explicit, of s, THEN spec[where x=s], THEN spec[where x=u]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2050
next
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2051
  fix x assume "\<exists>s. finite s \<and> s \<subseteq> p \<and> card s \<le> DIM('a) + 1 \<and> x \<in> convex hull s"
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  2052
  then obtain s where "finite s" "s \<subseteq> p" "card s \<le> DIM('a) + 1" "x \<in> convex hull s" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2053
  thus "x \<in> convex hull p" using hull_mono[OF `s\<subseteq>p`] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2054
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2055
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2056
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2057
subsection {* Some Properties of Affine Dependent Sets *}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2058
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2059
lemma affine_independent_empty: "~(affine_dependent {})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2060
  by (simp add: affine_dependent_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2061
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2062
lemma affine_independent_sing:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2063
shows "~(affine_dependent {a})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2064
 by (simp add: affine_dependent_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2065
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2066
lemma affine_hull_translation:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2067
"affine hull ((%x. a + x) `  S) = (%x. a + x) ` (affine hull S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2068
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2069
have "affine ((%x. a + x) ` (affine hull S))" using affine_translation affine_affine_hull by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2070
moreover have "(%x. a + x) `  S <= (%x. a + x) ` (affine hull S)" using hull_subset[of S] by auto
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  2071
ultimately have h1: "affine hull ((%x. a + x) `  S) <= (%x. a + x) ` (affine hull S)" by (metis hull_minimal)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2072
have "affine((%x. -a + x) ` (affine hull ((%x. a + x) `  S)))"  using affine_translation affine_affine_hull by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2073
moreover have "(%x. -a + x) ` (%x. a + x) `  S <= (%x. -a + x) ` (affine hull ((%x. a + x) `  S))" using hull_subset[of "(%x. a + x) `  S"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2074
moreover have "S=(%x. -a + x) ` (%x. a + x) `  S" using  translation_assoc[of "-a" a] by auto
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  2075
ultimately have "(%x. -a + x) ` (affine hull ((%x. a + x) `  S)) >= (affine hull S)" by (metis hull_minimal)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2076
hence "affine hull ((%x. a + x) `  S) >= (%x. a + x) ` (affine hull S)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2077
from this show ?thesis using h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2078
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2079
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2080
lemma affine_dependent_translation:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2081
  assumes "affine_dependent S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2082
  shows "affine_dependent ((%x. a + x) ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2083
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2084
obtain x where x_def: "x : S & x : affine hull (S - {x})" using assms affine_dependent_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2085
have "op + a ` (S - {x}) = op + a ` S - {a + x}" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2086
hence "a+x : affine hull ((%x. a + x) ` S - {a+x})" using  affine_hull_translation[of a "S-{x}"] x_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2087
moreover have "a+x : (%x. a + x) ` S" using x_def by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2088
ultimately show ?thesis unfolding affine_dependent_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2089
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2090
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2091
lemma affine_dependent_translation_eq:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2092
  "affine_dependent S <-> affine_dependent ((%x. a + x) ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2093
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2094
{ assume "affine_dependent ((%x. a + x) ` S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2095
  hence "affine_dependent S" using affine_dependent_translation[of "((%x. a + x) ` S)" "-a"] translation_assoc[of "-a" a] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2096
} from this show ?thesis using affine_dependent_translation by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2097
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2098
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2099
lemma affine_hull_0_dependent:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2100
  assumes "0 : affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2101
  shows "dependent S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2102
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2103
obtain s u where s_u_def: "finite s & s ~= {} & s <= S & setsum u s = 1 & (SUM v:s. u v *\<^sub>R v) = 0" using assms affine_hull_explicit[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2104
hence "EX v:s. u v ~= 0" using setsum_not_0[of "u" "s"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2105
hence "finite s & s <= S & (EX v:s. u v ~= 0 & (SUM v:s. u v *\<^sub>R v) = 0)" using s_u_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2106
from this show ?thesis unfolding dependent_explicit[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2107
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2108
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2109
lemma affine_dependent_imp_dependent2:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2110
  assumes "affine_dependent (insert 0 S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2111
  shows "dependent S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2112
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2113
obtain x where x_def: "x:insert 0 S & x : affine hull (insert 0 S - {x})" using affine_dependent_def[of "(insert 0 S)"] assms by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2114
hence "x : span (insert 0 S - {x})" using affine_hull_subset_span by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2115
moreover have "span (insert 0 S - {x}) = span (S - {x})" using insert_Diff_if[of "0" S "{x}"] span_insert_0[of "S-{x}"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2116
ultimately have "x : span (S - {x})" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2117
hence "(x~=0) ==> dependent S" using x_def dependent_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2118
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2119
{ assume "x=0" hence "0 : affine hull S" using x_def hull_mono[of "S - {0}" S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2120
               hence "dependent S" using affine_hull_0_dependent by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2121
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2122
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2123
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2124
lemma affine_dependent_iff_dependent:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2125
  assumes "a ~: S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2126
  shows "affine_dependent (insert a S) <-> dependent ((%x. -a + x) ` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2127
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2128
have "(op + (- a) ` S)={x - a| x . x : S}" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2129
from this show ?thesis using affine_dependent_translation_eq[of "(insert a S)" "-a"]
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2130
      affine_dependent_imp_dependent2 assms
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2131
      dependent_imp_affine_dependent[of a S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2132
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2133
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2134
lemma affine_dependent_iff_dependent2:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2135
  assumes "a : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2136
  shows "affine_dependent S <-> dependent ((%x. -a + x) ` (S-{a}))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2137
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2138
have "insert a (S - {a})=S" using assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2139
from this show ?thesis using assms affine_dependent_iff_dependent[of a "S-{a}"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2140
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2141
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2142
lemma affine_hull_insert_span_gen:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2143
  shows "affine hull (insert a s) = (%x. a+x) ` span ((%x. -a+x) ` s)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2144
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2145
have h1: "{x - a |x. x : s}=((%x. -a+x) ` s)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2146
{ assume "a ~: s" hence ?thesis using affine_hull_insert_span[of a s] h1 by auto}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2147
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2148
{ assume a1: "a : s"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2149
  have "EX x. x:s & -a+x=0" apply (rule exI[of _ a]) using a1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2150
  hence "insert 0 ((%x. -a+x) ` (s - {a}))=(%x. -a+x) ` s" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2151
  hence "span ((%x. -a+x) ` (s - {a}))=span ((%x. -a+x) ` s)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2152
    using span_insert_0[of "op + (- a) ` (s - {a})"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2153
  moreover have "{x - a |x. x : (s - {a})}=((%x. -a+x) ` (s - {a}))" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2154
  moreover have "insert a (s - {a})=(insert a s)" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2155
  ultimately have ?thesis using assms affine_hull_insert_span[of "a" "s-{a}"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2156
}
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2157
ultimately show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2158
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2159
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2160
lemma affine_hull_span2:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2161
  assumes "a : s"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2162
  shows "affine hull s = (%x. a+x) ` span ((%x. -a+x) ` (s-{a}))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2163
  using affine_hull_insert_span_gen[of a "s - {a}", unfolded insert_Diff[OF assms]] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2164
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2165
lemma affine_hull_span_gen:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2166
  assumes "a : affine hull s"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2167
  shows "affine hull s = (%x. a+x) ` span ((%x. -a+x) ` s)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2168
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2169
have "affine hull (insert a s) = affine hull s" using hull_redundant[of a affine s] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2170
from this show ?thesis using affine_hull_insert_span_gen[of a "s"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2171
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2172
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2173
lemma affine_hull_span_0:
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  2174
  assumes "0 : affine hull S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2175
  shows "affine hull S = span S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2176
using affine_hull_span_gen[of "0" S] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2177
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2178
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2179
lemma extend_to_affine_basis:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2180
fixes S V :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2181
assumes "~(affine_dependent S)" "S <= V" "S~={}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2182
shows "? T. ~(affine_dependent T) & S<=T & T<=V & affine hull T = affine hull V"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2183
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2184
obtain a where a_def: "a : S" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2185
hence h0: "independent  ((%x. -a + x) ` (S-{a}))" using affine_dependent_iff_dependent2 assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2186
from this obtain B
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2187
   where B_def: "(%x. -a+x) ` (S - {a}) <= B & B <= (%x. -a+x) ` V & independent B & (%x. -a+x) ` V <= span B"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2188
   using maximal_independent_subset_extend[of "(%x. -a+x) ` (S-{a})" "(%x. -a + x) ` V"] assms by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2189
def T == "(%x. a+x) ` (insert 0 B)" hence "T=insert a ((%x. a+x) ` B)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2190
hence "affine hull T = (%x. a+x) ` span B" using affine_hull_insert_span_gen[of a "((%x. a+x) ` B)"] translation_assoc[of "-a" a B] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2191
hence "V <= affine hull T" using B_def assms translation_inverse_subset[of a V "span B"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2192
moreover have "T<=V" using T_def B_def a_def assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2193
ultimately have "affine hull T = affine hull V"
44457
d366fa5551ef declare euclidean_simps [simp] at the point they are proved;
huffman
parents: 44365
diff changeset
  2194
    by (metis Int_absorb1 Int_absorb2 hull_hull hull_mono)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2195
moreover have "S<=T" using T_def B_def translation_inverse_subset[of a "S-{a}" B] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2196
moreover have "~(affine_dependent T)" using T_def affine_dependent_translation_eq[of "insert 0 B"] affine_dependent_imp_dependent2 B_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2197
ultimately show ?thesis using `T<=V` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2198
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2199
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2200
lemma affine_basis_exists:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2201
fixes V :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2202
shows "? B. B <= V & ~(affine_dependent B) & affine hull V = affine hull B"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2203
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2204
{ assume empt: "V={}" have "? B. B <= V & ~(affine_dependent B) & (affine hull V=affine hull B)" using empt affine_independent_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2205
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2206
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2207
{ assume nonempt: "V~={}" obtain x where "x:V" using nonempt by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2208
  hence "? B. B <= V & ~(affine_dependent B) & (affine hull V=affine hull B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2209
  using affine_dependent_def[of "{x}"] extend_to_affine_basis[of "{x}:: ('n::euclidean_space) set" V] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2210
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2211
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2212
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2213
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2214
subsection {* Affine Dimension of a Set *}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2215
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2216
definition "aff_dim V = (SOME d :: int. ? B. (affine hull B=affine hull V) & ~(affine_dependent B) & (of_nat(card B) = d+1))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2217
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2218
lemma aff_dim_basis_exists:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2219
  fixes V :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2220
  shows "? B. (affine hull B=affine hull V) & ~(affine_dependent B) & (of_nat(card B) = aff_dim V+1)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2221
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2222
obtain B where B_def: "~(affine_dependent B) & (affine hull B=affine hull V)" using affine_basis_exists[of V] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2223
from this show ?thesis unfolding aff_dim_def some_eq_ex[of "%d. ? (B :: ('n::euclidean_space) set). (affine hull B=affine hull V) & ~(affine_dependent B) & (of_nat(card B) = d+1)"] apply auto apply (rule exI[of _ "int (card B)-(1 :: int)"]) apply (rule exI[of _ "B"]) by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2224
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2225
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2226
lemma affine_hull_nonempty: "(S ~= {}) <-> affine hull S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2227
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2228
have "(S = {}) ==> affine hull S = {}"using affine_hull_empty by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2229
moreover have "affine hull S = {} ==> S = {}" unfolding hull_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2230
ultimately show "(S ~= {}) <-> affine hull S ~= {}" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2231
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2232
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2233
lemma aff_dim_parallel_subspace_aux:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2234
fixes B :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2235
assumes "~(affine_dependent B)" "a:B"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2236
shows "finite B & ((card B) - 1 = dim (span ((%x. -a+x) ` (B-{a}))))"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2237
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2238
have "independent ((%x. -a + x) ` (B-{a}))" using affine_dependent_iff_dependent2 assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2239
hence fin: "dim (span ((%x. -a+x) ` (B-{a}))) = card ((%x. -a + x) ` (B-{a}))" "finite ((%x. -a + x) ` (B - {a}))"  using indep_card_eq_dim_span[of "(%x. -a+x) ` (B-{a})"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2240
{ assume emp: "(%x. -a + x) ` (B - {a}) = {}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2241
  have "B=insert a ((%x. a + x) ` (%x. -a + x) ` (B - {a}))" using translation_assoc[of "a" "-a" "(B - {a})"] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2242
  hence "B={a}" using emp by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2243
  hence ?thesis using assms fin by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2244
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2245
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2246
{ assume "(%x. -a + x) ` (B - {a}) ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2247
  hence "card ((%x. -a + x) ` (B - {a}))>0" using fin by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2248
  moreover have h1: "card ((%x. -a + x) ` (B-{a})) = card (B-{a})"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2249
     apply (rule card_image) using translate_inj_on by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2250
  ultimately have "card (B-{a})>0" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2251
  hence "finite(B-{a})" using card_gt_0_iff[of "(B - {a})"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2252
  moreover hence "(card (B-{a})= (card B) - 1)" using card_Diff_singleton assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2253
  ultimately have ?thesis using fin h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2254
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2255
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2256
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2257
lemma aff_dim_parallel_subspace:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2258
fixes V L :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2259
assumes "V ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2260
assumes "subspace L" "affine_parallel (affine hull V) L"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2261
shows "aff_dim V=int(dim L)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2262
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2263
obtain B where B_def: "affine hull B = affine hull V & ~ affine_dependent B & int (card B) = aff_dim V + 1" using aff_dim_basis_exists by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2264
hence "B~={}" using assms B_def  affine_hull_nonempty[of V] affine_hull_nonempty[of B] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2265
from this obtain a where a_def: "a : B" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2266
def Lb == "span ((%x. -a+x) ` (B-{a}))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2267
  moreover have "affine_parallel (affine hull B) Lb"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2268
     using Lb_def B_def assms affine_hull_span2[of a B] a_def  affine_parallel_commut[of "Lb" "(affine hull B)"] unfolding affine_parallel_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2269
  moreover have "subspace Lb" using Lb_def subspace_span by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2270
  moreover have "affine hull B ~= {}" using assms B_def affine_hull_nonempty[of V] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2271
  ultimately have "L=Lb" using assms affine_parallel_subspace[of "affine hull B"] affine_affine_hull[of B] B_def by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2272
  hence "dim L=dim Lb" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2273
  moreover have "(card B) - 1 = dim Lb" "finite B" using Lb_def aff_dim_parallel_subspace_aux a_def B_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2274
(*  hence "card B=dim Lb+1" using `B~={}` card_gt_0_iff[of B] by auto *)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2275
  ultimately show ?thesis using B_def `B~={}` card_gt_0_iff[of B] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2276
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2277
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2278
lemma aff_independent_finite:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2279
fixes B :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2280
assumes "~(affine_dependent B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2281
shows "finite B"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2282
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2283
{ assume "B~={}" from this obtain a where "a:B" by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2284
  hence ?thesis using aff_dim_parallel_subspace_aux assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2285
} from this show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2286
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2287
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2288
lemma independent_finite:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2289
fixes B :: "('n::euclidean_space) set"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2290
assumes "independent B"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2291
shows "finite B"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2292
using affine_dependent_imp_dependent[of B] aff_independent_finite[of B] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2293
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2294
lemma subspace_dim_equal:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2295
assumes "subspace (S :: ('n::euclidean_space) set)" "subspace T" "S <= T" "dim S >= dim T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2296
shows "S=T"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2297
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2298
obtain B where B_def: "B <= S & independent B & S <= span B & (card B = dim S)" using basis_exists[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2299
hence "span B <= S" using span_mono[of B S] span_eq[of S] assms by metis
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2300
hence "span B = S" using B_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2301
have "dim S = dim T" using assms dim_subset[of S T] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2302
hence "T <= span B" using card_eq_dim[of B T] B_def independent_finite assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2303
from this show ?thesis using assms `span B=S` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2304
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2305
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2306
lemma span_substd_basis:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2307
  assumes d: "d \<subseteq> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2308
  shows "span d = {x. \<forall>i\<in>Basis. i \<notin> d \<longrightarrow> x\<bullet>i = 0}" (is "_ = ?B")
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2309
proof-
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2310
have "d <= ?B" using d by (auto simp: inner_Basis)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2311
moreover have s: "subspace ?B" using subspace_substandard[of "%i. i ~: d"] .
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2312
ultimately have "span d <= ?B" using span_mono[of d "?B"] span_eq[of "?B"] by blast
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2313
moreover have "card d <= dim (span d)" using independent_card_le_dim[of d "span d"]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2314
   independent_substdbasis[OF assms] span_inc[of d] by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2315
moreover hence "dim ?B <= dim (span d)" using dim_substandard[OF assms] by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2316
ultimately show ?thesis using s subspace_dim_equal[of "span d" "?B"]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2317
  subspace_span[of d] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2318
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2319
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2320
lemma basis_to_substdbasis_subspace_isomorphism:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2321
fixes B :: "('a::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2322
assumes "independent B"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2323
shows "EX f (d::'a set). card d = card B \<and> linear f \<and> f ` B = d \<and>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2324
       f ` span B = {x. \<forall>i\<in>Basis. i \<notin> d \<longrightarrow> x \<bullet> i = 0} \<and> inj_on f (span B) \<and> d \<subseteq> Basis"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2325
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2326
  have B:"card B=dim B" using dim_unique[of B B "card B"] assms span_inc[of B] by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2327
  have "dim B \<le> card (Basis :: 'a set)" using dim_subset_UNIV[of B] by simp
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2328
  from ex_card[OF this] obtain d :: "'a set" where d: "d \<subseteq> Basis" and t: "card d = dim B" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2329
  let ?t = "{x::'a::euclidean_space. \<forall>i\<in>Basis. i ~: d --> x\<bullet>i = 0}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2330
  have "EX f. linear f & f ` B = d & f ` span B = ?t & inj_on f (span B)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2331
    apply (rule basis_to_basis_subspace_isomorphism[of "span B" ?t B "d"])
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2332
    apply(rule subspace_span) apply(rule subspace_substandard) defer
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2333
    apply(rule span_inc) apply(rule assms) defer unfolding dim_span[of B] apply(rule B)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2334
    unfolding span_substd_basis[OF d, symmetric] 
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2335
    apply(rule span_inc)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2336
    apply(rule independent_substdbasis[OF d]) apply(rule,assumption)
49530
wenzelm
parents: 49529
diff changeset
  2337
    unfolding t[symmetric] span_substd_basis[OF d] dim_substandard[OF d] by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2338
  with t `card B = dim B` d show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2339
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2340
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2341
lemma aff_dim_empty:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2342
fixes S :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2343
shows "S = {} <-> aff_dim S = -1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2344
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2345
obtain B where "affine hull B = affine hull S & ~ affine_dependent B & int (card B) = aff_dim S + 1" using aff_dim_basis_exists by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2346
moreover hence "S={} <-> B={}" using affine_hull_nonempty[of B] affine_hull_nonempty[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2347
ultimately show ?thesis using aff_independent_finite[of B] card_gt_0_iff[of B] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2348
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2349
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2350
lemma aff_dim_affine_hull:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2351
shows "aff_dim (affine hull S)=aff_dim S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2352
unfolding aff_dim_def using hull_hull[of _ S] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2353
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2354
lemma aff_dim_affine_hull2:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2355
assumes "affine hull S=affine hull T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2356
shows "aff_dim S=aff_dim T" unfolding aff_dim_def using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2357
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2358
lemma aff_dim_unique:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2359
fixes B V :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2360
assumes "(affine hull B=affine hull V) & ~(affine_dependent B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2361
shows "of_nat(card B) = aff_dim V+1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2362
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2363
{ assume "B={}" hence "V={}" using affine_hull_nonempty[of V] affine_hull_nonempty[of B] assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2364
  hence "aff_dim V = (-1::int)"  using aff_dim_empty by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2365
  hence ?thesis using `B={}` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2366
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2367
moreover
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2368
{ assume "B~={}" from this obtain a where a_def: "a:B" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2369
  def Lb == "span ((%x. -a+x) ` (B-{a}))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2370
  have "affine_parallel (affine hull B) Lb"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2371
     using Lb_def affine_hull_span2[of a B] a_def  affine_parallel_commut[of "Lb" "(affine hull B)"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2372
     unfolding affine_parallel_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2373
  moreover have "subspace Lb" using Lb_def subspace_span by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2374
  ultimately have "aff_dim B=int(dim Lb)" using aff_dim_parallel_subspace[of B Lb] `B~={}` by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2375
  moreover have "(card B) - 1 = dim Lb" "finite B" using Lb_def aff_dim_parallel_subspace_aux a_def assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2376
  ultimately have "(of_nat(card B) = aff_dim B+1)" using  `B~={}` card_gt_0_iff[of B] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2377
  hence ?thesis using aff_dim_affine_hull2 assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2378
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2379
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2380
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2381
lemma aff_dim_affine_independent:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2382
fixes B :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2383
assumes "~(affine_dependent B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2384
shows "of_nat(card B) = aff_dim B+1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2385
  using aff_dim_unique[of B B] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2386
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2387
lemma aff_dim_sing:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2388
fixes a :: "'n::euclidean_space"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2389
shows "aff_dim {a}=0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2390
  using aff_dim_affine_independent[of "{a}"] affine_independent_sing by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2391
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2392
lemma aff_dim_inner_basis_exists:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2393
  fixes V :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2394
  shows "? B. B<=V & (affine hull B=affine hull V) & ~(affine_dependent B) & (of_nat(card B) = aff_dim V+1)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2395
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2396
obtain B where B_def: "~(affine_dependent B) & B<=V & (affine hull B=affine hull V)" using affine_basis_exists[of V] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2397
moreover hence "of_nat(card B) = aff_dim V+1" using aff_dim_unique by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2398
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2399
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2400
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2401
lemma aff_dim_le_card:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2402
fixes V :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2403
assumes "finite V"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2404
shows "aff_dim V <= of_nat(card V) - 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2405
 proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2406
 obtain B where B_def: "B<=V & (of_nat(card B) = aff_dim V+1)" using aff_dim_inner_basis_exists[of V] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2407
 moreover hence "card B <= card V" using assms card_mono by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2408
 ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2409
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2410
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2411
lemma aff_dim_parallel_eq:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2412
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2413
assumes "affine_parallel (affine hull S) (affine hull T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2414
shows "aff_dim S=aff_dim T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2415
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2416
{ assume "T~={}" "S~={}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2417
  from this obtain L where L_def: "subspace L & affine_parallel (affine hull T) L"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2418
       using affine_parallel_subspace[of "affine hull T"] affine_affine_hull[of T] affine_hull_nonempty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2419
  hence "aff_dim T = int(dim L)" using aff_dim_parallel_subspace `T~={}` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2420
  moreover have "subspace L & affine_parallel (affine hull S) L"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2421
     using L_def affine_parallel_assoc[of "affine hull S" "affine hull T" L] assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2422
  moreover hence "aff_dim S = int(dim L)" using aff_dim_parallel_subspace `S~={}` by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2423
  ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2424
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2425
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2426
{ assume "S={}" hence "S={} & T={}" using assms affine_hull_nonempty unfolding affine_parallel_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2427
  hence ?thesis using aff_dim_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2428
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2429
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2430
{ assume "T={}" hence "S={} & T={}" using assms affine_hull_nonempty unfolding affine_parallel_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2431
  hence ?thesis using aff_dim_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2432
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2433
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2434
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2435
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2436
lemma aff_dim_translation_eq:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2437
fixes a :: "'n::euclidean_space"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2438
shows "aff_dim ((%x. a + x) ` S)=aff_dim S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2439
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2440
have "affine_parallel (affine hull S) (affine hull ((%x. a + x) ` S))" unfolding affine_parallel_def apply (rule exI[of _ "a"]) using affine_hull_translation[of a S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2441
from this show ?thesis using  aff_dim_parallel_eq[of S "(%x. a + x) ` S"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2442
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2443
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2444
lemma aff_dim_affine:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2445
fixes S L :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2446
assumes "S ~= {}" "affine S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2447
assumes "subspace L" "affine_parallel S L"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2448
shows "aff_dim S=int(dim L)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2449
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2450
have 1: "(affine hull S) = S" using assms affine_hull_eq[of S] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2451
hence "affine_parallel (affine hull S) L" using assms by (simp add:1)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2452
from this show ?thesis using assms aff_dim_parallel_subspace[of S L] by blast
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2453
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2454
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2455
lemma dim_affine_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2456
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2457
shows "dim (affine hull S)=dim S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2458
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2459
have "dim (affine hull S)>=dim S" using dim_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2460
moreover have "dim(span S) >= dim (affine hull S)" using dim_subset affine_hull_subset_span by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2461
moreover have "dim(span S)=dim S" using dim_span by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2462
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2463
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2464
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2465
lemma aff_dim_subspace:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2466
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2467
assumes "S ~= {}" "subspace S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2468
shows "aff_dim S=int(dim S)" using aff_dim_affine[of S S] assms subspace_imp_affine[of S] affine_parallel_reflex[of S] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2469
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2470
lemma aff_dim_zero:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2471
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2472
assumes "0 : affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2473
shows "aff_dim S=int(dim S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2474
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2475
have "subspace(affine hull S)" using subspace_affine[of "affine hull S"] affine_affine_hull assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2476
hence "aff_dim (affine hull S) =int(dim (affine hull S))" using assms aff_dim_subspace[of "affine hull S"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2477
from this show ?thesis using aff_dim_affine_hull[of S] dim_affine_hull[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2478
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2479
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2480
lemma aff_dim_univ: "aff_dim (UNIV :: ('n::euclidean_space) set) = int(DIM('n))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2481
  using aff_dim_subspace[of "(UNIV :: ('n::euclidean_space) set)"]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2482
    dim_UNIV[where 'a="'n::euclidean_space"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2483
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2484
lemma aff_dim_geq:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2485
  fixes V :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2486
  shows "aff_dim V >= -1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2487
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2488
obtain B where B_def: "affine hull B = affine hull V & ~ affine_dependent B & int (card B) = aff_dim V + 1" using aff_dim_basis_exists by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2489
from this show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2490
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2491
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2492
lemma independent_card_le_aff_dim:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2493
  assumes "(B::('n::euclidean_space) set) <= V"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2494
  assumes "~(affine_dependent B)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2495
  shows "int(card B) <= aff_dim V+1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2496
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2497
{ assume "B~={}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2498
  from this obtain T where T_def: "~(affine_dependent T) & B<=T & T<=V & affine hull T = affine hull V"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2499
  using assms extend_to_affine_basis[of B V] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2500
  hence "of_nat(card T) = aff_dim V+1" using aff_dim_unique by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2501
  hence ?thesis using T_def card_mono[of T B] aff_independent_finite[of T] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2502
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2503
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2504
{ assume "B={}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2505
  moreover have "-1<= aff_dim V" using aff_dim_geq by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2506
  ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2507
}  ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2508
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2509
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2510
lemma aff_dim_subset:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2511
  fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2512
  assumes "S <= T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2513
  shows "aff_dim S <= aff_dim T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2514
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2515
obtain B where B_def: "~(affine_dependent B) & B<=S & (affine hull B=affine hull S) & of_nat(card B) = aff_dim S+1" using aff_dim_inner_basis_exists[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2516
moreover hence "int (card B) <= aff_dim T + 1" using assms independent_card_le_aff_dim[of B T] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2517
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2518
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2519
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2520
lemma aff_dim_subset_univ:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2521
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2522
shows "aff_dim S <= int(DIM('n))"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2523
proof -
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2524
  have "aff_dim (UNIV :: ('n::euclidean_space) set) = int(DIM('n))" using aff_dim_univ by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2525
  from this show "aff_dim (S:: ('n::euclidean_space) set) <= int(DIM('n))" using assms aff_dim_subset[of S "(UNIV :: ('n::euclidean_space) set)"] subset_UNIV by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2526
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2527
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2528
lemma affine_dim_equal:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2529
assumes "affine (S :: ('n::euclidean_space) set)" "affine T" "S ~= {}" "S <= T" "aff_dim S = aff_dim T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2530
shows "S=T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2531
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2532
obtain a where "a : S" using assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2533
hence "a : T" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2534
def LS == "{y. ? x : S. (-a)+x=y}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2535
hence ls: "subspace LS & affine_parallel S LS" using assms parallel_subspace_explicit[of S a LS] `a : S` by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2536
hence h1: "int(dim LS) = aff_dim S" using assms aff_dim_affine[of S LS] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2537
have "T ~= {}" using assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2538
def LT == "{y. ? x : T. (-a)+x=y}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2539
hence lt: "subspace LT & affine_parallel T LT" using assms parallel_subspace_explicit[of T a LT] `a : T` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2540
hence "int(dim LT) = aff_dim T" using assms aff_dim_affine[of T LT] `T ~= {}` by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2541
hence "dim LS = dim LT" using h1 assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2542
moreover have "LS <= LT" using LS_def LT_def assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2543
ultimately have "LS=LT" using subspace_dim_equal[of LS LT] ls lt by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2544
moreover have "S = {x. ? y : LS. a+y=x}" using LS_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2545
moreover have "T = {x. ? y : LT. a+y=x}" using LT_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2546
ultimately show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2547
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2548
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2549
lemma affine_hull_univ:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2550
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2551
assumes "aff_dim S = int(DIM('n))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2552
shows "affine hull S = (UNIV :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2553
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2554
have "S ~= {}" using assms aff_dim_empty[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2555
have h0: "S <= affine hull S" using hull_subset[of S _] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2556
have h1: "aff_dim (UNIV :: ('n::euclidean_space) set) = aff_dim S" using aff_dim_univ assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2557
hence h2: "aff_dim (affine hull S) <= aff_dim (UNIV :: ('n::euclidean_space) set)" using aff_dim_subset_univ[of "affine hull S"] assms h0 by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2558
have h3: "aff_dim S <= aff_dim (affine hull S)" using h0 aff_dim_subset[of S "affine hull S"] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2559
hence h4: "aff_dim (affine hull S) = aff_dim (UNIV :: ('n::euclidean_space) set)" using h0 h1 h2 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2560
from this show ?thesis using affine_dim_equal[of "affine hull S" "(UNIV :: ('n::euclidean_space) set)"] affine_affine_hull[of S] affine_UNIV assms h4 h0 `S ~= {}` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2561
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2562
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2563
lemma aff_dim_convex_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2564
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2565
shows "aff_dim (convex hull S)=aff_dim S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2566
  using aff_dim_affine_hull[of S] convex_hull_subset_affine_hull[of S]
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2567
  hull_subset[of S "convex"] aff_dim_subset[of S "convex hull S"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2568
  aff_dim_subset[of "convex hull S" "affine hull S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2569
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2570
lemma aff_dim_cball:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2571
fixes a :: "'n::euclidean_space"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2572
assumes "0<e"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2573
shows "aff_dim (cball a e) = int (DIM('n))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2574
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2575
have "(%x. a + x) ` (cball 0 e)<=cball a e" unfolding cball_def dist_norm by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2576
hence "aff_dim (cball (0 :: 'n::euclidean_space) e) <= aff_dim (cball a e)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2577
  using aff_dim_translation_eq[of a "cball 0 e"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2578
        aff_dim_subset[of "op + a ` cball 0 e" "cball a e"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2579
moreover have "aff_dim (cball (0 :: 'n::euclidean_space) e) = int (DIM('n))"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2580
   using hull_inc[of "(0 :: 'n::euclidean_space)" "cball 0 e"] centre_in_cball[of "(0 :: 'n::euclidean_space)"] assms
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2581
   by (simp add: dim_cball[of e] aff_dim_zero[of "cball 0 e"])
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2582
ultimately show ?thesis using aff_dim_subset_univ[of "cball a e"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2583
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2584
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2585
lemma aff_dim_open:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2586
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2587
assumes "open S" "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2588
shows "aff_dim S = int (DIM('n))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2589
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2590
obtain x where "x:S" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2591
from this obtain e where e_def: "e>0 & cball x e <= S" using open_contains_cball[of S] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2592
from this have "aff_dim (cball x e) <= aff_dim S" using aff_dim_subset by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2593
from this show ?thesis using aff_dim_cball[of e x] aff_dim_subset_univ[of S] e_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2594
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2595
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2596
lemma low_dim_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2597
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2598
assumes "~(aff_dim S = int (DIM('n)))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2599
shows "interior S = {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2600
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2601
have "aff_dim(interior S) <= aff_dim S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2602
   using interior_subset aff_dim_subset[of "interior S" S] by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2603
from this show ?thesis using aff_dim_open[of "interior S"] aff_dim_subset_univ[of S] assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2604
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2605
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  2606
subsection {* Relative interior of a set *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2607
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2608
definition "rel_interior S = {x. ? T. openin (subtopology euclidean (affine hull S)) T & x : T & T <= S}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2609
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2610
lemma rel_interior: "rel_interior S = {x : S. ? T. open T & x : T & (T Int (affine hull S)) <= S}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2611
  unfolding rel_interior_def[of S] openin_open[of "affine hull S"] apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2612
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2613
fix x T assume a: "x:S" "open T" "x : T" "(T Int (affine hull S)) <= S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2614
hence h1: "x : T Int affine hull S" using hull_inc by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2615
show "EX Tb. (EX Ta. open Ta & Tb = affine hull S Int Ta) & x : Tb & Tb <= S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2616
apply (rule_tac x="T Int (affine hull S)" in exI)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2617
using a h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2618
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2619
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2620
lemma mem_rel_interior:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2621
     "x : rel_interior S <-> (? T. open T & x : (T Int S) & (T Int (affine hull S)) <= S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2622
     by (auto simp add: rel_interior)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2623
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2624
lemma mem_rel_interior_ball: "x : rel_interior S <-> x : S & (? e. 0 < e & ((ball x e) Int (affine hull S)) <= S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2625
  apply (simp add: rel_interior, safe)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2626
  apply (force simp add: open_contains_ball)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2627
  apply (rule_tac x="ball x e" in exI)
44457
d366fa5551ef declare euclidean_simps [simp] at the point they are proved;
huffman
parents: 44365
diff changeset
  2628
  apply simp
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2629
  done
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2630
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2631
lemma rel_interior_ball:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2632
      "rel_interior S = {x : S. ? e. e>0 & ((ball x e) Int (affine hull S)) <= S}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2633
      using mem_rel_interior_ball [of _ S] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2634
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2635
lemma mem_rel_interior_cball: "x : rel_interior S <-> x : S & (? e. 0 < e & ((cball x e) Int (affine hull S)) <= S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2636
  apply (simp add: rel_interior, safe)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2637
  apply (force simp add: open_contains_cball)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2638
  apply (rule_tac x="ball x e" in exI)
44457
d366fa5551ef declare euclidean_simps [simp] at the point they are proved;
huffman
parents: 44365
diff changeset
  2639
  apply (simp add: subset_trans [OF ball_subset_cball])
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2640
  apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2641
  done
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2642
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2643
lemma rel_interior_cball: "rel_interior S = {x : S. ? e. e>0 & ((cball x e) Int (affine hull S)) <= S}"       using mem_rel_interior_cball [of _ S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2644
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2645
lemma rel_interior_empty: "rel_interior {} = {}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2646
   by (auto simp add: rel_interior_def)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2647
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2648
lemma affine_hull_sing: "affine hull {a :: 'n::euclidean_space} = {a}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2649
by (metis affine_hull_eq affine_sing)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2650
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2651
lemma rel_interior_sing: "rel_interior {a :: 'n::euclidean_space} = {a}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2652
   unfolding rel_interior_ball affine_hull_sing apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2653
   apply(rule_tac x="1 :: real" in exI) apply simp
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2654
   done
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2655
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2656
lemma subset_rel_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2657
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2658
assumes "S<=T" "affine hull S=affine hull T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2659
shows "rel_interior S <= rel_interior T"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2660
  using assms by (auto simp add: rel_interior_def)
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2661
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2662
lemma rel_interior_subset: "rel_interior S <= S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2663
   by (auto simp add: rel_interior_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2664
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2665
lemma rel_interior_subset_closure: "rel_interior S <= closure S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2666
   using rel_interior_subset by (auto simp add: closure_def)
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2667
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2668
lemma interior_subset_rel_interior: "interior S <= rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2669
   by (auto simp add: rel_interior interior_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2670
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2671
lemma interior_rel_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2672
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2673
assumes "aff_dim S = int(DIM('n))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2674
shows "rel_interior S = interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2675
proof -
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2676
have "affine hull S = UNIV" using assms affine_hull_univ[of S] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2677
from this show ?thesis unfolding rel_interior interior_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2678
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2679
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2680
lemma rel_interior_open:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2681
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2682
assumes "open S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2683
shows "rel_interior S = S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2684
by (metis assms interior_eq interior_subset_rel_interior rel_interior_subset set_eq_subset)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2685
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2686
lemma interior_rel_interior_gen:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2687
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2688
shows "interior S = (if aff_dim S = int(DIM('n)) then rel_interior S else {})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2689
by (metis interior_rel_interior low_dim_interior)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2690
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2691
lemma rel_interior_univ:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2692
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2693
shows "rel_interior (affine hull S) = affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2694
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2695
have h1: "rel_interior (affine hull S) <= affine hull S" using rel_interior_subset by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2696
{ fix x assume x_def: "x : affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2697
  obtain e :: real where "e=1" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2698
  hence "e>0 & ball x e Int affine hull (affine hull S) <= affine hull S" using hull_hull[of _ S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2699
  hence "x : rel_interior (affine hull S)" using x_def rel_interior_ball[of "affine hull S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2700
} from this show ?thesis using h1 by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2701
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2702
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2703
lemma rel_interior_univ2: "rel_interior (UNIV :: ('n::euclidean_space) set) = UNIV"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2704
by (metis open_UNIV rel_interior_open)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2705
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2706
lemma rel_interior_convex_shrink:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2707
  fixes S :: "('a::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2708
  assumes "convex S" "c : rel_interior S" "x : S" "0 < e" "e <= 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2709
  shows "x - e *\<^sub>R (x - c) : rel_interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2710
proof-
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2711
(* Proof is a modified copy of the proof of similar lemma mem_interior_convex_shrink
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2712
*)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2713
obtain d where "d>0" and d:"ball c d Int affine hull S <= S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2714
  using assms(2) unfolding  mem_rel_interior_ball by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2715
{   fix y assume as:"dist (x - e *\<^sub>R (x - c)) y < e * d & y : affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2716
    have *:"y = (1 - (1 - e)) *\<^sub>R ((1 / e) *\<^sub>R y - ((1 - e) / e) *\<^sub>R x) + (1 - e) *\<^sub>R x" using `e>0` by (auto simp add: scaleR_left_diff_distrib scaleR_right_diff_distrib)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2717
    have "x : affine hull S" using assms hull_subset[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2718
    moreover have "1 / e + - ((1 - e) / e) = 1"
44282
f0de18b62d63 remove bounded_(bi)linear locale interpretations, to avoid duplicating so many lemmas
huffman
parents: 44170
diff changeset
  2719
       using `e>0` left_diff_distrib[of "1" "(1-e)" "1/e"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2720
    ultimately have **: "(1 / e) *\<^sub>R y - ((1 - e) / e) *\<^sub>R x : affine hull S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2721
        using as affine_affine_hull[of S] mem_affine[of "affine hull S" y x "(1 / e)" "-((1 - e) / e)"] by (simp add: algebra_simps)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2722
    have "dist c ((1 / e) *\<^sub>R y - ((1 - e) / e) *\<^sub>R x) = abs(1/e) * norm (e *\<^sub>R c - y + (1 - e) *\<^sub>R x)"
49530
wenzelm
parents: 49529
diff changeset
  2723
      unfolding dist_norm unfolding norm_scaleR[symmetric] apply(rule arg_cong[where f=norm]) using `e>0`
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  2724
      by(auto simp add:euclidean_eq_iff[where 'a='a] field_simps inner_simps)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2725
    also have "... = abs(1/e) * norm (x - e *\<^sub>R (x - c) - y)" by(auto intro!:arg_cong[where f=norm] simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2726
    also have "... < d" using as[unfolded dist_norm] and `e>0`
45051
c478d1876371 discontinued legacy theorem names from RealDef.thy
huffman
parents: 44890
diff changeset
  2727
      by(auto simp add:pos_divide_less_eq[OF `e>0`] mult_commute)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2728
    finally have "y : S" apply(subst *)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2729
apply(rule assms(1)[unfolded convex_alt,rule_format])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2730
      apply(rule d[unfolded subset_eq,rule_format]) unfolding mem_ball using assms(3-5) ** by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2731
} hence "ball (x - e *\<^sub>R (x - c)) (e*d) Int affine hull S <= S" by auto
45051
c478d1876371 discontinued legacy theorem names from RealDef.thy
huffman
parents: 44890
diff changeset
  2732
moreover have "0 < e*d" using `0<e` `0<d` by (rule mult_pos_pos)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2733
moreover have "c : S" using assms rel_interior_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2734
moreover hence "x - e *\<^sub>R (x - c) : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2735
   using mem_convex[of S x c e] apply (simp add: algebra_simps) using assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2736
ultimately show ?thesis
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2737
  using mem_rel_interior_ball[of "x - e *\<^sub>R (x - c)" S] `e>0` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2738
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2739
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2740
lemma interior_real_semiline:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2741
fixes a :: real
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2742
shows "interior {a..} = {a<..}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2743
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2744
{ fix y assume "a<y" hence "y : interior {a..}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2745
  apply (simp add: mem_interior) apply (rule_tac x="(y-a)" in exI) apply (auto simp add: dist_norm)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2746
  done }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2747
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2748
{ fix y assume "y : interior {a..}" (*hence "a<=y" using interior_subset by auto*)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2749
  from this obtain e where e_def: "e>0 & cball y e \<subseteq> {a..}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2750
     using mem_interior_cball[of y "{a..}"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2751
  moreover hence "y-e : cball y e" by (auto simp add: cball_def dist_norm)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2752
  ultimately have "a<=y-e" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2753
  hence "a<y" using e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2754
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2755
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2756
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2757
lemma rel_interior_real_interval:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2758
  fixes a b :: real assumes "a < b" shows "rel_interior {a..b} = {a<..<b}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2759
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2760
  have "{a<..<b} \<noteq> {}" using assms unfolding set_eq_iff by (auto intro!: exI[of _ "(a + b) / 2"])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2761
  then show ?thesis
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2762
    using interior_rel_interior_gen[of "{a..b}", symmetric]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2763
    by (simp split: split_if_asm add: interior_closed_interval)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2764
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2765
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2766
lemma rel_interior_real_semiline:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2767
  fixes a :: real shows "rel_interior {a..} = {a<..}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2768
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2769
  have *: "{a<..} \<noteq> {}" unfolding set_eq_iff by (auto intro!: exI[of _ "a + 1"])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2770
  then show ?thesis using interior_real_semiline
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2771
     interior_rel_interior_gen[of "{a..}"]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2772
     by (auto split: split_if_asm)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2773
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2774
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  2775
subsubsection {* Relative open sets *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2776
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2777
definition "rel_open S <-> (rel_interior S) = S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2778
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2779
lemma rel_open: "rel_open S <-> openin (subtopology euclidean (affine hull S)) S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2780
 unfolding rel_open_def rel_interior_def apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2781
 using openin_subopen[of "subtopology euclidean (affine hull S)" S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2782
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2783
lemma opein_rel_interior:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2784
  "openin (subtopology euclidean (affine hull S)) (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2785
  apply (simp add: rel_interior_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2786
  apply (subst openin_subopen) by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2787
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2788
lemma affine_rel_open:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2789
  fixes S :: "('n::euclidean_space) set"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2790
  assumes "affine S" shows "rel_open S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2791
  unfolding rel_open_def using assms rel_interior_univ[of S] affine_hull_eq[of S] by metis
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2792
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2793
lemma affine_closed:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2794
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2795
  assumes "affine S" shows "closed S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2796
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2797
{ assume "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2798
  from this obtain L where L_def: "subspace L & affine_parallel S L"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2799
     using assms affine_parallel_subspace[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2800
  from this obtain "a" where a_def: "S=(op + a ` L)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2801
     using affine_parallel_def[of L S] affine_parallel_commut by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2802
  have "closed L" using L_def closed_subspace by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2803
  hence "closed S" using closed_translation a_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2804
} from this show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2805
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2806
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2807
lemma closure_affine_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2808
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2809
  shows "closure S <= affine hull S"
44524
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
  2810
  by (intro closure_minimal hull_subset affine_closed affine_affine_hull)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2811
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2812
lemma closure_same_affine_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2813
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2814
  shows "affine hull (closure S) = affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2815
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2816
have "affine hull (closure S) <= affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2817
   using hull_mono[of "closure S" "affine hull S" "affine"] closure_affine_hull[of S] hull_hull[of "affine" S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2818
moreover have "affine hull (closure S) >= affine hull S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2819
   using hull_mono[of "S" "closure S" "affine"] closure_subset by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2820
ultimately show ?thesis by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2821
qed
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2822
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2823
lemma closure_aff_dim:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2824
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2825
  shows "aff_dim (closure S) = aff_dim S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2826
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2827
have "aff_dim S <= aff_dim (closure S)" using aff_dim_subset closure_subset by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2828
moreover have "aff_dim (closure S) <= aff_dim (affine hull S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2829
  using aff_dim_subset closure_affine_hull by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2830
moreover have "aff_dim (affine hull S) = aff_dim S" using aff_dim_affine_hull by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2831
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2832
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2833
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2834
lemma rel_interior_closure_convex_shrink:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2835
  fixes S :: "(_::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2836
  assumes "convex S" "c : rel_interior S" "x : closure S" "0 < e" "e <= 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2837
  shows "x - e *\<^sub>R (x - c) : rel_interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2838
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2839
(* Proof is a modified copy of the proof of similar lemma mem_interior_closure_convex_shrink
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2840
*)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2841
obtain d where "d>0" and d:"ball c d Int affine hull S <= S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2842
  using assms(2) unfolding mem_rel_interior_ball by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2843
have "EX y : S. norm (y - x) * (1 - e) < e * d" proof(cases "x : S")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2844
    case True thus ?thesis using `e>0` `d>0` by(rule_tac bexI[where x=x], auto intro!: mult_pos_pos) next
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2845
    case False hence x:"x islimpt S" using assms(3)[unfolded closure_def] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2846
    show ?thesis proof(cases "e=1")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2847
      case True obtain y where "y : S" "y ~= x" "dist y x < 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2848
        using x[unfolded islimpt_approachable,THEN spec[where x=1]] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2849
      thus ?thesis apply(rule_tac x=y in bexI) unfolding True using `d>0` by auto next
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2850
      case False hence "0 < e * d / (1 - e)" and *:"1 - e > 0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2851
        using `e<=1` `e>0` `d>0` by(auto intro!:mult_pos_pos divide_pos_pos)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2852
      then obtain y where "y : S" "y ~= x" "dist y x < e * d / (1 - e)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2853
        using x[unfolded islimpt_approachable,THEN spec[where x="e*d / (1 - e)"]] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2854
      thus ?thesis apply(rule_tac x=y in bexI) unfolding dist_norm using pos_less_divide_eq[OF *] by auto qed qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2855
  then obtain y where "y : S" and y:"norm (y - x) * (1 - e) < e * d" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2856
  def z == "c + ((1 - e) / e) *\<^sub>R (x - y)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2857
  have *:"x - e *\<^sub>R (x - c) = y - e *\<^sub>R (y - z)" unfolding z_def using `e>0` by (auto simp add: scaleR_right_diff_distrib scaleR_right_distrib scaleR_left_diff_distrib)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2858
  have zball: "z\<in>ball c d"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2859
    using mem_ball z_def dist_norm[of c] using y and assms(4,5) by (auto simp add:field_simps norm_minus_commute)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2860
  have "x : affine hull S" using closure_affine_hull assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2861
  moreover have "y : affine hull S" using `y : S` hull_subset[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2862
  moreover have "c : affine hull S" using assms rel_interior_subset hull_subset[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2863
  ultimately have "z : affine hull S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2864
    using z_def affine_affine_hull[of S]
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2865
          mem_affine_3_minus [of "affine hull S" c x y "(1 - e) / e"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2866
          assms by (auto simp add: field_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2867
  hence "z : S" using d zball by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2868
  obtain d1 where "d1>0" and d1:"ball z d1 <= ball c d"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2869
    using zball open_ball[of c d] openE[of "ball c d" z] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2870
  hence "(ball z d1) Int (affine hull S) <= (ball c d) Int (affine hull S)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2871
  hence "(ball z d1) Int (affine hull S) <= S" using d by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2872
  hence "z : rel_interior S" using mem_rel_interior_ball using `d1>0` `z : S` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2873
  hence "y - e *\<^sub>R (y - z) : rel_interior S" using rel_interior_convex_shrink[of S z y e] assms`y : S` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2874
  thus ?thesis using * by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2875
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2876
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  2877
subsubsection{* Relative interior preserves under linear transformations *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2878
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2879
lemma rel_interior_translation_aux:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2880
fixes a :: "'n::euclidean_space"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2881
shows "((%x. a + x) ` rel_interior S) <= rel_interior ((%x. a + x) ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2882
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2883
{ fix x assume x_def: "x : rel_interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2884
  from this obtain T where T_def: "open T & x : (T Int S) & (T Int (affine hull S)) <= S" using mem_rel_interior[of x S] by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2885
  from this have "open ((%x. a + x) ` T)" and
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2886
    "(a + x) : (((%x. a + x) ` T) Int ((%x. a + x) ` S))" and
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2887
    "(((%x. a + x) ` T) Int (affine hull ((%x. a + x) ` S))) <= ((%x. a + x) ` S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2888
    using affine_hull_translation[of a S] open_translation[of T a] x_def by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2889
  from this have "(a+x) : rel_interior ((%x. a + x) ` S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2890
    using mem_rel_interior[of "a+x" "((%x. a + x) ` S)"] by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2891
} from this show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2892
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2893
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2894
lemma rel_interior_translation:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2895
fixes a :: "'n::euclidean_space"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2896
shows "rel_interior ((%x. a + x) ` S) = ((%x. a + x) ` rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2897
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2898
have "(%x. (-a) + x) ` rel_interior ((%x. a + x) ` S) <= rel_interior S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2899
   using rel_interior_translation_aux[of "-a" "(%x. a + x) ` S"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2900
         translation_assoc[of "-a" "a"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2901
hence "((%x. a + x) ` rel_interior S) >= rel_interior ((%x. a + x) ` S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2902
   using translation_inverse_subset[of a "rel_interior (op + a ` S)" "rel_interior S"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2903
   by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2904
from this show ?thesis using  rel_interior_translation_aux[of a S] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2905
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2906
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2907
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2908
lemma affine_hull_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2909
assumes "bounded_linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2910
shows "f ` (affine hull s) = affine hull f ` s"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2911
(* Proof is a modified copy of the proof of similar lemma convex_hull_linear_image
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2912
*)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2913
  apply rule unfolding subset_eq ball_simps apply(rule_tac[!] hull_induct, rule hull_inc) prefer 3
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2914
  apply(erule imageE)apply(rule_tac x=xa in image_eqI) apply assumption
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2915
  apply(rule hull_subset[unfolded subset_eq, rule_format]) apply assumption
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2916
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2917
  interpret f: bounded_linear f by fact
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2918
  show "affine {x. f x : affine hull f ` s}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2919
  unfolding affine_def by(auto simp add: f.scaleR f.add affine_affine_hull[unfolded affine_def, rule_format]) next
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2920
  interpret f: bounded_linear f by fact
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2921
  show "affine {x. x : f ` (affine hull s)}" using affine_affine_hull[unfolded affine_def, of s]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2922
    unfolding affine_def by (auto simp add: f.scaleR [symmetric] f.add [symmetric])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2923
qed auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2924
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2925
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2926
lemma rel_interior_injective_on_span_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2927
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2928
fixes S :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2929
assumes "bounded_linear f" and "inj_on f (span S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2930
shows "rel_interior (f ` S) = f ` (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2931
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2932
{ fix z assume z_def: "z : rel_interior (f ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2933
  have "z : f ` S" using z_def rel_interior_subset[of "f ` S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2934
  from this obtain x where x_def: "x : S & (f x = z)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2935
  obtain e2 where e2_def: "e2>0 & cball z e2 Int affine hull (f ` S) <= (f ` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2936
    using z_def rel_interior_cball[of "f ` S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2937
  obtain K where K_def: "K>0 & (! x. norm (f x) <= norm x * K)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2938
   using assms RealVector.bounded_linear.pos_bounded[of f] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2939
  def e1 == "1/K" hence e1_def: "e1>0 & (! x. e1 * norm (f x) <= norm x)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2940
   using K_def pos_le_divide_eq[of e1] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2941
  def e == "e1 * e2" hence "e>0" using e1_def e2_def mult_pos_pos by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2942
  { fix y assume y_def: "y : cball x e Int affine hull S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2943
    from this have h1: "f y : affine hull (f ` S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2944
      using affine_hull_linear_image[of f S] assms by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2945
    from y_def have "norm (x-y)<=e1 * e2"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2946
      using cball_def[of x e] dist_norm[of x y] e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2947
    moreover have "(f x)-(f y)=f (x-y)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2948
       using assms linear_sub[of f x y] linear_conv_bounded_linear[of f] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2949
    moreover have "e1 * norm (f (x-y)) <= norm (x-y)" using e1_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2950
    ultimately have "e1 * norm ((f x)-(f y)) <= e1 * e2" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2951
    hence "(f y) : (cball z e2)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2952
      using cball_def[of "f x" e2] dist_norm[of "f x" "f y"] e1_def x_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2953
    hence "f y : (f ` S)" using y_def e2_def h1 by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2954
    hence "y : S" using assms y_def hull_subset[of S] affine_hull_subset_span
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2955
         inj_on_image_mem_iff[of f "span S" S y] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2956
  }
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2957
  hence "z : f ` (rel_interior S)" using mem_rel_interior_cball[of x S] `e>0` x_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2958
}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2959
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2960
{ fix x assume x_def: "x : rel_interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2961
  from this obtain e2 where e2_def: "e2>0 & cball x e2 Int affine hull S <= S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2962
    using rel_interior_cball[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2963
  have "x : S" using x_def rel_interior_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2964
  hence *: "f x : f ` S" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2965
  have "! x:span S. f x = 0 --> x = 0"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2966
    using assms subspace_span linear_conv_bounded_linear[of f]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2967
          linear_injective_on_subspace_0[of f "span S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2968
  from this obtain e1 where e1_def: "e1>0 & (! x : span S. e1 * norm x <= norm (f x))"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2969
   using assms injective_imp_isometric[of "span S" f]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2970
         subspace_span[of S] closed_subspace[of "span S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2971
  def e == "e1 * e2" hence "e>0" using e1_def e2_def mult_pos_pos by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2972
  { fix y assume y_def: "y : cball (f x) e Int affine hull (f ` S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2973
    from this have "y : f ` (affine hull S)" using affine_hull_linear_image[of f S] assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2974
    from this obtain xy where xy_def: "xy : affine hull S & (f xy = y)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2975
    from this y_def have "norm ((f x)-(f xy))<=e1 * e2"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2976
      using cball_def[of "f x" e] dist_norm[of "f x" y] e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2977
    moreover have "(f x)-(f xy)=f (x-xy)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2978
       using assms linear_sub[of f x xy] linear_conv_bounded_linear[of f] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2979
    moreover have "x-xy : span S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2980
       using subspace_sub[of "span S" x xy] subspace_span `x : S` xy_def
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2981
             affine_hull_subset_span[of S] span_inc by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2982
    moreover hence "e1 * norm (x-xy) <= norm (f (x-xy))" using e1_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2983
    ultimately have "e1 * norm (x-xy) <= e1 * e2" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2984
    hence "xy : (cball x e2)"  using cball_def[of x e2] dist_norm[of x xy] e1_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2985
    hence "y : (f ` S)" using xy_def e2_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2986
  }
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2987
  hence "(f x) : rel_interior (f ` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2988
     using mem_rel_interior_cball[of "(f x)" "(f ` S)"] * `e>0` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2989
}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2990
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2991
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2992
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2993
lemma rel_interior_injective_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2994
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2995
assumes "bounded_linear f" and "inj f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2996
shows "rel_interior (f ` S) = f ` (rel_interior S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2997
using assms rel_interior_injective_on_span_linear_image[of f S]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2998
      subset_inj_on[of f "UNIV" "span S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2999
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3000
subsection{* Some Properties of subset of standard basis *}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3001
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  3002
lemma affine_hull_substd_basis: assumes "d\<subseteq>Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  3003
  shows "affine hull (insert 0 d) =
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  3004
  {x::'a::euclidean_space. (\<forall>i\<in>Basis. i ~: d --> x\<bullet>i = 0)}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3005
 (is "affine hull (insert 0 ?A) = ?B")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3006
proof- have *:"\<And>A. op + (0\<Colon>'a) ` A = A" "\<And>A. op + (- (0\<Colon>'a)) ` A = A" by auto
49530
wenzelm
parents: 49529
diff changeset
  3007
  show ?thesis unfolding affine_hull_insert_span_gen span_substd_basis[OF assms,symmetric] * ..
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3008
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3009
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3010
lemma affine_hull_convex_hull: "affine hull (convex hull S) = affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3011
by (metis Int_absorb1 Int_absorb2 convex_hull_subset_affine_hull hull_hull hull_mono hull_subset)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3012
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3013
subsection {* Openness and compactness are preserved by convex hull operation. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3014
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  3015
lemma open_convex_hull[intro]:
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3016
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3017
  assumes "open s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3018
  shows "open(convex hull s)"
43969
8adc47768db0 adjusted to tailored version of ball_simps
haftmann
parents: 41959
diff changeset
  3019
  unfolding open_contains_cball convex_hull_explicit unfolding mem_Collect_eq ball_simps(8)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3020
proof(rule, rule) fix a
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3021
  assume "\<exists>sa u. finite sa \<and> sa \<subseteq> s \<and> (\<forall>x\<in>sa. 0 \<le> u x) \<and> setsum u sa = 1 \<and> (\<Sum>v\<in>sa. u v *\<^sub>R v) = a"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3022
  then obtain t u where obt:"finite t" "t\<subseteq>s" "\<forall>x\<in>t. 0 \<le> u x" "setsum u t = 1" "(\<Sum>v\<in>t. u v *\<^sub>R v) = a" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3023
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3024
  from assms[unfolded open_contains_cball] obtain b where b:"\<forall>x\<in>s. 0 < b x \<and> cball x (b x) \<subseteq> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3025
    using bchoice[of s "\<lambda>x e. e>0 \<and> cball x e \<subseteq> s"] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3026
  have "b ` t\<noteq>{}" unfolding i_def using obt by auto  def i \<equiv> "b ` t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3027
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3028
  show "\<exists>e>0. cball a e \<subseteq> {y. \<exists>sa u. finite sa \<and> sa \<subseteq> s \<and> (\<forall>x\<in>sa. 0 \<le> u x) \<and> setsum u sa = 1 \<and> (\<Sum>v\<in>sa. u v *\<^sub>R v) = y}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3029
    apply(rule_tac x="Min i" in exI) unfolding subset_eq apply rule defer apply rule unfolding mem_Collect_eq
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3030
  proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3031
    show "0 < Min i" unfolding i_def and Min_gr_iff[OF finite_imageI[OF obt(1)] `b \` t\<noteq>{}`]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3032
      using b apply simp apply rule apply(erule_tac x=x in ballE) using `t\<subseteq>s` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3033
  next  fix y assume "y \<in> cball a (Min i)"
49530
wenzelm
parents: 49529
diff changeset
  3034
    hence y:"norm (a - y) \<le> Min i" unfolding dist_norm[symmetric] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3035
    { fix x assume "x\<in>t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3036
      hence "Min i \<le> b x" unfolding i_def apply(rule_tac Min_le) using obt(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3037
      hence "x + (y - a) \<in> cball x (b x)" using y unfolding mem_cball dist_norm by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3038
      moreover from `x\<in>t` have "x\<in>s" using obt(2) by auto
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  3039
      ultimately have "x + (y - a) \<in> s" using y and b[THEN bspec[where x=x]] unfolding subset_eq by fast }
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3040
    moreover
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3041
    have *:"inj_on (\<lambda>v. v + (y - a)) t" unfolding inj_on_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3042
    have "(\<Sum>v\<in>(\<lambda>v. v + (y - a)) ` t. u (v - (y - a))) = 1"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3043
      unfolding setsum_reindex[OF *] o_def using obt(4) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3044
    moreover have "(\<Sum>v\<in>(\<lambda>v. v + (y - a)) ` t. u (v - (y - a)) *\<^sub>R v) = y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3045
      unfolding setsum_reindex[OF *] o_def using obt(4,5)
49530
wenzelm
parents: 49529
diff changeset
  3046
      by (simp add: setsum_addf setsum_subtractf scaleR_left.setsum[symmetric] scaleR_right_distrib)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3047
    ultimately show "\<exists>sa u. finite sa \<and> (\<forall>x\<in>sa. x \<in> s) \<and> (\<forall>x\<in>sa. 0 \<le> u x) \<and> setsum u sa = 1 \<and> (\<Sum>v\<in>sa. u v *\<^sub>R v) = y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3048
      apply(rule_tac x="(\<lambda>v. v + (y - a)) ` t" in exI) apply(rule_tac x="\<lambda>v. u (v - (y - a))" in exI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3049
      using obt(1, 3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3050
  qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3051
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3052
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3053
lemma compact_convex_combinations:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3054
  fixes s t :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3055
  assumes "compact s" "compact t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3056
  shows "compact { (1 - u) *\<^sub>R x + u *\<^sub>R y | x y u. 0 \<le> u \<and> u \<le> 1 \<and> x \<in> s \<and> y \<in> t}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3057
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3058
  let ?X = "{0..1} \<times> s \<times> t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3059
  let ?h = "(\<lambda>z. (1 - fst z) *\<^sub>R fst (snd z) + fst z *\<^sub>R snd (snd z))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3060
  have *:"{ (1 - u) *\<^sub>R x + u *\<^sub>R y | x y u. 0 \<le> u \<and> u \<le> 1 \<and> x \<in> s \<and> y \<in> t} = ?h ` ?X"
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  3061
    apply(rule set_eqI) unfolding image_iff mem_Collect_eq
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3062
    apply rule apply auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3063
    apply (rule_tac x=u in rev_bexI, simp)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3064
    apply (erule rev_bexI, erule rev_bexI, simp)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3065
    by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3066
  have "continuous_on ({0..1} \<times> s \<times> t)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3067
     (\<lambda>z. (1 - fst z) *\<^sub>R fst (snd z) + fst z *\<^sub>R snd (snd z))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3068
    unfolding continuous_on by (rule ballI) (intro tendsto_intros)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3069
  thus ?thesis unfolding *
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3070
    apply (rule compact_continuous_image)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3071
    apply (intro compact_Times compact_interval assms)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3072
    done
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3073
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3074
44525
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3075
lemma finite_imp_compact_convex_hull:
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3076
  fixes s :: "('a::real_normed_vector) set"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3077
  assumes "finite s" shows "compact (convex hull s)"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3078
proof (cases "s = {}")
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3079
  case True thus ?thesis by simp
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3080
next
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3081
  case False with assms show ?thesis
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3082
  proof (induct rule: finite_ne_induct)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3083
    case (singleton x) show ?case by simp
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3084
  next
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3085
    case (insert x A)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3086
    let ?f = "\<lambda>(u, y::'a). u *\<^sub>R x + (1 - u) *\<^sub>R y"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3087
    let ?T = "{0..1::real} \<times> (convex hull A)"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3088
    have "continuous_on ?T ?f"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3089
      unfolding split_def continuous_on by (intro ballI tendsto_intros)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3090
    moreover have "compact ?T"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3091
      by (intro compact_Times compact_interval insert)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3092
    ultimately have "compact (?f ` ?T)"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3093
      by (rule compact_continuous_image)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3094
    also have "?f ` ?T = convex hull (insert x A)"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3095
      unfolding convex_hull_insert [OF `A \<noteq> {}`]
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3096
      apply safe
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3097
      apply (rule_tac x=a in exI, simp)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3098
      apply (rule_tac x="1 - a" in exI, simp)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3099
      apply fast
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3100
      apply (rule_tac x="(u, b)" in image_eqI, simp_all)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3101
      done
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3102
    finally show "compact (convex hull (insert x A))" .
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3103
  qed
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3104
qed
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3105
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3106
lemma compact_convex_hull: fixes s::"('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3107
  assumes "compact s"  shows "compact(convex hull s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3108
proof(cases "s={}")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3109
  case True thus ?thesis using compact_empty by simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3110
next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3111
  case False then obtain w where "w\<in>s" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3112
  show ?thesis unfolding caratheodory[of s]
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3113
  proof(induct ("DIM('a) + 1"))
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3114
    have *:"{x.\<exists>sa. finite sa \<and> sa \<subseteq> s \<and> card sa \<le> 0 \<and> x \<in> convex hull sa} = {}"
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  3115
      using compact_empty by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3116
    case 0 thus ?case unfolding * by simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3117
  next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3118
    case (Suc n)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3119
    show ?case proof(cases "n=0")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3120
      case True have "{x. \<exists>t. finite t \<and> t \<subseteq> s \<and> card t \<le> Suc n \<and> x \<in> convex hull t} = s"
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  3121
        unfolding set_eq_iff and mem_Collect_eq proof(rule, rule)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3122
        fix x assume "\<exists>t. finite t \<and> t \<subseteq> s \<and> card t \<le> Suc n \<and> x \<in> convex hull t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3123
        then obtain t where t:"finite t" "t \<subseteq> s" "card t \<le> Suc n" "x \<in> convex hull t" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3124
        show "x\<in>s" proof(cases "card t = 0")
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  3125
          case True thus ?thesis using t(4) unfolding card_0_eq[OF t(1)] by simp
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3126
        next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3127
          case False hence "card t = Suc 0" using t(3) `n=0` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3128
          then obtain a where "t = {a}" unfolding card_Suc_eq by auto
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  3129
          thus ?thesis using t(2,4) by simp
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3130
        qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3131
      next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3132
        fix x assume "x\<in>s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3133
        thus "\<exists>t. finite t \<and> t \<subseteq> s \<and> card t \<le> Suc n \<and> x \<in> convex hull t"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3134
          apply(rule_tac x="{x}" in exI) unfolding convex_hull_singleton by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3135
      qed thus ?thesis using assms by simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3136
    next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3137
      case False have "{x. \<exists>t. finite t \<and> t \<subseteq> s \<and> card t \<le> Suc n \<and> x \<in> convex hull t} =
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3138
        { (1 - u) *\<^sub>R x + u *\<^sub>R y | x y u.
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3139
        0 \<le> u \<and> u \<le> 1 \<and> x \<in> s \<and> y \<in> {x. \<exists>t. finite t \<and> t \<subseteq> s \<and> card t \<le> n \<and> x \<in> convex hull t}}"
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  3140
        unfolding set_eq_iff and mem_Collect_eq proof(rule,rule)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3141
        fix x assume "\<exists>u v c. x = (1 - c) *\<^sub>R u + c *\<^sub>R v \<and>
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3142
          0 \<le> c \<and> c \<le> 1 \<and> u \<in> s \<and> (\<exists>t. finite t \<and> t \<subseteq> s \<and> card t \<le> n \<and> v \<in> convex hull t)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3143
        then obtain u v c t where obt:"x = (1 - c) *\<^sub>R u + c *\<^sub>R v"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3144
          "0 \<le> c \<and> c \<le> 1" "u \<in> s" "finite t" "t \<subseteq> s" "card t \<le> n"  "v \<in> convex hull t" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3145
        moreover have "(1 - c) *\<^sub>R u + c *\<^sub>R v \<in> convex hull insert u t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3146
          apply(rule mem_convex) using obt(2) and convex_convex_hull and hull_subset[of "insert u t" convex]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3147
          using obt(7) and hull_mono[of t "insert u t"] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3148
        ultimately show "\<exists>t. finite t \<and> t \<subseteq> s \<and> card t \<le> Suc n \<and> x \<in> convex hull t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3149
          apply(rule_tac x="insert u t" in exI) by (auto simp add: card_insert_if)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3150
      next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3151
        fix x assume "\<exists>t. finite t \<and> t \<subseteq> s \<and> card t \<le> Suc n \<and> x \<in> convex hull t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3152
        then obtain t where t:"finite t" "t \<subseteq> s" "card t \<le> Suc n" "x \<in> convex hull t" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3153
        let ?P = "\<exists>u v c. x = (1 - c) *\<^sub>R u + c *\<^sub>R v \<and>
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3154
          0 \<le> c \<and> c \<le> 1 \<and> u \<in> s \<and> (\<exists>t. finite t \<and> t \<subseteq> s \<and> card t \<le> n \<and> v \<in> convex hull t)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3155
        show ?P proof(cases "card t = Suc n")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3156
          case False hence "card t \<le> n" using t(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3157
          thus ?P apply(rule_tac x=w in exI, rule_tac x=x in exI, rule_tac x=1 in exI) using `w\<in>s` and t
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3158
            by(auto intro!: exI[where x=t])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3159
        next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3160
          case True then obtain a u where au:"t = insert a u" "a\<notin>u" apply(drule_tac card_eq_SucD) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3161
          show ?P proof(cases "u={}")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3162
            case True hence "x=a" using t(4)[unfolded au] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3163
            show ?P unfolding `x=a` apply(rule_tac x=a in exI, rule_tac x=a in exI, rule_tac x=1 in exI)
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  3164
              using t and `n\<noteq>0` unfolding au by(auto intro!: exI[where x="{a}"])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3165
          next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3166
            case False obtain ux vx b where obt:"ux\<ge>0" "vx\<ge>0" "ux + vx = 1" "b \<in> convex hull u" "x = ux *\<^sub>R a + vx *\<^sub>R b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3167
              using t(4)[unfolded au convex_hull_insert[OF False]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3168
            have *:"1 - vx = ux" using obt(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3169
            show ?P apply(rule_tac x=a in exI, rule_tac x=b in exI, rule_tac x=vx in exI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3170
              using obt and t(1-3) unfolding au and * using card_insert_disjoint[OF _ au(2)]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3171
              by(auto intro!: exI[where x=u])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3172
          qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3173
        qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3174
      qed
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3175
      thus ?thesis using compact_convex_combinations[OF assms Suc] by simp
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3176
    qed
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  3177
  qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3178
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3179
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3180
subsection {* Extremal points of a simplex are some vertices. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3181
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3182
lemma dist_increases_online:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3183
  fixes a b d :: "'a::real_inner"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3184
  assumes "d \<noteq> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3185
  shows "dist a (b + d) > dist a b \<or> dist a (b - d) > dist a b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3186
proof(cases "inner a d - inner b d > 0")
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3187
  case True hence "0 < inner d d + (inner a d * 2 - inner b d * 2)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3188
    apply(rule_tac add_pos_pos) using assms by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3189
  thus ?thesis apply(rule_tac disjI2) unfolding dist_norm and norm_eq_sqrt_inner and real_sqrt_less_iff
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3190
    by (simp add: algebra_simps inner_commute)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3191
next
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3192
  case False hence "0 < inner d d + (inner b d * 2 - inner a d * 2)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3193
    apply(rule_tac add_pos_nonneg) using assms by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3194
  thus ?thesis apply(rule_tac disjI1) unfolding dist_norm and norm_eq_sqrt_inner and real_sqrt_less_iff
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3195
    by (simp add: algebra_simps inner_commute)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3196
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3197
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3198
lemma norm_increases_online:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3199
  fixes d :: "'a::real_inner"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3200
  shows "d \<noteq> 0 \<Longrightarrow> norm(a + d) > norm a \<or> norm(a - d) > norm a"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3201
  using dist_increases_online[of d a 0] unfolding dist_norm by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3202
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3203
lemma simplex_furthest_lt:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3204
  fixes s::"'a::real_inner set" assumes "finite s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3205
  shows "\<forall>x \<in> (convex hull s).  x \<notin> s \<longrightarrow> (\<exists>y\<in>(convex hull s). norm(x - a) < norm(y - a))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3206
proof(induct_tac rule: finite_induct[of s])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3207
  fix x s assume as:"finite s" "x\<notin>s" "\<forall>x\<in>convex hull s. x \<notin> s \<longrightarrow> (\<exists>y\<in>convex hull s. norm (x - a) < norm (y - a))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3208
  show "\<forall>xa\<in>convex hull insert x s. xa \<notin> insert x s \<longrightarrow> (\<exists>y\<in>convex hull insert x s. norm (xa - a) < norm (y - a))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3209
  proof(rule,rule,cases "s = {}")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3210
    case False fix y assume y:"y \<in> convex hull insert x s" "y \<notin> insert x s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3211
    obtain u v b where obt:"u\<ge>0" "v\<ge>0" "u + v = 1" "b \<in> convex hull s" "y = u *\<^sub>R x + v *\<^sub>R b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3212
      using y(1)[unfolded convex_hull_insert[OF False]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3213
    show "\<exists>z\<in>convex hull insert x s. norm (y - a) < norm (z - a)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3214
    proof(cases "y\<in>convex hull s")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3215
      case True then obtain z where "z\<in>convex hull s" "norm (y - a) < norm (z - a)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3216
        using as(3)[THEN bspec[where x=y]] and y(2) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3217
      thus ?thesis apply(rule_tac x=z in bexI) unfolding convex_hull_insert[OF False] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3218
    next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3219
      case False show ?thesis  using obt(3) proof(cases "u=0", case_tac[!] "v=0")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3220
        assume "u=0" "v\<noteq>0" hence "y = b" using obt by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3221
        thus ?thesis using False and obt(4) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3222
      next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3223
        assume "u\<noteq>0" "v=0" hence "y = x" using obt by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3224
        thus ?thesis using y(2) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3225
      next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3226
        assume "u\<noteq>0" "v\<noteq>0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3227
        then obtain w where w:"w>0" "w<u" "w<v" using real_lbound_gt_zero[of u v] and obt(1,2) by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3228
        have "x\<noteq>b" proof(rule ccontr)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3229
          assume "\<not> x\<noteq>b" hence "y=b" unfolding obt(5)
49530
wenzelm
parents: 49529
diff changeset
  3230
            using obt(3) by(auto simp add: scaleR_left_distrib[symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3231
          thus False using obt(4) and False by simp qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3232
        hence *:"w *\<^sub>R (x - b) \<noteq> 0" using w(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3233
        show ?thesis using dist_increases_online[OF *, of a y]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3234
        proof(erule_tac disjE)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3235
          assume "dist a y < dist a (y + w *\<^sub>R (x - b))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3236
          hence "norm (y - a) < norm ((u + w) *\<^sub>R x + (v - w) *\<^sub>R b - a)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3237
            unfolding dist_commute[of a] unfolding dist_norm obt(5) by (simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3238
          moreover have "(u + w) *\<^sub>R x + (v - w) *\<^sub>R b \<in> convex hull insert x s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3239
            unfolding convex_hull_insert[OF `s\<noteq>{}`] and mem_Collect_eq
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3240
            apply(rule_tac x="u + w" in exI) apply rule defer
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3241
            apply(rule_tac x="v - w" in exI) using `u\<ge>0` and w and obt(3,4) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3242
          ultimately show ?thesis by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3243
        next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3244
          assume "dist a y < dist a (y - w *\<^sub>R (x - b))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3245
          hence "norm (y - a) < norm ((u - w) *\<^sub>R x + (v + w) *\<^sub>R b - a)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3246
            unfolding dist_commute[of a] unfolding dist_norm obt(5) by (simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3247
          moreover have "(u - w) *\<^sub>R x + (v + w) *\<^sub>R b \<in> convex hull insert x s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3248
            unfolding convex_hull_insert[OF `s\<noteq>{}`] and mem_Collect_eq
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3249
            apply(rule_tac x="u - w" in exI) apply rule defer
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3250
            apply(rule_tac x="v + w" in exI) using `u\<ge>0` and w and obt(3,4) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3251
          ultimately show ?thesis by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3252
        qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3253
      qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3254
    qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3255
  qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3256
qed (auto simp add: assms)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3257
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3258
lemma simplex_furthest_le:
44525
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3259
  fixes s :: "('a::real_inner) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3260
  assumes "finite s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3261
  shows "\<exists>y\<in>s. \<forall>x\<in>(convex hull s). norm(x - a) \<le> norm(y - a)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3262
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3263
  have "convex hull s \<noteq> {}" using hull_subset[of s convex] and assms(2) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3264
  then obtain x where x:"x\<in>convex hull s" "\<forall>y\<in>convex hull s. norm (y - a) \<le> norm (x - a)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3265
    using distance_attains_sup[OF finite_imp_compact_convex_hull[OF assms(1)], of a]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3266
    unfolding dist_commute[of a] unfolding dist_norm by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3267
  thus ?thesis proof(cases "x\<in>s")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3268
    case False then obtain y where "y\<in>convex hull s" "norm (x - a) < norm (y - a)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3269
      using simplex_furthest_lt[OF assms(1), THEN bspec[where x=x]] and x(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3270
    thus ?thesis using x(2)[THEN bspec[where x=y]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3271
  qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3272
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3273
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3274
lemma simplex_furthest_le_exists:
44525
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3275
  fixes s :: "('a::real_inner) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3276
  shows "finite s \<Longrightarrow> (\<forall>x\<in>(convex hull s). \<exists>y\<in>s. norm(x - a) \<le> norm(y - a))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3277
  using simplex_furthest_le[of s] by (cases "s={}")auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3278
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3279
lemma simplex_extremal_le:
44525
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3280
  fixes s :: "('a::real_inner) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3281
  assumes "finite s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3282
  shows "\<exists>u\<in>s. \<exists>v\<in>s. \<forall>x\<in>convex hull s. \<forall>y \<in> convex hull s. norm(x - y) \<le> norm(u - v)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3283
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3284
  have "convex hull s \<noteq> {}" using hull_subset[of s convex] and assms(2) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3285
  then obtain u v where obt:"u\<in>convex hull s" "v\<in>convex hull s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3286
    "\<forall>x\<in>convex hull s. \<forall>y\<in>convex hull s. norm (x - y) \<le> norm (u - v)"
50973
4a2c82644889 generalized diameter from real_normed_vector to metric_space
hoelzl
parents: 50804
diff changeset
  3287
    using compact_sup_maxdistance[OF finite_imp_compact_convex_hull[OF assms(1)]] by (auto simp: dist_norm)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3288
  thus ?thesis proof(cases "u\<notin>s \<or> v\<notin>s", erule_tac disjE)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3289
    assume "u\<notin>s" then obtain y where "y\<in>convex hull s" "norm (u - v) < norm (y - v)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3290
      using simplex_furthest_lt[OF assms(1), THEN bspec[where x=u]] and obt(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3291
    thus ?thesis using obt(3)[THEN bspec[where x=y], THEN bspec[where x=v]] and obt(2) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3292
  next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3293
    assume "v\<notin>s" then obtain y where "y\<in>convex hull s" "norm (v - u) < norm (y - u)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3294
      using simplex_furthest_lt[OF assms(1), THEN bspec[where x=v]] and obt(2) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3295
    thus ?thesis using obt(3)[THEN bspec[where x=u], THEN bspec[where x=y]] and obt(1)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3296
      by (auto simp add: norm_minus_commute)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3297
  qed auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3298
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3299
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3300
lemma simplex_extremal_le_exists:
44525
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3301
  fixes s :: "('a::real_inner) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3302
  shows "finite s \<Longrightarrow> x \<in> convex hull s \<Longrightarrow> y \<in> convex hull s
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3303
  \<Longrightarrow> (\<exists>u\<in>s. \<exists>v\<in>s. norm(x - y) \<le> norm(u - v))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3304
  using convex_hull_empty simplex_extremal_le[of s] by(cases "s={}")auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3305
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3306
subsection {* Closest point of a convex set is unique, with a continuous projection. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3307
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3308
definition
36337
87b6c83d7ed7 generalize constant closest_point
huffman
parents: 36071
diff changeset
  3309
  closest_point :: "'a::{real_inner,heine_borel} set \<Rightarrow> 'a \<Rightarrow> 'a" where
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3310
 "closest_point s a = (SOME x. x \<in> s \<and> (\<forall>y\<in>s. dist a x \<le> dist a y))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3311
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3312
lemma closest_point_exists:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3313
  assumes "closed s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3314
  shows  "closest_point s a \<in> s" "\<forall>y\<in>s. dist a (closest_point s a) \<le> dist a y"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3315
  unfolding closest_point_def apply(rule_tac[!] someI2_ex)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3316
  using distance_attains_inf[OF assms(1,2), of a] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3317
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3318
lemma closest_point_in_set:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3319
  "closed s \<Longrightarrow> s \<noteq> {} \<Longrightarrow> (closest_point s a) \<in> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3320
  by(meson closest_point_exists)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3321
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3322
lemma closest_point_le:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3323
  "closed s \<Longrightarrow> x \<in> s \<Longrightarrow> dist a (closest_point s a) \<le> dist a x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3324
  using closest_point_exists[of s] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3325
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3326
lemma closest_point_self:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3327
  assumes "x \<in> s"  shows "closest_point s x = x"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3328
  unfolding closest_point_def apply(rule some1_equality, rule ex1I[of _ x])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3329
  using assms by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3330
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3331
lemma closest_point_refl:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3332
 "closed s \<Longrightarrow> s \<noteq> {} \<Longrightarrow> (closest_point s x = x \<longleftrightarrow> x \<in> s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3333
  using closest_point_in_set[of s x] closest_point_self[of x s] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3334
36337
87b6c83d7ed7 generalize constant closest_point
huffman
parents: 36071
diff changeset
  3335
lemma closer_points_lemma:
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3336
  assumes "inner y z > 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3337
  shows "\<exists>u>0. \<forall>v>0. v \<le> u \<longrightarrow> norm(v *\<^sub>R z - y) < norm y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3338
proof- have z:"inner z z > 0" unfolding inner_gt_zero_iff using assms by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3339
  thus ?thesis using assms apply(rule_tac x="inner y z / inner z z" in exI) apply(rule) defer proof(rule+)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3340
    fix v assume "0<v" "v \<le> inner y z / inner z z"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3341
    thus "norm (v *\<^sub>R z - y) < norm y" unfolding norm_lt using z and assms
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3342
      by (simp add: field_simps inner_diff inner_commute mult_strict_left_mono[OF _ `0<v`])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3343
  qed(rule divide_pos_pos, auto) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3344
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3345
lemma closer_point_lemma:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3346
  assumes "inner (y - x) (z - x) > 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3347
  shows "\<exists>u>0. u \<le> 1 \<and> dist (x + u *\<^sub>R (z - x)) y < dist x y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3348
proof- obtain u where "u>0" and u:"\<forall>v>0. v \<le> u \<longrightarrow> norm (v *\<^sub>R (z - x) - (y - x)) < norm (y - x)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3349
    using closer_points_lemma[OF assms] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3350
  show ?thesis apply(rule_tac x="min u 1" in exI) using u[THEN spec[where x="min u 1"]] and `u>0`
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3351
    unfolding dist_norm by(auto simp add: norm_minus_commute field_simps) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3352
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3353
lemma any_closest_point_dot:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3354
  assumes "convex s" "closed s" "x \<in> s" "y \<in> s" "\<forall>z\<in>s. dist a x \<le> dist a z"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3355
  shows "inner (a - x) (y - x) \<le> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3356
proof(rule ccontr) assume "\<not> inner (a - x) (y - x) \<le> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3357
  then obtain u where u:"u>0" "u\<le>1" "dist (x + u *\<^sub>R (y - x)) a < dist x a" using closer_point_lemma[of a x y] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3358
  let ?z = "(1 - u) *\<^sub>R x + u *\<^sub>R y" have "?z \<in> s" using mem_convex[OF assms(1,3,4), of u] using u by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3359
  thus False using assms(5)[THEN bspec[where x="?z"]] and u(3) by (auto simp add: dist_commute algebra_simps) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3360
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3361
lemma any_closest_point_unique:
36337
87b6c83d7ed7 generalize constant closest_point
huffman
parents: 36071
diff changeset
  3362
  fixes x :: "'a::real_inner"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3363
  assumes "convex s" "closed s" "x \<in> s" "y \<in> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3364
  "\<forall>z\<in>s. dist a x \<le> dist a z" "\<forall>z\<in>s. dist a y \<le> dist a z"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3365
  shows "x = y" using any_closest_point_dot[OF assms(1-4,5)] and any_closest_point_dot[OF assms(1-2,4,3,6)]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3366
  unfolding norm_pths(1) and norm_le_square
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3367
  by (auto simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3368
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3369
lemma closest_point_unique:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3370
  assumes "convex s" "closed s" "x \<in> s" "\<forall>z\<in>s. dist a x \<le> dist a z"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3371
  shows "x = closest_point s a"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3372
  using any_closest_point_unique[OF assms(1-3) _ assms(4), of "closest_point s a"]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3373
  using closest_point_exists[OF assms(2)] and assms(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3374
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3375
lemma closest_point_dot:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3376
  assumes "convex s" "closed s" "x \<in> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3377
  shows "inner (a - closest_point s a) (x - closest_point s a) \<le> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3378
  apply(rule any_closest_point_dot[OF assms(1,2) _ assms(3)])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3379
  using closest_point_exists[OF assms(2)] and assms(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3380
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3381
lemma closest_point_lt:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3382
  assumes "convex s" "closed s" "x \<in> s" "x \<noteq> closest_point s a"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3383
  shows "dist a (closest_point s a) < dist a x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3384
  apply(rule ccontr) apply(rule_tac notE[OF assms(4)])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3385
  apply(rule closest_point_unique[OF assms(1-3), of a])
44890
22f665a2e91c new fastforce replacing fastsimp - less confusing name
nipkow
parents: 44821
diff changeset
  3386
  using closest_point_le[OF assms(2), of _ a] by fastforce
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3387
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3388
lemma closest_point_lipschitz:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3389
  assumes "convex s" "closed s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3390
  shows "dist (closest_point s x) (closest_point s y) \<le> dist x y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3391
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3392
  have "inner (x - closest_point s x) (closest_point s y - closest_point s x) \<le> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3393
       "inner (y - closest_point s y) (closest_point s x - closest_point s y) \<le> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3394
    apply(rule_tac[!] any_closest_point_dot[OF assms(1-2)])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3395
    using closest_point_exists[OF assms(2-3)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3396
  thus ?thesis unfolding dist_norm and norm_le
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3397
    using inner_ge_zero[of "(x - closest_point s x) - (y - closest_point s y)"]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3398
    by (simp add: inner_add inner_diff inner_commute) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3399
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3400
lemma continuous_at_closest_point:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3401
  assumes "convex s" "closed s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3402
  shows "continuous (at x) (closest_point s)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3403
  unfolding continuous_at_eps_delta
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3404
  using le_less_trans[OF closest_point_lipschitz[OF assms]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3405
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3406
lemma continuous_on_closest_point:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3407
  assumes "convex s" "closed s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3408
  shows "continuous_on t (closest_point s)"
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3409
by(metis continuous_at_imp_continuous_on continuous_at_closest_point[OF assms])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3410
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3411
subsubsection {* Various point-to-set separating/supporting hyperplane theorems. *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3412
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3413
lemma supporting_hyperplane_closed_point:
36337
87b6c83d7ed7 generalize constant closest_point
huffman
parents: 36071
diff changeset
  3414
  fixes z :: "'a::{real_inner,heine_borel}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3415
  assumes "convex s" "closed s" "s \<noteq> {}" "z \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3416
  shows "\<exists>a b. \<exists>y\<in>s. inner a z < b \<and> (inner a y = b) \<and> (\<forall>x\<in>s. inner a x \<ge> b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3417
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3418
  from distance_attains_inf[OF assms(2-3)] obtain y where "y\<in>s" and y:"\<forall>x\<in>s. dist z y \<le> dist z x" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3419
  show ?thesis apply(rule_tac x="y - z" in exI, rule_tac x="inner (y - z) y" in exI, rule_tac x=y in bexI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3420
    apply rule defer apply rule defer apply(rule, rule ccontr) using `y\<in>s` proof-
49530
wenzelm
parents: 49529
diff changeset
  3421
    show "inner (y - z) z < inner (y - z) y" apply(subst diff_less_iff(1)[symmetric])
wenzelm
parents: 49529
diff changeset
  3422
      unfolding inner_diff_right[symmetric] and inner_gt_zero_iff using `y\<in>s` `z\<notin>s` by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3423
  next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3424
    fix x assume "x\<in>s" have *:"\<forall>u. 0 \<le> u \<and> u \<le> 1 \<longrightarrow> dist z y \<le> dist z ((1 - u) *\<^sub>R y + u *\<^sub>R x)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3425
      using assms(1)[unfolded convex_alt] and y and `x\<in>s` and `y\<in>s` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3426
    assume "\<not> inner (y - z) y \<le> inner (y - z) x" then obtain v where
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3427
      "v>0" "v\<le>1" "dist (y + v *\<^sub>R (x - y)) z < dist y z" using closer_point_lemma[of z y x] apply - by (auto simp add: inner_diff)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3428
    thus False using *[THEN spec[where x=v]] by(auto simp add: dist_commute algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3429
  qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3430
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3431
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3432
lemma separating_hyperplane_closed_point:
36337
87b6c83d7ed7 generalize constant closest_point
huffman
parents: 36071
diff changeset
  3433
  fixes z :: "'a::{real_inner,heine_borel}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3434
  assumes "convex s" "closed s" "z \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3435
  shows "\<exists>a b. inner a z < b \<and> (\<forall>x\<in>s. inner a x > b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3436
proof(cases "s={}")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3437
  case True thus ?thesis apply(rule_tac x="-z" in exI, rule_tac x=1 in exI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3438
    using less_le_trans[OF _ inner_ge_zero[of z]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3439
next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3440
  case False obtain y where "y\<in>s" and y:"\<forall>x\<in>s. dist z y \<le> dist z x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3441
    using distance_attains_inf[OF assms(2) False] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3442
  show ?thesis apply(rule_tac x="y - z" in exI, rule_tac x="inner (y - z) z + (norm(y - z))\<twosuperior> / 2" in exI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3443
    apply rule defer apply rule proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3444
    fix x assume "x\<in>s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3445
    have "\<not> 0 < inner (z - y) (x - y)" apply(rule_tac notI) proof(drule closer_point_lemma)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3446
      assume "\<exists>u>0. u \<le> 1 \<and> dist (y + u *\<^sub>R (x - y)) z < dist y z"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3447
      then obtain u where "u>0" "u\<le>1" "dist (y + u *\<^sub>R (x - y)) z < dist y z" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3448
      thus False using y[THEN bspec[where x="y + u *\<^sub>R (x - y)"]]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3449
        using assms(1)[unfolded convex_alt, THEN bspec[where x=y]]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3450
        using `x\<in>s` `y\<in>s` by (auto simp add: dist_commute algebra_simps) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3451
    moreover have "0 < norm (y - z) ^ 2" using `y\<in>s` `z\<notin>s` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3452
    hence "0 < inner (y - z) (y - z)" unfolding power2_norm_eq_inner by simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3453
    ultimately show "inner (y - z) z + (norm (y - z))\<twosuperior> / 2 < inner (y - z) x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3454
      unfolding power2_norm_eq_inner and not_less by (auto simp add: field_simps inner_commute inner_diff)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3455
  qed(insert `y\<in>s` `z\<notin>s`, auto)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3456
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3457
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3458
lemma separating_hyperplane_closed_0:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3459
  assumes "convex (s::('a::euclidean_space) set)" "closed s" "0 \<notin> s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3460
  shows "\<exists>a b. a \<noteq> 0 \<and> 0 < b \<and> (\<forall>x\<in>s. inner a x > b)"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3461
  proof(cases "s={}")
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  3462
  case True
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  3463
  have "norm ((SOME i. i\<in>Basis)::'a) = 1" "(SOME i. i\<in>Basis) \<noteq> (0::'a)" defer
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  3464
    apply(subst norm_le_zero_iff[symmetric]) by (auto simp: SOME_Basis)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  3465
  thus ?thesis apply(rule_tac x="SOME i. i\<in>Basis" in exI, rule_tac x=1 in exI)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3466
    using True using DIM_positive[where 'a='a] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3467
next case False thus ?thesis using False using separating_hyperplane_closed_point[OF assms]
44282
f0de18b62d63 remove bounded_(bi)linear locale interpretations, to avoid duplicating so many lemmas
huffman
parents: 44170
diff changeset
  3468
    apply - apply(erule exE)+ unfolding inner_zero_right apply(rule_tac x=a in exI, rule_tac x=b in exI) by auto qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3469
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3470
subsubsection {* Now set-to-set for closed/compact sets *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3471
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3472
lemma separating_hyperplane_closed_compact:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3473
  assumes "convex (s::('a::euclidean_space) set)" "closed s" "convex t" "compact t" "t \<noteq> {}" "s \<inter> t = {}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3474
  shows "\<exists>a b. (\<forall>x\<in>s. inner a x < b) \<and> (\<forall>x\<in>t. inner a x > b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3475
proof(cases "s={}")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3476
  case True
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3477
  obtain b where b:"b>0" "\<forall>x\<in>t. norm x \<le> b" using compact_imp_bounded[OF assms(4)] unfolding bounded_pos by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3478
  obtain z::"'a" where z:"norm z = b + 1" using vector_choose_size[of "b + 1"] and b(1) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3479
  hence "z\<notin>t" using b(2)[THEN bspec[where x=z]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3480
  then obtain a b where ab:"inner a z < b" "\<forall>x\<in>t. b < inner a x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3481
    using separating_hyperplane_closed_point[OF assms(3) compact_imp_closed[OF assms(4)], of z] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3482
  thus ?thesis using True by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3483
next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3484
  case False then obtain y where "y\<in>s" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3485
  obtain a b where "0 < b" "\<forall>x\<in>{x - y |x y. x \<in> s \<and> y \<in> t}. b < inner a x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3486
    using separating_hyperplane_closed_point[OF convex_differences[OF assms(1,3)], of 0]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3487
    using closed_compact_differences[OF assms(2,4)] using assms(6) by(auto, blast)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3488
  hence ab:"\<forall>x\<in>s. \<forall>y\<in>t. b + inner a y < inner a x" apply- apply(rule,rule) apply(erule_tac x="x - y" in ballE) by (auto simp add: inner_diff)
33270
paulson
parents: 33175
diff changeset
  3489
  def k \<equiv> "Sup ((\<lambda>x. inner a x) ` t)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3490
  show ?thesis apply(rule_tac x="-a" in exI, rule_tac x="-(k + b / 2)" in exI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3491
    apply(rule,rule) defer apply(rule) unfolding inner_minus_left and neg_less_iff_less proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3492
    from ab have "((\<lambda>x. inner a x) ` t) *<= (inner a y - b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3493
      apply(erule_tac x=y in ballE) apply(rule setleI) using `y\<in>s` by auto
33270
paulson
parents: 33175
diff changeset
  3494
    hence k:"isLub UNIV ((\<lambda>x. inner a x) ` t) k" unfolding k_def apply(rule_tac Sup) using assms(5) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3495
    fix x assume "x\<in>t" thus "inner a x < (k + b / 2)" using `0<b` and isLubD2[OF k, of "inner a x"] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3496
  next
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3497
    fix x assume "x\<in>s"
33270
paulson
parents: 33175
diff changeset
  3498
    hence "k \<le> inner a x - b" unfolding k_def apply(rule_tac Sup_least) using assms(5)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3499
      using ab[THEN bspec[where x=x]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3500
    thus "k + b / 2 < inner a x" using `0 < b` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3501
  qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3502
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3503
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3504
lemma separating_hyperplane_compact_closed:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3505
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3506
  assumes "convex s" "compact s" "s \<noteq> {}" "convex t" "closed t" "s \<inter> t = {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3507
  shows "\<exists>a b. (\<forall>x\<in>s. inner a x < b) \<and> (\<forall>x\<in>t. inner a x > b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3508
proof- obtain a b where "(\<forall>x\<in>t. inner a x < b) \<and> (\<forall>x\<in>s. b < inner a x)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3509
    using separating_hyperplane_closed_compact[OF assms(4-5,1-2,3)] and assms(6) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3510
  thus ?thesis apply(rule_tac x="-a" in exI, rule_tac x="-b" in exI) by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3511
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3512
subsubsection {* General case without assuming closure and getting non-strict separation *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3513
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3514
lemma separating_hyperplane_set_0:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3515
  assumes "convex s" "(0::'a::euclidean_space) \<notin> s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3516
  shows "\<exists>a. a \<noteq> 0 \<and> (\<forall>x\<in>s. 0 \<le> inner a x)"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3517
proof- let ?k = "\<lambda>c. {x::'a. 0 \<le> inner c x}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3518
  have "frontier (cball 0 1) \<inter> (\<Inter> (?k ` s)) \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3519
    apply(rule compact_imp_fip) apply(rule compact_frontier[OF compact_cball])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3520
    defer apply(rule,rule,erule conjE) proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3521
    fix f assume as:"f \<subseteq> ?k ` s" "finite f"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3522
    obtain c where c:"f = ?k ` c" "c\<subseteq>s" "finite c" using finite_subset_image[OF as(2,1)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3523
    then obtain a b where ab:"a \<noteq> 0" "0 < b"  "\<forall>x\<in>convex hull c. b < inner a x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3524
      using separating_hyperplane_closed_0[OF convex_convex_hull, of c]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3525
      using finite_imp_compact_convex_hull[OF c(3), THEN compact_imp_closed] and assms(2)
49530
wenzelm
parents: 49529
diff changeset
  3526
      using subset_hull[of convex, OF assms(1), symmetric, of c] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3527
    hence "\<exists>x. norm x = 1 \<and> (\<forall>y\<in>c. 0 \<le> inner y x)" apply(rule_tac x="inverse(norm a) *\<^sub>R a" in exI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3528
       using hull_subset[of c convex] unfolding subset_eq and inner_scaleR
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3529
       apply- apply rule defer apply rule apply(rule mult_nonneg_nonneg)
44629
1cd782f3458b remove redundant lemma card_enum
huffman
parents: 44531
diff changeset
  3530
       by(auto simp add: inner_commute del: ballE elim!: ballE)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3531
    thus "frontier (cball 0 1) \<inter> \<Inter>f \<noteq> {}" unfolding c(1) frontier_cball dist_norm by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3532
  qed(insert closed_halfspace_ge, auto)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3533
  then obtain x where "norm x = 1" "\<forall>y\<in>s. x\<in>?k y" unfolding frontier_cball dist_norm by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3534
  thus ?thesis apply(rule_tac x=x in exI) by(auto simp add: inner_commute) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3535
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3536
lemma separating_hyperplane_sets:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3537
  assumes "convex s" "convex (t::('a::euclidean_space) set)" "s \<noteq> {}" "t \<noteq> {}" "s \<inter> t = {}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3538
  shows "\<exists>a b. a \<noteq> 0 \<and> (\<forall>x\<in>s. inner a x \<le> b) \<and> (\<forall>x\<in>t. inner a x \<ge> b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3539
proof- from separating_hyperplane_set_0[OF convex_differences[OF assms(2,1)]]
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3540
  obtain a where "a\<noteq>0" "\<forall>x\<in>{x - y |x y. x \<in> t \<and> y \<in> s}. 0 \<le> inner a x"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3541
    using assms(3-5) by auto
33270
paulson
parents: 33175
diff changeset
  3542
  hence "\<forall>x\<in>t. \<forall>y\<in>s. inner a y \<le> inner a x"
paulson
parents: 33175
diff changeset
  3543
    by (force simp add: inner_diff)
paulson
parents: 33175
diff changeset
  3544
  thus ?thesis
paulson
parents: 33175
diff changeset
  3545
    apply(rule_tac x=a in exI, rule_tac x="Sup ((\<lambda>x. inner a x) ` s)" in exI) using `a\<noteq>0`
paulson
parents: 33175
diff changeset
  3546
    apply auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3547
    apply (rule Sup[THEN isLubD2])
33270
paulson
parents: 33175
diff changeset
  3548
    prefer 4
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3549
    apply (rule Sup_least)
33270
paulson
parents: 33175
diff changeset
  3550
     using assms(3-5) apply (auto simp add: setle_def)
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3551
    apply metis
33270
paulson
parents: 33175
diff changeset
  3552
    done
paulson
parents: 33175
diff changeset
  3553
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3554
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3555
subsection {* More convexity generalities *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3556
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3557
lemma convex_closure:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3558
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3559
  assumes "convex s" shows "convex(closure s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3560
  unfolding convex_def Ball_def closure_sequential
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3561
  apply(rule,rule,rule,rule,rule,rule,rule,rule,rule) apply(erule_tac exE)+
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3562
  apply(rule_tac x="\<lambda>n. u *\<^sub>R xb n + v *\<^sub>R xc n" in exI) apply(rule,rule)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3563
  apply(rule assms[unfolded convex_def, rule_format]) prefer 6
44629
1cd782f3458b remove redundant lemma card_enum
huffman
parents: 44531
diff changeset
  3564
  by (auto del: tendsto_const intro!: tendsto_intros)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3565
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3566
lemma convex_interior:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3567
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3568
  assumes "convex s" shows "convex(interior s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3569
  unfolding convex_alt Ball_def mem_interior apply(rule,rule,rule,rule,rule,rule) apply(erule exE | erule conjE)+ proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3570
  fix x y u assume u:"0 \<le> u" "u \<le> (1::real)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3571
  fix e d assume ed:"ball x e \<subseteq> s" "ball y d \<subseteq> s" "0<d" "0<e"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3572
  show "\<exists>e>0. ball ((1 - u) *\<^sub>R x + u *\<^sub>R y) e \<subseteq> s" apply(rule_tac x="min d e" in exI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3573
    apply rule unfolding subset_eq defer apply rule proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3574
    fix z assume "z \<in> ball ((1 - u) *\<^sub>R x + u *\<^sub>R y) (min d e)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3575
    hence "(1- u) *\<^sub>R (z - u *\<^sub>R (y - x)) + u *\<^sub>R (z + (1 - u) *\<^sub>R (y - x)) \<in> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3576
      apply(rule_tac assms[unfolded convex_alt, rule_format])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3577
      using ed(1,2) and u unfolding subset_eq mem_ball Ball_def dist_norm by(auto simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3578
    thus "z \<in> s" using u by (auto simp add: algebra_simps) qed(insert u ed(3-4), auto) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3579
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  3580
lemma convex_hull_eq_empty[simp]: "convex hull s = {} \<longleftrightarrow> s = {}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3581
  using hull_subset[of s convex] convex_hull_empty by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3582
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3583
subsection {* Moving and scaling convex hulls. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3584
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3585
lemma convex_hull_translation_lemma:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3586
  "convex hull ((\<lambda>x. a + x) ` s) \<subseteq> (\<lambda>x. a + x) ` (convex hull s)"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  3587
by (metis convex_convex_hull convex_translation hull_minimal hull_subset image_mono)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3588
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3589
lemma convex_hull_bilemma: fixes neg
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3590
  assumes "(\<forall>s a. (convex hull (up a s)) \<subseteq> up a (convex hull s))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3591
  shows "(\<forall>s. up a (up (neg a) s) = s) \<and> (\<forall>s. up (neg a) (up a s) = s) \<and> (\<forall>s t a. s \<subseteq> t \<longrightarrow> up a s \<subseteq> up a t)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3592
  \<Longrightarrow> \<forall>s. (convex hull (up a s)) = up a (convex hull s)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3593
  using assms by(metis subset_antisym)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3594
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3595
lemma convex_hull_translation:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3596
  "convex hull ((\<lambda>x. a + x) ` s) = (\<lambda>x. a + x) ` (convex hull s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3597
  apply(rule convex_hull_bilemma[rule_format, of _ _ "\<lambda>a. -a"], rule convex_hull_translation_lemma) unfolding image_image by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3598
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3599
lemma convex_hull_scaling_lemma:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3600
 "(convex hull ((\<lambda>x. c *\<^sub>R x) ` s)) \<subseteq> (\<lambda>x. c *\<^sub>R x) ` (convex hull s)"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  3601
by (metis convex_convex_hull convex_scaling hull_subset subset_hull subset_image_iff)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3602
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3603
lemma convex_hull_scaling:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3604
  "convex hull ((\<lambda>x. c *\<^sub>R x) ` s) = (\<lambda>x. c *\<^sub>R x) ` (convex hull s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3605
  apply(cases "c=0") defer apply(rule convex_hull_bilemma[rule_format, of _ _ inverse]) apply(rule convex_hull_scaling_lemma)
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  3606
  unfolding image_image scaleR_scaleR by(auto simp add:image_constant_conv)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3607
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3608
lemma convex_hull_affinity:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3609
  "convex hull ((\<lambda>x. a + c *\<^sub>R x) ` s) = (\<lambda>x. a + c *\<^sub>R x) ` (convex hull s)"
49530
wenzelm
parents: 49529
diff changeset
  3610
by(simp only: image_image[symmetric] convex_hull_scaling convex_hull_translation)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3611
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3612
subsection {* Convexity of cone hulls *}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3613
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3614
lemma convex_cone_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3615
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3616
shows "convex (cone hull S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3617
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3618
{ fix x y assume xy_def: "x : cone hull S & y : cone hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3619
  hence "S ~= {}" using cone_hull_empty_iff[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3620
  fix u v assume uv_def: "u>=0 & v>=0 & (u :: real)+v=1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3621
  hence *: "u *\<^sub>R x : cone hull S & v *\<^sub>R y : cone hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3622
     using cone_cone_hull[of S] xy_def cone_def[of "cone hull S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3623
  from * obtain cx xx where x_def: "u *\<^sub>R x = cx *\<^sub>R xx & (cx :: real)>=0 & xx : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3624
     using cone_hull_expl[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3625
  from * obtain cy yy where y_def: "v *\<^sub>R y = cy *\<^sub>R yy & (cy :: real)>=0 & yy : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3626
     using cone_hull_expl[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3627
  { assume "cx+cy<=0" hence "u *\<^sub>R x=0 & v *\<^sub>R y=0" using x_def y_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3628
    hence "u *\<^sub>R x+ v *\<^sub>R y = 0" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3629
    hence "u *\<^sub>R x+ v *\<^sub>R y : cone hull S" using cone_hull_contains_0[of S] `S ~= {}` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3630
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3631
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3632
  { assume "cx+cy>0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3633
    hence "(cx/(cx+cy)) *\<^sub>R xx + (cy/(cx+cy)) *\<^sub>R yy : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3634
      using assms mem_convex_alt[of S xx yy cx cy] x_def y_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3635
    hence "cx *\<^sub>R xx + cy *\<^sub>R yy : cone hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3636
      using mem_cone_hull[of "(cx/(cx+cy)) *\<^sub>R xx + (cy/(cx+cy)) *\<^sub>R yy" S "cx+cy"]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3637
      `cx+cy>0` by (auto simp add: scaleR_right_distrib)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3638
    hence "u *\<^sub>R x+ v *\<^sub>R y : cone hull S" using x_def y_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3639
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3640
  moreover have "(cx+cy<=0) | (cx+cy>0)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3641
  ultimately have "u *\<^sub>R x+ v *\<^sub>R y : cone hull S" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3642
} from this show ?thesis unfolding convex_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3643
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3644
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3645
lemma cone_convex_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3646
assumes "cone S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3647
shows "cone (convex hull S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3648
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3649
{ assume "S = {}" hence ?thesis by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3650
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3651
{ assume "S ~= {}" hence *: "0:S & (!c. c>0 --> op *\<^sub>R c ` S = S)" using cone_iff[of S] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3652
  { fix c assume "(c :: real)>0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3653
    hence "op *\<^sub>R c ` (convex hull S) = convex hull (op *\<^sub>R c ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3654
       using convex_hull_scaling[of _ S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3655
    also have "...=convex hull S" using * `c>0` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3656
    finally have "op *\<^sub>R c ` (convex hull S) = convex hull S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3657
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3658
  hence "0 : convex hull S & (!c. c>0 --> (op *\<^sub>R c ` (convex hull S)) = (convex hull S))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3659
     using * hull_subset[of S convex] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3660
  hence ?thesis using `S ~= {}` cone_iff[of "convex hull S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3661
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3662
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3663
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3664
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3665
subsection {* Convex set as intersection of halfspaces *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3666
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3667
lemma convex_halfspace_intersection:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3668
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3669
  assumes "closed s" "convex s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3670
  shows "s = \<Inter> {h. s \<subseteq> h \<and> (\<exists>a b. h = {x. inner a x \<le> b})}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3671
  apply(rule set_eqI, rule) unfolding Inter_iff Ball_def mem_Collect_eq apply(rule,rule,erule conjE) proof-
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3672
  fix x  assume "\<forall>xa. s \<subseteq> xa \<and> (\<exists>a b. xa = {x. inner a x \<le> b}) \<longrightarrow> x \<in> xa"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3673
  hence "\<forall>a b. s \<subseteq> {x. inner a x \<le> b} \<longrightarrow> x \<in> {x. inner a x \<le> b}" by blast
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3674
  thus "x\<in>s" apply(rule_tac ccontr) apply(drule separating_hyperplane_closed_point[OF assms(2,1)])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3675
    apply(erule exE)+ apply(erule_tac x="-a" in allE, erule_tac x="-b" in allE) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3676
qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3677
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3678
subsection {* Radon's theorem (from Lars Schewe) *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3679
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3680
lemma radon_ex_lemma:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3681
  assumes "finite c" "affine_dependent c"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3682
  shows "\<exists>u. setsum u c = 0 \<and> (\<exists>v\<in>c. u v \<noteq> 0) \<and> setsum (\<lambda>v. u v *\<^sub>R v) c = 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3683
proof- from assms(2)[unfolded affine_dependent_explicit] guess s .. then guess u ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3684
  thus ?thesis apply(rule_tac x="\<lambda>v. if v\<in>s then u v else 0" in exI) unfolding if_smult scaleR_zero_left
49530
wenzelm
parents: 49529
diff changeset
  3685
    and setsum_restrict_set[OF assms(1), symmetric] by(auto simp add: Int_absorb1) qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3686
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3687
lemma radon_s_lemma:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3688
  assumes "finite s" "setsum f s = (0::real)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3689
  shows "setsum f {x\<in>s. 0 < f x} = - setsum f {x\<in>s. f x < 0}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3690
proof- have *:"\<And>x. (if f x < 0 then f x else 0) + (if 0 < f x then f x else 0) = f x" by auto
49530
wenzelm
parents: 49529
diff changeset
  3691
  show ?thesis unfolding real_add_eq_0_iff[symmetric] and setsum_restrict_set''[OF assms(1)] and setsum_addf[symmetric] and *
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3692
    using assms(2) by assumption qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3693
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3694
lemma radon_v_lemma:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3695
  assumes "finite s" "setsum f s = 0" "\<forall>x. g x = (0::real) \<longrightarrow> f x = (0::'a::euclidean_space)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3696
  shows "(setsum f {x\<in>s. 0 < g x}) = - setsum f {x\<in>s. g x < 0}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3697
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3698
  have *:"\<And>x. (if 0 < g x then f x else 0) + (if g x < 0 then f x else 0) = f x" using assms(3) by auto
49530
wenzelm
parents: 49529
diff changeset
  3699
  show ?thesis unfolding eq_neg_iff_add_eq_0 and setsum_restrict_set''[OF assms(1)] and setsum_addf[symmetric] and *
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3700
    using assms(2) by assumption qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3701
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3702
lemma radon_partition:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3703
  assumes "finite c" "affine_dependent c"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3704
  shows "\<exists>m p. m \<inter> p = {} \<and> m \<union> p = c \<and> (convex hull m) \<inter> (convex hull p) \<noteq> {}" proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3705
  obtain u v where uv:"setsum u c = 0" "v\<in>c" "u v \<noteq> 0"  "(\<Sum>v\<in>c. u v *\<^sub>R v) = 0" using radon_ex_lemma[OF assms] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3706
  have fin:"finite {x \<in> c. 0 < u x}" "finite {x \<in> c. 0 > u x}" using assms(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3707
  def z \<equiv> "(inverse (setsum u {x\<in>c. u x > 0})) *\<^sub>R setsum (\<lambda>x. u x *\<^sub>R x) {x\<in>c. u x > 0}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3708
  have "setsum u {x \<in> c. 0 < u x} \<noteq> 0" proof(cases "u v \<ge> 0")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3709
    case False hence "u v < 0" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3710
    thus ?thesis proof(cases "\<exists>w\<in>{x \<in> c. 0 < u x}. u w > 0")
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3711
      case True thus ?thesis using setsum_nonneg_eq_0_iff[of _ u, OF fin(1)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3712
    next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3713
      case False hence "setsum u c \<le> setsum (\<lambda>x. if x=v then u v else 0) c" apply(rule_tac setsum_mono) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3714
      thus ?thesis unfolding setsum_delta[OF assms(1)] using uv(2) and `u v < 0` and uv(1) by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3715
  qed (insert setsum_nonneg_eq_0_iff[of _ u, OF fin(1)] uv(2-3), auto)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3716
36778
739a9379e29b avoid using real-specific versions of generic lemmas
huffman
parents: 36725
diff changeset
  3717
  hence *:"setsum u {x\<in>c. u x > 0} > 0" unfolding less_le apply(rule_tac conjI, rule_tac setsum_nonneg) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3718
  moreover have "setsum u ({x \<in> c. 0 < u x} \<union> {x \<in> c. u x < 0}) = setsum u c"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3719
    "(\<Sum>x\<in>{x \<in> c. 0 < u x} \<union> {x \<in> c. u x < 0}. u x *\<^sub>R x) = (\<Sum>x\<in>c. u x *\<^sub>R x)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3720
    using assms(1) apply(rule_tac[!] setsum_mono_zero_left) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3721
  hence "setsum u {x \<in> c. 0 < u x} = - setsum u {x \<in> c. 0 > u x}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3722
   "(\<Sum>x\<in>{x \<in> c. 0 < u x}. u x *\<^sub>R x) = - (\<Sum>x\<in>{x \<in> c. 0 > u x}. u x *\<^sub>R x)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3723
    unfolding eq_neg_iff_add_eq_0 using uv(1,4) by (auto simp add:  setsum_Un_zero[OF fin, symmetric])
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3724
  moreover have "\<forall>x\<in>{v \<in> c. u v < 0}. 0 \<le> inverse (setsum u {x \<in> c. 0 < u x}) * - u x"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3725
    apply (rule) apply (rule mult_nonneg_nonneg) using * by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3726
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3727
  ultimately have "z \<in> convex hull {v \<in> c. u v \<le> 0}" unfolding convex_hull_explicit mem_Collect_eq
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3728
    apply(rule_tac x="{v \<in> c. u v < 0}" in exI, rule_tac x="\<lambda>y. inverse (setsum u {x\<in>c. u x > 0}) * - u y" in exI)
49530
wenzelm
parents: 49529
diff changeset
  3729
    using assms(1) unfolding scaleR_scaleR[symmetric] scaleR_right.setsum [symmetric] and z_def
wenzelm
parents: 49529
diff changeset
  3730
    by(auto simp add: setsum_negf setsum_right_distrib[symmetric])
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3731
  moreover have "\<forall>x\<in>{v \<in> c. 0 < u v}. 0 \<le> inverse (setsum u {x \<in> c. 0 < u x}) * u x"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3732
    apply (rule) apply (rule mult_nonneg_nonneg) using * by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3733
  hence "z \<in> convex hull {v \<in> c. u v > 0}" unfolding convex_hull_explicit mem_Collect_eq
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3734
    apply(rule_tac x="{v \<in> c. 0 < u v}" in exI, rule_tac x="\<lambda>y. inverse (setsum u {x\<in>c. u x > 0}) * u y" in exI)
49530
wenzelm
parents: 49529
diff changeset
  3735
    using assms(1) unfolding scaleR_scaleR[symmetric] scaleR_right.setsum [symmetric] and z_def using *
wenzelm
parents: 49529
diff changeset
  3736
    by(auto simp add: setsum_negf setsum_right_distrib[symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3737
  ultimately show ?thesis apply(rule_tac x="{v\<in>c. u v \<le> 0}" in exI, rule_tac x="{v\<in>c. u v > 0}" in exI) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3738
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3739
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3740
lemma radon: assumes "affine_dependent c"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3741
  obtains m p where "m\<subseteq>c" "p\<subseteq>c" "m \<inter> p = {}" "(convex hull m) \<inter> (convex hull p) \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3742
proof- from assms[unfolded affine_dependent_explicit] guess s .. then guess u ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3743
  hence *:"finite s" "affine_dependent s" and s:"s \<subseteq> c" unfolding affine_dependent_explicit by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3744
  from radon_partition[OF *] guess m .. then guess p ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3745
  thus ?thesis apply(rule_tac that[of p m]) using s by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3746
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3747
subsection {* Helly's theorem *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3748
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3749
lemma helly_induct: fixes f::"('a::euclidean_space) set set"
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3750
  assumes "card f = n" "n \<ge> DIM('a) + 1"
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3751
  "\<forall>s\<in>f. convex s" "\<forall>t\<subseteq>f. card t = DIM('a) + 1 \<longrightarrow> \<Inter> t \<noteq> {}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3752
  shows "\<Inter> f \<noteq> {}"
33715
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3753
using assms proof(induct n arbitrary: f)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3754
case (Suc n)
33715
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3755
have "finite f" using `card f = Suc n` by (auto intro: card_ge_0_finite)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3756
show "\<Inter> f \<noteq> {}" apply(cases "n = DIM('a)") apply(rule Suc(5)[rule_format])
33715
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3757
  unfolding `card f = Suc n` proof-
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3758
  assume ng:"n \<noteq> DIM('a)" hence "\<exists>X. \<forall>s\<in>f. X s \<in> \<Inter>(f - {s})" apply(rule_tac bchoice) unfolding ex_in_conv
33715
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3759
    apply(rule, rule Suc(1)[rule_format]) unfolding card_Diff_singleton_if[OF `finite f`] `card f = Suc n`
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3760
    defer defer apply(rule Suc(4)[rule_format]) defer apply(rule Suc(5)[rule_format]) using Suc(3) `finite f` by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3761
  then obtain X where X:"\<forall>s\<in>f. X s \<in> \<Inter>(f - {s})" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3762
  show ?thesis proof(cases "inj_on X f")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3763
    case False then obtain s t where st:"s\<noteq>t" "s\<in>f" "t\<in>f" "X s = X t" unfolding inj_on_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3764
    hence *:"\<Inter> f = \<Inter> (f - {s}) \<inter> \<Inter> (f - {t})" by auto
49530
wenzelm
parents: 49529
diff changeset
  3765
    show ?thesis unfolding * unfolding ex_in_conv[symmetric] apply(rule_tac x="X s" in exI)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3766
      apply(rule, rule X[rule_format]) using X st by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3767
  next case True then obtain m p where mp:"m \<inter> p = {}" "m \<union> p = X ` f" "convex hull m \<inter> convex hull p \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3768
      using radon_partition[of "X ` f"] and affine_dependent_biggerset[of "X ` f"]
33715
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3769
      unfolding card_image[OF True] and `card f = Suc n` using Suc(3) `finite f` and ng by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3770
    have "m \<subseteq> X ` f" "p \<subseteq> X ` f" using mp(2) by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3771
    then obtain g h where gh:"m = X ` g" "p = X ` h" "g \<subseteq> f" "h \<subseteq> f" unfolding subset_image_iff by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3772
    hence "f \<union> (g \<union> h) = f" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3773
    hence f:"f = g \<union> h" using inj_on_Un_image_eq_iff[of X f "g \<union> h"] and True
49530
wenzelm
parents: 49529
diff changeset
  3774
      unfolding mp(2)[unfolded image_Un[symmetric] gh] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3775
    have *:"g \<inter> h = {}" using mp(1) unfolding gh using inj_on_image_Int[OF True gh(3,4)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3776
    have "convex hull (X ` h) \<subseteq> \<Inter> g" "convex hull (X ` g) \<subseteq> \<Inter> h"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  3777
      apply(rule_tac [!] hull_minimal) using Suc gh(3-4)  unfolding subset_eq
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3778
      apply(rule_tac [2] convex_Inter, rule_tac [4] convex_Inter) apply rule prefer 3 apply rule proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3779
      fix x assume "x\<in>X ` g" then guess y unfolding image_iff ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3780
      thus "x\<in>\<Inter>h" using X[THEN bspec[where x=y]] using * f by auto next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3781
      fix x assume "x\<in>X ` h" then guess y unfolding image_iff ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3782
      thus "x\<in>\<Inter>g" using X[THEN bspec[where x=y]] using * f by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3783
    qed(auto)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3784
    thus ?thesis unfolding f using mp(3)[unfolded gh] by blast qed
37647
a5400b94d2dd minimize dependencies on Numeral_Type
huffman
parents: 37489
diff changeset
  3785
qed(auto) qed(auto)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3786
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3787
lemma helly: fixes f::"('a::euclidean_space) set set"
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3788
  assumes "card f \<ge> DIM('a) + 1" "\<forall>s\<in>f. convex s"
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3789
          "\<forall>t\<subseteq>f. card t = DIM('a) + 1 \<longrightarrow> \<Inter> t \<noteq> {}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3790
  shows "\<Inter> f \<noteq>{}"
33715
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3791
  apply(rule helly_induct) using assms by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3792
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3793
subsection {* Homeomorphism of all convex compact sets with nonempty interior *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3794
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3795
lemma compact_frontier_line_lemma:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3796
  fixes s :: "('a::euclidean_space) set"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3797
  assumes "compact s" "0 \<in> s" "x \<noteq> 0"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3798
  obtains u where "0 \<le> u" "(u *\<^sub>R x) \<in> frontier s" "\<forall>v>u. (v *\<^sub>R x) \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3799
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3800
  obtain b where b:"b>0" "\<forall>x\<in>s. norm x \<le> b" using compact_imp_bounded[OF assms(1), unfolded bounded_pos] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3801
  let ?A = "{y. \<exists>u. 0 \<le> u \<and> u \<le> b / norm(x) \<and> (y = u *\<^sub>R x)}"
36431
340755027840 move definitions and theorems for type real^1 to separate theory file
huffman
parents: 36365
diff changeset
  3802
  have A:"?A = (\<lambda>u. u *\<^sub>R x) ` {0 .. b / norm x}"
340755027840 move definitions and theorems for type real^1 to separate theory file
huffman
parents: 36365
diff changeset
  3803
    by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3804
  have *:"\<And>x A B. x\<in>A \<Longrightarrow> x\<in>B \<Longrightarrow> A\<inter>B \<noteq> {}" by blast
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3805
  have "compact ?A" unfolding A apply(rule compact_continuous_image, rule continuous_at_imp_continuous_on)
44647
e4de7750cdeb modernize lemmas about 'continuous' and 'continuous_on';
huffman
parents: 44629
diff changeset
  3806
    apply(rule, intro continuous_intros)
e4de7750cdeb modernize lemmas about 'continuous' and 'continuous_on';
huffman
parents: 44629
diff changeset
  3807
    by(rule compact_interval)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3808
  moreover have "{y. \<exists>u\<ge>0. u \<le> b / norm x \<and> y = u *\<^sub>R x} \<inter> s \<noteq> {}" apply(rule *[OF _ assms(2)])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3809
    unfolding mem_Collect_eq using `b>0` assms(3) by(auto intro!: divide_nonneg_pos)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3810
  ultimately obtain u y where obt: "u\<ge>0" "u \<le> b / norm x" "y = u *\<^sub>R x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3811
    "y\<in>?A" "y\<in>s" "\<forall>z\<in>?A \<inter> s. dist 0 z \<le> dist 0 y" using distance_attains_sup[OF compact_inter[OF _ assms(1), of ?A], of 0] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3812
49530
wenzelm
parents: 49529
diff changeset
  3813
  have "norm x > 0" using assms(3)[unfolded zero_less_norm_iff[symmetric]] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3814
  { fix v assume as:"v > u" "v *\<^sub>R x \<in> s"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3815
    hence "v \<le> b / norm x" using b(2)[rule_format, OF as(2)]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3816
      using `u\<ge>0` unfolding pos_le_divide_eq[OF `norm x > 0`] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3817
    hence "norm (v *\<^sub>R x) \<le> norm y" apply(rule_tac obt(6)[rule_format, unfolded dist_0_norm]) apply(rule IntI) defer
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3818
      apply(rule as(2)) unfolding mem_Collect_eq apply(rule_tac x=v in exI)
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3819
      using as(1) `u\<ge>0` by(auto simp add:field_simps)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3820
    hence False unfolding obt(3) using `u\<ge>0` `norm x > 0` `v>u` by(auto simp add:field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3821
  } note u_max = this
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3822
49530
wenzelm
parents: 49529
diff changeset
  3823
  have "u *\<^sub>R x \<in> frontier s" unfolding frontier_straddle apply(rule,rule,rule) apply(rule_tac x="u *\<^sub>R x" in bexI) unfolding obt(3)[symmetric]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3824
    prefer 3 apply(rule_tac x="(u + (e / 2) / norm x) *\<^sub>R x" in exI) apply(rule, rule) proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3825
    fix e  assume "0 < e" and as:"(u + e / 2 / norm x) *\<^sub>R x \<in> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3826
    hence "u + e / 2 / norm x > u" using`norm x > 0` by(auto simp del:zero_less_norm_iff intro!: divide_pos_pos)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3827
    thus False using u_max[OF _ as] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3828
  qed(insert `y\<in>s`, auto simp add: dist_norm scaleR_left_distrib obt(3))
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3829
  thus ?thesis by(metis that[of u] u_max obt(1))
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3830
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3831
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3832
lemma starlike_compact_projective:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3833
  assumes "compact s" "cball (0::'a::euclidean_space) 1 \<subseteq> s "
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3834
  "\<forall>x\<in>s. \<forall>u. 0 \<le> u \<and> u < 1 \<longrightarrow> (u *\<^sub>R x) \<in> (s - frontier s )"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3835
  shows "s homeomorphic (cball (0::'a::euclidean_space) 1)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3836
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3837
  have fs:"frontier s \<subseteq> s" apply(rule frontier_subset_closed) using compact_imp_closed[OF assms(1)] by simp
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3838
  def pi \<equiv> "\<lambda>x::'a. inverse (norm x) *\<^sub>R x"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3839
  have "0 \<notin> frontier s" unfolding frontier_straddle apply(rule ccontr) unfolding not_not apply(erule_tac x=1 in allE)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3840
    using assms(2)[unfolded subset_eq Ball_def mem_cball] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3841
  have injpi:"\<And>x y. pi x = pi y \<and> norm x = norm y \<longleftrightarrow> x = y" unfolding pi_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3842
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3843
  have contpi:"continuous_on (UNIV - {0}) pi" apply(rule continuous_at_imp_continuous_on)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3844
    apply rule unfolding pi_def
44647
e4de7750cdeb modernize lemmas about 'continuous' and 'continuous_on';
huffman
parents: 44629
diff changeset
  3845
    apply (intro continuous_intros)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3846
    apply simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3847
    done
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3848
  def sphere \<equiv> "{x::'a. norm x = 1}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3849
  have pi:"\<And>x. x \<noteq> 0 \<Longrightarrow> pi x \<in> sphere" "\<And>x u. u>0 \<Longrightarrow> pi (u *\<^sub>R x) = pi x" unfolding pi_def sphere_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3850
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3851
  have "0\<in>s" using assms(2) and centre_in_cball[of 0 1] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3852
  have front_smul:"\<forall>x\<in>frontier s. \<forall>u\<ge>0. u *\<^sub>R x \<in> s \<longleftrightarrow> u \<le> 1" proof(rule,rule,rule)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3853
    fix x u assume x:"x\<in>frontier s" and "(0::real)\<le>u"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3854
    hence "x\<noteq>0" using `0\<notin>frontier s` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3855
    obtain v where v:"0 \<le> v" "v *\<^sub>R x \<in> frontier s" "\<forall>w>v. w *\<^sub>R x \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3856
      using compact_frontier_line_lemma[OF assms(1) `0\<in>s` `x\<noteq>0`] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3857
    have "v=1" apply(rule ccontr) unfolding neq_iff apply(erule disjE) proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3858
      assume "v<1" thus False using v(3)[THEN spec[where x=1]] using x and fs by auto next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3859
      assume "v>1" thus False using assms(3)[THEN bspec[where x="v *\<^sub>R x"], THEN spec[where x="inverse v"]]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3860
        using v and x and fs unfolding inverse_less_1_iff by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3861
    show "u *\<^sub>R x \<in> s \<longleftrightarrow> u \<le> 1" apply rule  using v(3)[unfolded `v=1`, THEN spec[where x=u]] proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3862
      assume "u\<le>1" thus "u *\<^sub>R x \<in> s" apply(cases "u=1")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3863
        using assms(3)[THEN bspec[where x=x], THEN spec[where x=u]] using `0\<le>u` and x and fs by auto qed auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3864
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3865
  have "\<exists>surf. homeomorphism (frontier s) sphere pi surf"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3866
    apply(rule homeomorphism_compact) apply(rule compact_frontier[OF assms(1)])
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3867
    apply(rule continuous_on_subset[OF contpi]) defer apply(rule set_eqI,rule)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3868
    unfolding inj_on_def prefer 3 apply(rule,rule,rule)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3869
  proof- fix x assume "x\<in>pi ` frontier s" then obtain y where "y\<in>frontier s" "x = pi y" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3870
    thus "x \<in> sphere" using pi(1)[of y] and `0 \<notin> frontier s` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3871
  next fix x assume "x\<in>sphere" hence "norm x = 1" "x\<noteq>0" unfolding sphere_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3872
    then obtain u where "0 \<le> u" "u *\<^sub>R x \<in> frontier s" "\<forall>v>u. v *\<^sub>R x \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3873
      using compact_frontier_line_lemma[OF assms(1) `0\<in>s`, of x] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3874
    thus "x \<in> pi ` frontier s" unfolding image_iff le_less pi_def apply(rule_tac x="u *\<^sub>R x" in bexI) using `norm x = 1` `0\<notin>frontier s` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3875
  next fix x y assume as:"x \<in> frontier s" "y \<in> frontier s" "pi x = pi y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3876
    hence xys:"x\<in>s" "y\<in>s" using fs by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3877
    from as(1,2) have nor:"norm x \<noteq> 0" "norm y \<noteq> 0" using `0\<notin>frontier s` by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3878
    from nor have x:"x = norm x *\<^sub>R ((inverse (norm y)) *\<^sub>R y)" unfolding as(3)[unfolded pi_def, symmetric] by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3879
    from nor have y:"y = norm y *\<^sub>R ((inverse (norm x)) *\<^sub>R x)" unfolding as(3)[unfolded pi_def] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3880
    have "0 \<le> norm y * inverse (norm x)" "0 \<le> norm x * inverse (norm y)"
49530
wenzelm
parents: 49529
diff changeset
  3881
      unfolding divide_inverse[symmetric] apply(rule_tac[!] divide_nonneg_pos) using nor by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3882
    hence "norm x = norm y" apply(rule_tac ccontr) unfolding neq_iff
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3883
      using x y and front_smul[THEN bspec, OF as(1), THEN spec[where x="norm y * (inverse (norm x))"]]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3884
      using front_smul[THEN bspec, OF as(2), THEN spec[where x="norm x * (inverse (norm y))"]]
49530
wenzelm
parents: 49529
diff changeset
  3885
      using xys nor by(auto simp add:field_simps divide_le_eq_1 divide_inverse[symmetric])
wenzelm
parents: 49529
diff changeset
  3886
    thus "x = y" apply(subst injpi[symmetric]) using as(3) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3887
  qed(insert `0 \<notin> frontier s`, auto)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3888
  then obtain surf where surf:"\<forall>x\<in>frontier s. surf (pi x) = x"  "pi ` frontier s = sphere" "continuous_on (frontier s) pi"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3889
    "\<forall>y\<in>sphere. pi (surf y) = y" "surf ` sphere = frontier s" "continuous_on sphere surf" unfolding homeomorphism_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3890
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3891
  have cont_surfpi:"continuous_on (UNIV -  {0}) (surf \<circ> pi)" apply(rule continuous_on_compose, rule contpi)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3892
    apply(rule continuous_on_subset[of sphere], rule surf(6)) using pi(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3893
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3894
  { fix x assume as:"x \<in> cball (0::'a) 1"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3895
    have "norm x *\<^sub>R surf (pi x) \<in> s" proof(cases "x=0 \<or> norm x = 1")
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3896
      case False hence "pi x \<in> sphere" "norm x < 1" using pi(1)[of x] as by(auto simp add: dist_norm)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3897
      thus ?thesis apply(rule_tac assms(3)[rule_format, THEN DiffD1])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3898
        apply(rule_tac fs[unfolded subset_eq, rule_format])
49530
wenzelm
parents: 49529
diff changeset
  3899
        unfolding surf(5)[symmetric] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3900
    next case True thus ?thesis apply rule defer unfolding pi_def apply(rule fs[unfolded subset_eq, rule_format])
49530
wenzelm
parents: 49529
diff changeset
  3901
        unfolding  surf(5)[unfolded sphere_def, symmetric] using `0\<in>s` by auto qed } note hom = this
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3902
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3903
  { fix x assume "x\<in>s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3904
    hence "x \<in> (\<lambda>x. norm x *\<^sub>R surf (pi x)) ` cball 0 1" proof(cases "x=0")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3905
      case True show ?thesis unfolding image_iff True apply(rule_tac x=0 in bexI) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3906
    next let ?a = "inverse (norm (surf (pi x)))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3907
      case False hence invn:"inverse (norm x) \<noteq> 0" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3908
      from False have pix:"pi x\<in>sphere" using pi(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3909
      hence "pi (surf (pi x)) = pi x" apply(rule_tac surf(4)[rule_format]) by assumption
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3910
      hence **:"norm x *\<^sub>R (?a *\<^sub>R surf (pi x)) = x" apply(rule_tac scaleR_left_imp_eq[OF invn]) unfolding pi_def using invn by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3911
      hence *:"?a * norm x > 0" and"?a > 0" "?a \<noteq> 0" using surf(5) `0\<notin>frontier s` apply -
49530
wenzelm
parents: 49529
diff changeset
  3912
        apply(rule_tac mult_pos_pos) using False[unfolded zero_less_norm_iff[symmetric]] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3913
      have "norm (surf (pi x)) \<noteq> 0" using ** False by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3914
      hence "norm x = norm ((?a * norm x) *\<^sub>R surf (pi x))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3915
        unfolding norm_scaleR abs_mult abs_norm_cancel abs_of_pos[OF `?a > 0`] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3916
      moreover have "pi x = pi ((inverse (norm (surf (pi x))) * norm x) *\<^sub>R surf (pi x))"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3917
        unfolding pi(2)[OF *] surf(4)[rule_format, OF pix] ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3918
      moreover have "surf (pi x) \<in> frontier s" using surf(5) pix by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3919
      hence "dist 0 (inverse (norm (surf (pi x))) *\<^sub>R x) \<le> 1" unfolding dist_norm
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3920
        using ** and * using front_smul[THEN bspec[where x="surf (pi x)"], THEN spec[where x="norm x * ?a"]]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3921
        using False `x\<in>s` by(auto simp add:field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3922
      ultimately show ?thesis unfolding image_iff apply(rule_tac x="inverse (norm (surf(pi x))) *\<^sub>R x" in bexI)
49530
wenzelm
parents: 49529
diff changeset
  3923
        apply(subst injpi[symmetric]) unfolding abs_mult abs_norm_cancel abs_of_pos[OF `?a > 0`]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3924
        unfolding pi(2)[OF `?a > 0`] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3925
    qed } note hom2 = this
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3926
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3927
  show ?thesis apply(subst homeomorphic_sym) apply(rule homeomorphic_compact[where f="\<lambda>x. norm x *\<^sub>R surf (pi x)"])
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  3928
    apply(rule compact_cball) defer apply(rule set_eqI, rule, erule imageE, drule hom)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3929
    prefer 4 apply(rule continuous_at_imp_continuous_on, rule) apply(rule_tac [3] hom2) proof-
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3930
    fix x::"'a" assume as:"x \<in> cball 0 1"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3931
    thus "continuous (at x) (\<lambda>x. norm x *\<^sub>R surf (pi x))" proof(cases "x=0")
44647
e4de7750cdeb modernize lemmas about 'continuous' and 'continuous_on';
huffman
parents: 44629
diff changeset
  3932
      case False thus ?thesis apply (intro continuous_intros)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3933
        using cont_surfpi unfolding continuous_on_eq_continuous_at[OF open_delete[OF open_UNIV]] o_def by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3934
    next obtain B where B:"\<forall>x\<in>s. norm x \<le> B" using compact_imp_bounded[OF assms(1)] unfolding bounded_iff by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  3935
      hence "B > 0" using assms(2) unfolding subset_eq apply(erule_tac x="SOME i. i\<in>Basis" in ballE) defer
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  3936
        apply(erule_tac x="SOME i. i\<in>Basis" in ballE)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3937
        unfolding Ball_def mem_cball dist_norm using DIM_positive[where 'a='a]
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  3938
        by (auto simp: SOME_Basis)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3939
      case True show ?thesis unfolding True continuous_at Lim_at apply(rule,rule) apply(rule_tac x="e / B" in exI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3940
        apply(rule) apply(rule divide_pos_pos) prefer 3 apply(rule,rule,erule conjE)
36586
4fa71a69d5b2 remove redundant lemma norm_0
huffman
parents: 36583
diff changeset
  3941
        unfolding norm_zero scaleR_zero_left dist_norm diff_0_right norm_scaleR abs_norm_cancel proof-
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3942
        fix e and x::"'a" assume as:"norm x < e / B" "0 < norm x" "0<e"
49530
wenzelm
parents: 49529
diff changeset
  3943
        hence "surf (pi x) \<in> frontier s" using pi(1)[of x] unfolding surf(5)[symmetric] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3944
        hence "norm (surf (pi x)) \<le> B" using B fs by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3945
        hence "norm x * norm (surf (pi x)) \<le> norm x * B" using as(2) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3946
        also have "\<dots> < e / B * B" apply(rule mult_strict_right_mono) using as(1) `B>0` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3947
        also have "\<dots> = e" using `B>0` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3948
        finally show "norm x * norm (surf (pi x)) < e" by assumption
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3949
      qed(insert `B>0`, auto) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3950
  next { fix x assume as:"surf (pi x) = 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3951
      have "x = 0" proof(rule ccontr)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3952
        assume "x\<noteq>0" hence "pi x \<in> sphere" using pi(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3953
        hence "surf (pi x) \<in> frontier s" using surf(5) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3954
        thus False using `0\<notin>frontier s` unfolding as by simp qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3955
    } note surf_0 = this
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3956
    show "inj_on (\<lambda>x. norm x *\<^sub>R surf (pi x)) (cball 0 1)" unfolding inj_on_def proof(rule,rule,rule)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3957
      fix x y assume as:"x \<in> cball 0 1" "y \<in> cball 0 1" "norm x *\<^sub>R surf (pi x) = norm y *\<^sub>R surf (pi y)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3958
      thus "x=y" proof(cases "x=0 \<or> y=0")
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3959
        case True thus ?thesis using as by(auto elim: surf_0) next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3960
        case False
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3961
        hence "pi (surf (pi x)) = pi (surf (pi y))" using as(3)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3962
          using pi(2)[of "norm x" "surf (pi x)"] pi(2)[of "norm y" "surf (pi y)"] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3963
        moreover have "pi x \<in> sphere" "pi y \<in> sphere" using pi(1) False by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3964
        ultimately have *:"pi x = pi y" using surf(4)[THEN bspec[where x="pi x"]] surf(4)[THEN bspec[where x="pi y"]] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3965
        moreover have "norm x = norm y" using as(3)[unfolded *] using False by(auto dest:surf_0)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3966
        ultimately show ?thesis using injpi by auto qed qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3967
  qed auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3968
44519
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3969
lemma homeomorphic_convex_compact_lemma:
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3970
  fixes s :: "('a::euclidean_space) set"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3971
  assumes "convex s" and "compact s" and "cball 0 1 \<subseteq> s"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3972
  shows "s homeomorphic (cball (0::'a) 1)"
44519
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3973
proof (rule starlike_compact_projective[OF assms(2-3)], clarify)
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3974
  fix x u assume "x \<in> s" and "0 \<le> u" and "u < (1::real)"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3975
  have "open (ball (u *\<^sub>R x) (1 - u))" by (rule open_ball)
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3976
  moreover have "u *\<^sub>R x \<in> ball (u *\<^sub>R x) (1 - u)"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3977
    unfolding centre_in_ball using `u < 1` by simp
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3978
  moreover have "ball (u *\<^sub>R x) (1 - u) \<subseteq> s"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3979
  proof
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3980
    fix y assume "y \<in> ball (u *\<^sub>R x) (1 - u)"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3981
    hence "dist (u *\<^sub>R x) y < 1 - u" unfolding mem_ball .
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3982
    with `u < 1` have "inverse (1 - u) *\<^sub>R (y - u *\<^sub>R x) \<in> cball 0 1"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3983
      by (simp add: dist_norm inverse_eq_divide norm_minus_commute)
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3984
    with assms(3) have "inverse (1 - u) *\<^sub>R (y - u *\<^sub>R x) \<in> s" ..
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3985
    with assms(1) have "(1 - u) *\<^sub>R ((y - u *\<^sub>R x) /\<^sub>R (1 - u)) + u *\<^sub>R x \<in> s"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3986
      using `x \<in> s` `0 \<le> u` `u < 1` [THEN less_imp_le] by (rule mem_convex)
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3987
    thus "y \<in> s" using `u < 1` by simp
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3988
  qed
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3989
  ultimately have "u *\<^sub>R x \<in> interior s" ..
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3990
  thus "u *\<^sub>R x \<in> s - frontier s" using frontier_def and interior_subset by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3991
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3992
lemma homeomorphic_convex_compact_cball: fixes e::real and s::"('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3993
  assumes "convex s" "compact s" "interior s \<noteq> {}" "0 < e"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3994
  shows "s homeomorphic (cball (b::'a) e)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3995
proof- obtain a where "a\<in>interior s" using assms(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3996
  then obtain d where "d>0" and d:"cball a d \<subseteq> s" unfolding mem_interior_cball by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3997
  let ?d = "inverse d" and ?n = "0::'a"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3998
  have "cball ?n 1 \<subseteq> (\<lambda>x. inverse d *\<^sub>R (x - a)) ` s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3999
    apply(rule, rule_tac x="d *\<^sub>R x + a" in image_eqI) defer
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4000
    apply(rule d[unfolded subset_eq, rule_format]) using `d>0` unfolding mem_cball dist_norm
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4001
    by(auto simp add: mult_right_le_one_le)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4002
  hence "(\<lambda>x. inverse d *\<^sub>R (x - a)) ` s homeomorphic cball ?n 1"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4003
    using homeomorphic_convex_compact_lemma[of "(\<lambda>x. ?d *\<^sub>R -a + ?d *\<^sub>R x) ` s", OF convex_affinity compact_affinity]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4004
    using assms(1,2) by(auto simp add: uminus_add_conv_diff scaleR_right_diff_distrib)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4005
  thus ?thesis apply(rule_tac homeomorphic_trans[OF _ homeomorphic_balls(2)[of 1 _ ?n]])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4006
    apply(rule homeomorphic_trans[OF homeomorphic_affinity[of "?d" s "?d *\<^sub>R -a"]])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4007
    using `d>0` `e>0` by(auto simp add: uminus_add_conv_diff scaleR_right_diff_distrib) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4008
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4009
lemma homeomorphic_convex_compact: fixes s::"('a::euclidean_space) set" and t::"('a) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4010
  assumes "convex s" "compact s" "interior s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4011
          "convex t" "compact t" "interior t \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4012
  shows "s homeomorphic t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4013
  using assms by(meson zero_less_one homeomorphic_trans homeomorphic_convex_compact_cball homeomorphic_sym)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4014
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4015
subsection {* Epigraphs of convex functions *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4016
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4017
definition "epigraph s (f::_ \<Rightarrow> real) = {xy. fst xy \<in> s \<and> f (fst xy) \<le> snd xy}"
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4018
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4019
lemma mem_epigraph: "(x, y) \<in> epigraph s f \<longleftrightarrow> x \<in> s \<and> f x \<le> y" unfolding epigraph_def by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4020
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  4021
(** This might break sooner or later. In fact it did already once. **)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4022
lemma convex_epigraph:
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4023
  "convex(epigraph s f) \<longleftrightarrow> convex_on s f \<and> convex s"
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4024
  unfolding convex_def convex_on_def
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4025
  unfolding Ball_def split_paired_All epigraph_def
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4026
  unfolding mem_Collect_eq fst_conv snd_conv fst_add snd_add fst_scaleR snd_scaleR Ball_def[symmetric]
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  4027
  apply safe defer apply(erule_tac x=x in allE,erule_tac x="f x" in allE) apply safe
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  4028
  apply(erule_tac x=xa in allE,erule_tac x="f xa" in allE) prefer 3
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4029
  apply(rule_tac y="u * f a + v * f aa" in order_trans) defer by(auto intro!:mult_left_mono add_mono)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4030
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4031
lemma convex_epigraphI:
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4032
  "convex_on s f \<Longrightarrow> convex s \<Longrightarrow> convex(epigraph s f)"
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4033
unfolding convex_epigraph by auto
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4034
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4035
lemma convex_epigraph_convex:
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4036
  "convex s \<Longrightarrow> convex_on s f \<longleftrightarrow> convex(epigraph s f)"
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4037
by(simp add: convex_epigraph)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4038
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4039
subsubsection {* Use this to derive general bound property of convex function *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4040
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4041
lemma convex_on:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4042
  assumes "convex s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4043
  shows "convex_on s f \<longleftrightarrow> (\<forall>k u x. (\<forall>i\<in>{1..k::nat}. 0 \<le> u i \<and> x i \<in> s) \<and> setsum u {1..k} = 1 \<longrightarrow>
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4044
   f (setsum (\<lambda>i. u i *\<^sub>R x i) {1..k} ) \<le> setsum (\<lambda>i. u i * f(x i)) {1..k} ) "
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4045
  unfolding convex_epigraph_convex[OF assms] convex epigraph_def Ball_def mem_Collect_eq
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4046
  unfolding fst_setsum snd_setsum fst_scaleR snd_scaleR
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4047
  apply safe
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4048
  apply (drule_tac x=k in spec)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4049
  apply (drule_tac x=u in spec)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4050
  apply (drule_tac x="\<lambda>i. (x i, f (x i))" in spec)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4051
  apply simp
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4052
  using assms[unfolded convex] apply simp
36778
739a9379e29b avoid using real-specific versions of generic lemmas
huffman
parents: 36725
diff changeset
  4053
  apply(rule_tac y="\<Sum>i = 1..k. u i * f (fst (x i))" in order_trans)
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4054
  defer apply(rule setsum_mono) apply(erule_tac x=i in allE) unfolding real_scaleR_def
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  4055
  apply(rule mult_left_mono)using assms[unfolded convex] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4056
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4057
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4058
subsection {* Convexity of general and special intervals *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4059
37732
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  4060
lemma convexI: (* TODO: move to Library/Convex.thy *)
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  4061
  assumes "\<And>x y u v. \<lbrakk>x \<in> s; y \<in> s; 0 \<le> u; 0 \<le> v; u + v = 1\<rbrakk> \<Longrightarrow> u *\<^sub>R x + v *\<^sub>R y \<in> s"
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  4062
  shows "convex s"
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  4063
using assms unfolding convex_def by fast
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  4064
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4065
lemma is_interval_convex:
37732
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  4066
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4067
  assumes "is_interval s" shows "convex s"
37732
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  4068
proof (rule convexI)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4069
  fix x y u v assume as:"x \<in> s" "y \<in> s" "0 \<le> u" "0 \<le> v" "u + v = (1::real)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4070
  hence *:"u = 1 - v" "1 - v \<ge> 0" and **:"v = 1 - u" "1 - u \<ge> 0" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4071
  { fix a b assume "\<not> b \<le> u * a + v * b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4072
    hence "u * a < (1 - v) * b" unfolding not_le using as(4) by(auto simp add: field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4073
    hence "a < b" unfolding * using as(4) *(2) apply(rule_tac mult_left_less_imp_less[of "1 - v"]) by(auto simp add: field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4074
    hence "a \<le> u * a + v * b" unfolding * using as(4) by (auto simp add: field_simps intro!:mult_right_mono)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4075
  } moreover
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4076
  { fix a b assume "\<not> u * a + v * b \<le> a"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4077
    hence "v * b > (1 - u) * a" unfolding not_le using as(4) by(auto simp add: field_simps)
36350
bc7982c54e37 dropped group_simps, ring_simps, field_eq_simps
haftmann
parents: 36341
diff changeset
  4078
    hence "a < b" unfolding * using as(4) apply(rule_tac mult_left_less_imp_less) by(auto simp add: field_simps)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4079
    hence "u * a + v * b \<le> b" unfolding ** using **(2) as(3) by(auto simp add: field_simps intro!:mult_right_mono) }
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4080
  ultimately show "u *\<^sub>R x + v *\<^sub>R y \<in> s" apply- apply(rule assms[unfolded is_interval_def, rule_format, OF as(1,2)])
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4081
    using as(3-) DIM_positive[where 'a='a] by (auto simp: inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4082
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4083
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4084
lemma is_interval_connected:
37732
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  4085
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4086
  shows "is_interval s \<Longrightarrow> connected s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4087
  using is_interval_convex convex_connected by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4088
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4089
lemma convex_interval: "convex {a .. b}" "convex {a<..<b::'a::ordered_euclidean_space}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4090
  apply(rule_tac[!] is_interval_convex) using is_interval_interval by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4091
36431
340755027840 move definitions and theorems for type real^1 to separate theory file
huffman
parents: 36365
diff changeset
  4092
(* FIXME: rewrite these lemmas without using vec1
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4093
subsection {* On @{text "real^1"}, @{text "is_interval"}, @{text "convex"} and @{text "connected"} are all equivalent. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4094
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4095
lemma is_interval_1:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4096
  "is_interval s \<longleftrightarrow> (\<forall>a\<in>s. \<forall>b\<in>s. \<forall> x. dest_vec1 a \<le> dest_vec1 x \<and> dest_vec1 x \<le> dest_vec1 b \<longrightarrow> x \<in> s)"
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  4097
  unfolding is_interval_def forall_1 by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4098
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4099
lemma is_interval_connected_1: "is_interval s \<longleftrightarrow> connected (s::(real^1) set)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4100
  apply(rule, rule is_interval_connected, assumption) unfolding is_interval_1
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4101
  apply(rule,rule,rule,rule,erule conjE,rule ccontr) proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4102
  fix a b x assume as:"connected s" "a \<in> s" "b \<in> s" "dest_vec1 a \<le> dest_vec1 x" "dest_vec1 x \<le> dest_vec1 b" "x\<notin>s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4103
  hence *:"dest_vec1 a < dest_vec1 x" "dest_vec1 x < dest_vec1 b" apply(rule_tac [!] ccontr) unfolding not_less by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4104
  let ?halfl = "{z. inner (basis 1) z < dest_vec1 x} " and ?halfr = "{z. inner (basis 1) z > dest_vec1 x} "
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4105
  { fix y assume "y \<in> s" have "y \<in> ?halfr \<union> ?halfl" apply(rule ccontr)
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  4106
    using as(6) `y\<in>s` by (auto simp add: inner_vector_def) }
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  4107
  moreover have "a\<in>?halfl" "b\<in>?halfr" using * by (auto simp add: inner_vector_def)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4108
  hence "?halfl \<inter> s \<noteq> {}" "?halfr \<inter> s \<noteq> {}"  using as(2-3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4109
  ultimately show False apply(rule_tac notE[OF as(1)[unfolded connected_def]])
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4110
    apply(rule_tac x="?halfl" in exI, rule_tac x="?halfr" in exI)
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4111
    apply(rule, rule open_halfspace_lt, rule, rule open_halfspace_gt)
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4112
    by(auto simp add: field_simps) qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4113
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4114
lemma is_interval_convex_1:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4115
  "is_interval s \<longleftrightarrow> convex (s::(real^1) set)"
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4116
by(metis is_interval_convex convex_connected is_interval_connected_1)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4117
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4118
lemma convex_connected_1:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4119
  "connected s \<longleftrightarrow> convex (s::(real^1) set)"
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4120
by(metis is_interval_convex convex_connected is_interval_connected_1)
36431
340755027840 move definitions and theorems for type real^1 to separate theory file
huffman
parents: 36365
diff changeset
  4121
*)
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4122
subsection {* Another intermediate value theorem formulation *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4123
37673
f69f4b079275 generalize more lemmas from ordered_euclidean_space to euclidean_space
huffman
parents: 37647
diff changeset
  4124
lemma ivt_increasing_component_on_1: fixes f::"real \<Rightarrow> 'a::euclidean_space"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4125
  assumes "a \<le> b" "continuous_on {a .. b} f" "(f a)\<bullet>k \<le> y" "y \<le> (f b)\<bullet>k"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4126
  shows "\<exists>x\<in>{a..b}. (f x)\<bullet>k = y"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4127
proof- have "f a \<in> f ` {a..b}" "f b \<in> f ` {a..b}" apply(rule_tac[!] imageI)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4128
    using assms(1) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4129
  thus ?thesis using connected_ivt_component[of "f ` {a..b}" "f a" "f b" k y]
36431
340755027840 move definitions and theorems for type real^1 to separate theory file
huffman
parents: 36365
diff changeset
  4130
    using connected_continuous_image[OF assms(2) convex_connected[OF convex_real_interval(5)]]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4131
    using assms by(auto intro!: imageI) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4132
37673
f69f4b079275 generalize more lemmas from ordered_euclidean_space to euclidean_space
huffman
parents: 37647
diff changeset
  4133
lemma ivt_increasing_component_1: fixes f::"real \<Rightarrow> 'a::euclidean_space"
36431
340755027840 move definitions and theorems for type real^1 to separate theory file
huffman
parents: 36365
diff changeset
  4134
  shows "a \<le> b \<Longrightarrow> \<forall>x\<in>{a .. b}. continuous (at x) f
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4135
   \<Longrightarrow> f a\<bullet>k \<le> y \<Longrightarrow> y \<le> f b\<bullet>k \<Longrightarrow> \<exists>x\<in>{a..b}. (f x)\<bullet>k = y"
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4136
by(rule ivt_increasing_component_on_1)
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4137
  (auto simp add: continuous_at_imp_continuous_on)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4138
37673
f69f4b079275 generalize more lemmas from ordered_euclidean_space to euclidean_space
huffman
parents: 37647
diff changeset
  4139
lemma ivt_decreasing_component_on_1: fixes f::"real \<Rightarrow> 'a::euclidean_space"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4140
  assumes "a \<le> b" "continuous_on {a .. b} f" "(f b)\<bullet>k \<le> y" "y \<le> (f a)\<bullet>k"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4141
  shows "\<exists>x\<in>{a..b}. (f x)\<bullet>k = y"
49530
wenzelm
parents: 49529
diff changeset
  4142
  apply(subst neg_equal_iff_equal[symmetric])
44531
1d477a2b1572 replace some continuous_on lemmas with more general versions
huffman
parents: 44525
diff changeset
  4143
  using ivt_increasing_component_on_1[of a b "\<lambda>x. - f x" k "- y"]
1d477a2b1572 replace some continuous_on lemmas with more general versions
huffman
parents: 44525
diff changeset
  4144
  using assms using continuous_on_minus by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4145
37673
f69f4b079275 generalize more lemmas from ordered_euclidean_space to euclidean_space
huffman
parents: 37647
diff changeset
  4146
lemma ivt_decreasing_component_1: fixes f::"real \<Rightarrow> 'a::euclidean_space"
36431
340755027840 move definitions and theorems for type real^1 to separate theory file
huffman
parents: 36365
diff changeset
  4147
  shows "a \<le> b \<Longrightarrow> \<forall>x\<in>{a .. b}. continuous (at x) f
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4148
    \<Longrightarrow> f b\<bullet>k \<le> y \<Longrightarrow> y \<le> f a\<bullet>k \<Longrightarrow> \<exists>x\<in>{a..b}. (f x)\<bullet>k = y"
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4149
by(rule ivt_decreasing_component_on_1)
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4150
  (auto simp: continuous_at_imp_continuous_on)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4151
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4152
subsection {* A bound within a convex hull, and so an interval *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4153
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4154
lemma convex_on_convex_hull_bound:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4155
  assumes "convex_on (convex hull s) f" "\<forall>x\<in>s. f x \<le> b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4156
  shows "\<forall>x\<in> convex hull s. f x \<le> b" proof
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4157
  fix x assume "x\<in>convex hull s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4158
  then obtain k u v where obt:"\<forall>i\<in>{1..k::nat}. 0 \<le> u i \<and> v i \<in> s" "setsum u {1..k} = 1" "(\<Sum>i = 1..k. u i *\<^sub>R v i) = x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4159
    unfolding convex_hull_indexed mem_Collect_eq by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4160
  have "(\<Sum>i = 1..k. u i * f (v i)) \<le> b" using setsum_mono[of "{1..k}" "\<lambda>i. u i * f (v i)" "\<lambda>i. u i * b"]
49530
wenzelm
parents: 49529
diff changeset
  4161
    unfolding setsum_left_distrib[symmetric] obt(2) mult_1 apply(drule_tac meta_mp) apply(rule mult_left_mono)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4162
    using assms(2) obt(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4163
  thus "f x \<le> b" using assms(1)[unfolded convex_on[OF convex_convex_hull], rule_format, of k u v]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4164
    unfolding obt(2-3) using obt(1) and hull_subset[unfolded subset_eq, rule_format, of _ s] by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4165
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4166
lemma inner_setsum_Basis[simp]: "\<And>i. i \<in> Basis \<Longrightarrow> (\<Sum>Basis) \<bullet> i = 1"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4167
  by (simp add: One_def inner_setsum_left setsum_cases inner_Basis)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4168
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4169
lemma unit_interval_convex_hull:
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4170
  defines "One \<equiv> (\<Sum>Basis)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4171
  shows "{0::'a::ordered_euclidean_space .. One} =
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4172
    convex hull {x. \<forall>i\<in>Basis. (x\<bullet>i = 0) \<or> (x\<bullet>i = 1)}"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4173
  (is "?int = convex hull ?points")
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4174
proof -
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4175
  have One[simp]: "\<And>i. i \<in> Basis \<Longrightarrow> One \<bullet> i = 1"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4176
    by (simp add: One_def inner_setsum_left setsum_cases inner_Basis)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4177
  have 01:"{0,One} \<subseteq> convex hull ?points" 
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4178
    apply rule apply(rule_tac hull_subset[unfolded subset_eq, rule_format]) by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4179
  { fix n x assume "x\<in>{0::'a::ordered_euclidean_space .. One}" "n \<le> DIM('a)" "card {i. i\<in>Basis \<and> x\<bullet>i \<noteq> 0} \<le> n"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4180
  hence "x\<in>convex hull ?points" proof(induct n arbitrary: x)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4181
    case 0 hence "x = 0" apply(subst euclidean_eq_iff) apply rule by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4182
    thus "x\<in>convex hull ?points" using 01 by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4183
  next
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4184
    case (Suc n) show "x\<in>convex hull ?points" proof(cases "{i. i\<in>Basis \<and> x\<bullet>i \<noteq> 0} = {}")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4185
      case True hence "x = 0" apply(subst euclidean_eq_iff) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4186
      thus "x\<in>convex hull ?points" using 01 by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4187
    next
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4188
      case False def xi \<equiv> "Min ((\<lambda>i. x\<bullet>i) ` {i. i\<in>Basis \<and> x\<bullet>i \<noteq> 0})"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4189
      have "xi \<in> (\<lambda>i. x\<bullet>i) ` {i. i\<in>Basis \<and> x\<bullet>i \<noteq> 0}" unfolding xi_def apply(rule Min_in) using False by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4190
      then obtain i where i':"x\<bullet>i = xi" "x\<bullet>i \<noteq> 0" "i\<in>Basis" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4191
      have i:"\<And>j. j\<in>Basis \<Longrightarrow> x\<bullet>j > 0 \<Longrightarrow> x\<bullet>i \<le> x\<bullet>j"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4192
        unfolding i'(1) xi_def apply(rule_tac Min_le) unfolding image_iff
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4193
        defer apply(rule_tac x=j in bexI) using i' by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4194
      have i01:"x\<bullet>i \<le> 1" "x\<bullet>i > 0" using Suc(2)[unfolded mem_interval,rule_format,of i]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4195
        using i'(2-) `x\<bullet>i \<noteq> 0` by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4196
      show ?thesis proof(cases "x\<bullet>i=1")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4197
        case True have "\<forall>j\<in>{i. i\<in>Basis \<and> x\<bullet>i \<noteq> 0}. x\<bullet>j = 1" apply(rule, rule ccontr) unfolding mem_Collect_eq
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4198
        proof(erule conjE) fix j assume as:"x \<bullet> j \<noteq> 0" "x \<bullet> j \<noteq> 1" "j\<in>Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4199
          hence j:"x\<bullet>j \<in> {0<..<1}" using Suc(2)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4200
            by (auto simp add: eucl_le[where 'a='a] elim!:allE[where x=j])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4201
          hence "x\<bullet>j \<in> op \<bullet> x ` {i. i\<in>Basis \<and> x \<bullet> i \<noteq> 0}" using as(3) by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4202
          hence "x\<bullet>j \<ge> x\<bullet>i" unfolding i'(1) xi_def apply(rule_tac Min_le) by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4203
          thus False using True Suc(2) j by(auto simp add: elim!:ballE[where x=j]) qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4204
        thus "x\<in>convex hull ?points" apply(rule_tac hull_subset[unfolded subset_eq, rule_format])
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  4205
          by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4206
      next
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4207
        let ?y = "\<Sum>j\<in>Basis. (if x\<bullet>j = 0 then 0 else (x\<bullet>j - x\<bullet>i) / (1 - x\<bullet>i)) *\<^sub>R j"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4208
        case False
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4209
        then have *: "x = (x\<bullet>i) *\<^sub>R (\<Sum>j\<in>Basis. (if x\<bullet>j = 0 then 0 else 1) *\<^sub>R j) + (1 - x\<bullet>i) *\<^sub>R ?y"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4210
          by (subst euclidean_eq_iff) (simp add: inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4211
        { fix j :: 'a assume j:"j\<in>Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4212
          have "x\<bullet>j \<noteq> 0 \<Longrightarrow> 0 \<le> (x \<bullet> j - x \<bullet> i) / (1 - x \<bullet> i)" "(x \<bullet> j - x \<bullet> i) / (1 - x \<bullet> i) \<le> 1"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4213
            apply(rule_tac divide_nonneg_pos) using i(1)[of j] using False i01
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4214
            using Suc(2)[unfolded mem_interval, rule_format, of j] using j
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4215
            by(auto simp add: field_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4216
          with j have "0 \<le> ?y \<bullet> j \<and> ?y \<bullet> j \<le> 1" by (auto simp: inner_simps) }
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4217
        moreover have "i\<in>{j. j\<in>Basis \<and> x\<bullet>j \<noteq> 0} - {j. j\<in>Basis \<and> ?y \<bullet> j \<noteq> 0}"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4218
          using i01 using i'(3) by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4219
        hence "{j. j\<in>Basis \<and> x\<bullet>j \<noteq> 0} \<noteq> {j. j\<in>Basis \<and> ?y \<bullet> j \<noteq> 0}" using i'(3) by blast
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4220
        hence **:"{j. j\<in>Basis \<and> ?y \<bullet> j \<noteq> 0} \<subset> {j. j\<in>Basis \<and> x\<bullet>j \<noteq> 0}"
44457
d366fa5551ef declare euclidean_simps [simp] at the point they are proved;
huffman
parents: 44365
diff changeset
  4221
          by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4222
        have "card {j. j\<in>Basis \<and> ?y \<bullet> j \<noteq> 0} \<le> n"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4223
          using less_le_trans[OF psubset_card_mono[OF _ **] Suc(4)] by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4224
        ultimately show ?thesis
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4225
          apply(subst *)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4226
          apply(rule convex_convex_hull[unfolded convex_def, rule_format])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4227
          apply(rule_tac hull_subset[unfolded subset_eq, rule_format]) 
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4228
          defer 
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4229
          apply(rule Suc(1))
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4230
          unfolding mem_interval 
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4231
          using i01 Suc(3)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4232
          by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4233
      qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4234
    qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4235
  qed } note * = this
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4236
  show ?thesis 
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4237
    apply rule defer apply(rule hull_minimal) unfolding subset_eq prefer 3 apply rule
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4238
    apply(rule_tac n2="DIM('a)" in *) prefer 3
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4239
    apply(rule card_mono) using 01 and convex_interval(1) prefer 5 apply - apply rule
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4240
    unfolding mem_interval apply rule unfolding mem_Collect_eq apply(erule_tac x=i in ballE)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4241
    by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4242
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4243
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4244
text {* And this is a finite set of vertices. *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4245
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4246
lemma unit_cube_convex_hull:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4247
  obtains s :: "'a::ordered_euclidean_space set" where "finite s" "{0 .. \<Sum>Basis} = convex hull s"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4248
  apply(rule that[of "{x::'a. \<forall>i\<in>Basis. x\<bullet>i=0 \<or> x\<bullet>i=1}"])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4249
  apply(rule finite_subset[of _ "(\<lambda>s. (\<Sum>i\<in>Basis. (if i\<in>s then 1 else 0) *\<^sub>R i)::'a) ` Pow Basis"])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4250
  prefer 3 apply(rule unit_interval_convex_hull) apply rule unfolding mem_Collect_eq proof-
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4251
  fix x::"'a" assume as:"\<forall>i\<in>Basis. x \<bullet> i = 0 \<or> x \<bullet> i = 1"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4252
  show "x \<in> (\<lambda>s. \<Sum>i\<in>Basis. (if i\<in>s then 1 else 0) *\<^sub>R i) ` Pow Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4253
    apply(rule image_eqI[where x="{i. i\<in>Basis \<and> x\<bullet>i = 1}"])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4254
    using as apply(subst euclidean_eq_iff) by (auto simp: inner_setsum_left_Basis)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4255
qed auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4256
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4257
text {* Hence any cube (could do any nonempty interval). *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4258
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4259
lemma cube_convex_hull:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4260
  assumes "0 < d" obtains s::"('a::ordered_euclidean_space) set" where
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4261
  "finite s" "{x - (\<Sum>i\<in>Basis. d*\<^sub>Ri) .. x + (\<Sum>i\<in>Basis. d*\<^sub>Ri)} = convex hull s" proof-
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4262
  let ?d = "(\<Sum>i\<in>Basis. d*\<^sub>Ri)::'a"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4263
  have *:"{x - ?d .. x + ?d} = (\<lambda>y. x - ?d + (2 * d) *\<^sub>R y) ` {0 .. \<Sum>Basis}" apply(rule set_eqI, rule)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4264
    unfolding image_iff defer apply(erule bexE) proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4265
    fix y assume as:"y\<in>{x - ?d .. x + ?d}"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4266
    { fix i :: 'a assume i:"i\<in>Basis" have "x \<bullet> i \<le> d + y \<bullet> i" "y \<bullet> i \<le> d + x \<bullet> i"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4267
        using as[unfolded mem_interval, THEN bspec[where x=i]] i
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4268
        by (auto simp: inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4269
      hence "1 \<ge> inverse d * (x \<bullet> i - y \<bullet> i)" "1 \<ge> inverse d * (y \<bullet> i - x \<bullet> i)"
49530
wenzelm
parents: 49529
diff changeset
  4270
        apply(rule_tac[!] mult_left_le_imp_le[OF _ assms]) unfolding mult_assoc[symmetric]
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  4271
        using assms by(auto simp add: field_simps)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4272
      hence "inverse d * (x \<bullet> i * 2) \<le> 2 + inverse d * (y \<bullet> i * 2)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4273
            "inverse d * (y \<bullet> i * 2) \<le> 2 + inverse d * (x \<bullet> i * 2)" by(auto simp add:field_simps) }
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4274
    hence "inverse (2 * d) *\<^sub>R (y - (x - ?d)) \<in> {0..\<Sum>Basis}" unfolding mem_interval using assms
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4275
      by(auto simp add: field_simps inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4276
    thus "\<exists>z\<in>{0..\<Sum>Basis}. y = x - ?d + (2 * d) *\<^sub>R z" apply- apply(rule_tac x="inverse (2 * d) *\<^sub>R (y - (x - ?d))" in bexI)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4277
      using assms by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4278
  next
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4279
    fix y z assume as:"z\<in>{0..\<Sum>Basis}" "y = x - ?d + (2*d) *\<^sub>R z"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4280
    have "\<And>i. i\<in>Basis \<Longrightarrow> 0 \<le> d * (z \<bullet> i) \<and> d * (z \<bullet> i) \<le> d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4281
      using assms as(1)[unfolded mem_interval] apply(erule_tac x=i in ballE)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4282
      apply rule apply(rule mult_nonneg_nonneg) prefer 3 apply(rule mult_right_le_one_le)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4283
      using assms by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4284
    thus "y \<in> {x - ?d..x + ?d}" unfolding as(2) mem_interval apply- apply rule using as(1)[unfolded mem_interval]
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4285
      apply(erule_tac x=i in ballE) using assms by (auto simp: inner_simps) qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4286
  obtain s where "finite s" "{0::'a..\<Sum>Basis} = convex hull s" using unit_cube_convex_hull by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4287
  thus ?thesis apply(rule_tac that[of "(\<lambda>y. x - ?d + (2 * d) *\<^sub>R y)` s"]) unfolding * and convex_hull_affinity by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4288
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4289
subsection {* Bounded convex function on open set is continuous *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4290
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4291
lemma convex_on_bounded_continuous:
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4292
  fixes s :: "('a::real_normed_vector) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4293
  assumes "open s" "convex_on s f" "\<forall>x\<in>s. abs(f x) \<le> b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4294
  shows "continuous_on s f"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4295
  apply(rule continuous_at_imp_continuous_on) unfolding continuous_at_real_range proof(rule,rule,rule)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4296
  fix x e assume "x\<in>s" "(0::real) < e"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4297
  def B \<equiv> "abs b + 1"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4298
  have B:"0 < B" "\<And>x. x\<in>s \<Longrightarrow> abs (f x) \<le> B"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4299
    unfolding B_def defer apply(drule assms(3)[rule_format]) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4300
  obtain k where "k>0"and k:"cball x k \<subseteq> s" using assms(1)[unfolded open_contains_cball, THEN bspec[where x=x]] using `x\<in>s` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4301
  show "\<exists>d>0. \<forall>x'. norm (x' - x) < d \<longrightarrow> \<bar>f x' - f x\<bar> < e"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4302
    apply(rule_tac x="min (k / 2) (e / (2 * B) * k)" in exI) apply rule defer proof(rule,rule)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4303
    fix y assume as:"norm (y - x) < min (k / 2) (e / (2 * B) * k)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4304
    show "\<bar>f y - f x\<bar> < e" proof(cases "y=x")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4305
      case False def t \<equiv> "k / norm (y - x)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4306
      have "2 < t" "0<t" unfolding t_def using as False and `k>0` by(auto simp add:field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4307
      have "y\<in>s" apply(rule k[unfolded subset_eq,rule_format]) unfolding mem_cball dist_norm
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4308
        apply(rule order_trans[of _ "2 * norm (x - y)"]) using as by(auto simp add: field_simps norm_minus_commute)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4309
      { def w \<equiv> "x + t *\<^sub>R (y - x)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4310
        have "w\<in>s" unfolding w_def apply(rule k[unfolded subset_eq,rule_format]) unfolding mem_cball dist_norm
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4311
          unfolding t_def using `k>0` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4312
        have "(1 / t) *\<^sub>R x + - x + ((t - 1) / t) *\<^sub>R x = (1 / t - 1 + (t - 1) / t) *\<^sub>R x" by (auto simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4313
        also have "\<dots> = 0"  using `t>0` by(auto simp add:field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4314
        finally have w:"(1 / t) *\<^sub>R w + ((t - 1) / t) *\<^sub>R x = y" unfolding w_def using False and `t>0` by (auto simp add: algebra_simps)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4315
        have  "2 * B < e * t" unfolding t_def using `0<e` `0<k` `B>0` and as and False by (auto simp add:field_simps)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4316
        hence "(f w - f x) / t < e"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4317
          using B(2)[OF `w\<in>s`] and B(2)[OF `x\<in>s`] using `t>0` by(auto simp add:field_simps)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4318
        hence th1:"f y - f x < e" apply- apply(rule le_less_trans) defer apply assumption
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4319
          using assms(2)[unfolded convex_on_def,rule_format,of w x "1/t" "(t - 1)/t", unfolded w]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4320
          using `0<t` `2<t` and `x\<in>s` `w\<in>s` by(auto simp add:field_simps) }
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4321
      moreover
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4322
      { def w \<equiv> "x - t *\<^sub>R (y - x)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4323
        have "w\<in>s" unfolding w_def apply(rule k[unfolded subset_eq,rule_format]) unfolding mem_cball dist_norm
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4324
          unfolding t_def using `k>0` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4325
        have "(1 / (1 + t)) *\<^sub>R x + (t / (1 + t)) *\<^sub>R x = (1 / (1 + t) + t / (1 + t)) *\<^sub>R x" by (auto simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4326
        also have "\<dots>=x" using `t>0` by (auto simp add:field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4327
        finally have w:"(1 / (1+t)) *\<^sub>R w + (t / (1 + t)) *\<^sub>R y = x" unfolding w_def using False and `t>0` by (auto simp add: algebra_simps)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4328
        have  "2 * B < e * t" unfolding t_def using `0<e` `0<k` `B>0` and as and False by (auto simp add:field_simps)
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4329
        hence *:"(f w - f y) / t < e" using B(2)[OF `w\<in>s`] and B(2)[OF `y\<in>s`] using `t>0` by(auto simp add:field_simps)
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4330
        have "f x \<le> 1 / (1 + t) * f w + (t / (1 + t)) * f y"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4331
          using assms(2)[unfolded convex_on_def,rule_format,of w y "1/(1+t)" "t / (1+t)",unfolded w]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4332
          using `0<t` `2<t` and `y\<in>s` `w\<in>s` by (auto simp add:field_simps)
36778
739a9379e29b avoid using real-specific versions of generic lemmas
huffman
parents: 36725
diff changeset
  4333
        also have "\<dots> = (f w + t * f y) / (1 + t)" using `t>0` unfolding divide_inverse by (auto simp add:field_simps)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4334
        also have "\<dots> < e + f y" using `t>0` * `e>0` by(auto simp add:field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4335
        finally have "f x - f y < e" by auto }
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4336
      ultimately show ?thesis by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4337
    qed(insert `0<e`, auto)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4338
  qed(insert `0<e` `0<k` `0<B`, auto simp add:field_simps intro!:mult_pos_pos) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4339
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4340
subsection {* Upper bound on a ball implies upper and lower bounds *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4341
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4342
lemma convex_bounds_lemma:
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4343
  fixes x :: "'a::real_normed_vector"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4344
  assumes "convex_on (cball x e) f"  "\<forall>y \<in> cball x e. f y \<le> b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4345
  shows "\<forall>y \<in> cball x e. abs(f y) \<le> b + 2 * abs(f x)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4346
  apply(rule) proof(cases "0 \<le> e") case True
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4347
  fix y assume y:"y\<in>cball x e" def z \<equiv> "2 *\<^sub>R x - y"
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4348
  have *:"x - (2 *\<^sub>R x - y) = y - x" by (simp add: scaleR_2)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4349
  have z:"z\<in>cball x e" using y unfolding z_def mem_cball dist_norm * by(auto simp add: norm_minus_commute)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4350
  have "(1 / 2) *\<^sub>R y + (1 / 2) *\<^sub>R z = x" unfolding z_def by (auto simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4351
  thus "\<bar>f y\<bar> \<le> b + 2 * \<bar>f x\<bar>" using assms(1)[unfolded convex_on_def,rule_format, OF y z, of "1/2" "1/2"]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4352
    using assms(2)[rule_format,OF y] assms(2)[rule_format,OF z] by(auto simp add:field_simps)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4353
next case False fix y assume "y\<in>cball x e"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4354
  hence "dist x y < 0" using False unfolding mem_cball not_le by (auto simp del: dist_not_less_zero)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4355
  thus "\<bar>f y\<bar> \<le> b + 2 * \<bar>f x\<bar>" using zero_le_dist[of x y] by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4356
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4357
subsubsection {* Hence a convex function on an open set is continuous *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4358
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4359
lemma real_of_nat_ge_one_iff: "1 \<le> real (n::nat) \<longleftrightarrow> 1 \<le> n"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4360
  by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4361
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4362
lemma convex_on_continuous:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4363
  assumes "open (s::('a::ordered_euclidean_space) set)" "convex_on s f"
37673
f69f4b079275 generalize more lemmas from ordered_euclidean_space to euclidean_space
huffman
parents: 37647
diff changeset
  4364
  (* FIXME: generalize to euclidean_space *)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4365
  shows "continuous_on s f"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4366
  unfolding continuous_on_eq_continuous_at[OF assms(1)] proof
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4367
  note dimge1 = DIM_positive[where 'a='a]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4368
  fix x assume "x\<in>s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4369
  then obtain e where e:"cball x e \<subseteq> s" "e>0" using assms(1) unfolding open_contains_cball by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4370
  def d \<equiv> "e / real DIM('a)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4371
  have "0 < d" unfolding d_def using `e>0` dimge1 by(rule_tac divide_pos_pos, auto)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4372
  let ?d = "(\<Sum>i\<in>Basis. d *\<^sub>R i)::'a"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4373
  obtain c where c:"finite c" "{x - ?d..x + ?d} = convex hull c" using cube_convex_hull[OF `d>0`, of x] by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4374
  have "x\<in>{x - ?d..x + ?d}" using `d>0` unfolding mem_interval by (auto simp: inner_setsum_left_Basis inner_simps)
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  4375
  hence "c\<noteq>{}" using c by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4376
  def k \<equiv> "Max (f ` c)"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4377
  have "convex_on {x - ?d..x + ?d} f"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4378
    apply(rule convex_on_subset[OF assms(2)])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4379
    apply(rule subset_trans[OF _ e(1)])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4380
    unfolding subset_eq mem_cball
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4381
  proof
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4382
    fix z assume z:"z\<in>{x - ?d..x + ?d}"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4383
    have e:"e = setsum (\<lambda>i::'a. d) Basis" unfolding setsum_constant d_def using dimge1
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4384
      unfolding real_eq_of_nat by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4385
    show "dist x z \<le> e" unfolding dist_norm e apply(rule_tac order_trans[OF norm_le_l1], rule setsum_mono)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4386
      using z[unfolded mem_interval] apply(erule_tac x=b in ballE) by (auto simp: inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4387
  qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4388
  hence k:"\<forall>y\<in>{x - ?d..x + ?d}. f y \<le> k" unfolding c(2) apply(rule_tac convex_on_convex_hull_bound) apply assumption
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4389
    unfolding k_def apply(rule, rule Max_ge) using c(1) by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4390
  have "d \<le> e"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4391
    unfolding d_def
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4392
    apply(rule mult_imp_div_pos_le)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4393
    using `e>0`
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4394
    unfolding mult_le_cancel_left1
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4395
    apply (auto simp: real_of_nat_ge_one_iff Suc_le_eq DIM_positive)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4396
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4397
  hence dsube:"cball x d \<subseteq> cball x e" unfolding subset_eq Ball_def mem_cball by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4398
  have conv:"convex_on (cball x d) f" apply(rule convex_on_subset, rule convex_on_subset[OF assms(2)]) apply(rule e(1)) using dsube by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4399
  hence "\<forall>y\<in>cball x d. abs (f y) \<le> k + 2 * abs (f x)" apply(rule_tac convex_bounds_lemma) apply assumption proof
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4400
    fix y assume y:"y\<in>cball x d"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4401
    { fix i :: 'a assume "i\<in>Basis" hence "x \<bullet> i - d \<le> y \<bullet> i"  "y \<bullet> i \<le> x \<bullet> i + d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4402
        using order_trans[OF Basis_le_norm y[unfolded mem_cball dist_norm], of i] by (auto simp: inner_diff_left)  }
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4403
    thus "f y \<le> k" apply(rule_tac k[rule_format]) unfolding mem_cball mem_interval dist_norm
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4404
      by (auto simp: inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4405
  qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4406
  hence "continuous_on (ball x d) f" apply(rule_tac convex_on_bounded_continuous)
33270
paulson
parents: 33175
diff changeset
  4407
    apply(rule open_ball, rule convex_on_subset[OF conv], rule ball_subset_cball)
paulson
parents: 33175
diff changeset
  4408
    apply force
paulson
parents: 33175
diff changeset
  4409
    done
paulson
parents: 33175
diff changeset
  4410
  thus "continuous (at x) f" unfolding continuous_on_eq_continuous_at[OF open_ball]
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4411
    using `d>0` by auto
33270
paulson
parents: 33175
diff changeset
  4412
qed
paulson
parents: 33175
diff changeset
  4413
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4414
subsection {* Line segments, Starlike Sets, etc. *}
33270
paulson
parents: 33175
diff changeset
  4415
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4416
(* Use the same overloading tricks as for intervals, so that
33270
paulson
parents: 33175
diff changeset
  4417
   segment[a,b] is closed and segment(a,b) is open relative to affine hull. *)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4418
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4419
definition
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4420
  midpoint :: "'a::real_vector \<Rightarrow> 'a \<Rightarrow> 'a" where
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4421
  "midpoint a b = (inverse (2::real)) *\<^sub>R (a + b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4422
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4423
definition
36341
2623a1987e1d generalize more constants and lemmas
huffman
parents: 36340
diff changeset
  4424
  open_segment :: "'a::real_vector \<Rightarrow> 'a \<Rightarrow> 'a set" where
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4425
  "open_segment a b = {(1 - u) *\<^sub>R a + u *\<^sub>R b | u::real.  0 < u \<and> u < 1}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4426
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4427
definition
36341
2623a1987e1d generalize more constants and lemmas
huffman
parents: 36340
diff changeset
  4428
  closed_segment :: "'a::real_vector \<Rightarrow> 'a \<Rightarrow> 'a set" where
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4429
  "closed_segment a b = {(1 - u) *\<^sub>R a + u *\<^sub>R b | u::real. 0 \<le> u \<and> u \<le> 1}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4430
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  4431
definition "between = (\<lambda> (a,b) x. x \<in> closed_segment a b)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4432
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4433
lemmas segment = open_segment_def closed_segment_def
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4434
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4435
definition "starlike s \<longleftrightarrow> (\<exists>a\<in>s. \<forall>x\<in>s. closed_segment a x \<subseteq> s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4436
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4437
lemma midpoint_refl: "midpoint x x = x"
49530
wenzelm
parents: 49529
diff changeset
  4438
  unfolding midpoint_def unfolding scaleR_right_distrib unfolding scaleR_left_distrib[symmetric] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4439
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4440
lemma midpoint_sym: "midpoint a b = midpoint b a" unfolding midpoint_def by (auto simp add: scaleR_right_distrib)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4441
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4442
lemma midpoint_eq_iff: "midpoint a b = c \<longleftrightarrow> a + b = c + c"
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4443
proof -
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4444
  have "midpoint a b = c \<longleftrightarrow> scaleR 2 (midpoint a b) = scaleR 2 c"
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4445
    by simp
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4446
  thus ?thesis
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4447
    unfolding midpoint_def scaleR_2 [symmetric] by simp
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4448
qed
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4449
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4450
lemma dist_midpoint:
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4451
  fixes a b :: "'a::real_normed_vector" shows
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4452
  "dist a (midpoint a b) = (dist a b) / 2" (is ?t1)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4453
  "dist b (midpoint a b) = (dist a b) / 2" (is ?t2)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4454
  "dist (midpoint a b) a = (dist a b) / 2" (is ?t3)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4455
  "dist (midpoint a b) b = (dist a b) / 2" (is ?t4)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4456
proof-
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4457
  have *: "\<And>x y::'a. 2 *\<^sub>R x = - y \<Longrightarrow> norm x = (norm y) / 2" unfolding equation_minus_iff by auto
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4458
  have **:"\<And>x y::'a. 2 *\<^sub>R x =   y \<Longrightarrow> norm x = (norm y) / 2" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4459
  note scaleR_right_distrib [simp]
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4460
  show ?t1 unfolding midpoint_def dist_norm apply (rule **)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4461
    by (simp add: scaleR_right_diff_distrib, simp add: scaleR_2)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4462
  show ?t2 unfolding midpoint_def dist_norm apply (rule *)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4463
    by (simp add: scaleR_right_diff_distrib, simp add: scaleR_2)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4464
  show ?t3 unfolding midpoint_def dist_norm apply (rule *)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4465
    by (simp add: scaleR_right_diff_distrib, simp add: scaleR_2)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4466
  show ?t4 unfolding midpoint_def dist_norm apply (rule **)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4467
    by (simp add: scaleR_right_diff_distrib, simp add: scaleR_2)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4468
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4469
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4470
lemma midpoint_eq_endpoint:
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4471
  "midpoint a b = a \<longleftrightarrow> a = b"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4472
  "midpoint a b = b \<longleftrightarrow> a = b"
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4473
  unfolding midpoint_eq_iff by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4474
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4475
lemma convex_contains_segment:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4476
  "convex s \<longleftrightarrow> (\<forall>a\<in>s. \<forall>b\<in>s. closed_segment a b \<subseteq> s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4477
  unfolding convex_alt closed_segment_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4478
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4479
lemma convex_imp_starlike:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4480
  "convex s \<Longrightarrow> s \<noteq> {} \<Longrightarrow> starlike s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4481
  unfolding convex_contains_segment starlike_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4482
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4483
lemma segment_convex_hull:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4484
 "closed_segment a b = convex hull {a,b}" proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4485
  have *:"\<And>x. {x} \<noteq> {}" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4486
  have **:"\<And>u v. u + v = 1 \<longleftrightarrow> u = 1 - (v::real)" by auto
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  4487
  show ?thesis unfolding segment convex_hull_insert[OF *] convex_hull_singleton apply(rule set_eqI)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4488
    unfolding mem_Collect_eq apply(rule,erule exE)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4489
    apply(rule_tac x="1 - u" in exI) apply rule defer apply(rule_tac x=u in exI) defer
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4490
    apply(erule exE, (erule conjE)?)+ apply(rule_tac x="1 - u" in exI) unfolding ** by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4491
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4492
lemma convex_segment: "convex (closed_segment a b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4493
  unfolding segment_convex_hull by(rule convex_convex_hull)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4494
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4495
lemma ends_in_segment: "a \<in> closed_segment a b" "b \<in> closed_segment a b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4496
  unfolding segment_convex_hull apply(rule_tac[!] hull_subset[unfolded subset_eq, rule_format]) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4497
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4498
lemma segment_furthest_le:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4499
  fixes a b x y :: "'a::euclidean_space"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4500
  assumes "x \<in> closed_segment a b" shows "norm(y - x) \<le> norm(y - a) \<or>  norm(y - x) \<le> norm(y - b)" proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4501
  obtain z where "z\<in>{a, b}" "norm (x - y) \<le> norm (z - y)" using simplex_furthest_le[of "{a, b}" y]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4502
    using assms[unfolded segment_convex_hull] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4503
  thus ?thesis by(auto simp add:norm_minus_commute) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4504
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4505
lemma segment_bound:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4506
  fixes x a b :: "'a::euclidean_space"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4507
  assumes "x \<in> closed_segment a b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4508
  shows "norm(x - a) \<le> norm(b - a)" "norm(x - b) \<le> norm(b - a)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4509
  using segment_furthest_le[OF assms, of a]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4510
  using segment_furthest_le[OF assms, of b]
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4511
  by (auto simp add:norm_minus_commute)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4512
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4513
lemma segment_refl:"closed_segment a a = {a}" unfolding segment by (auto simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4514
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4515
lemma between_mem_segment: "between (a,b) x \<longleftrightarrow> x \<in> closed_segment a b"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  4516
  unfolding between_def by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4517
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4518
lemma between:"between (a,b) (x::'a::euclidean_space) \<longleftrightarrow> dist a b = (dist a x) + (dist x b)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4519
proof(cases "a = b")
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  4520
  case True thus ?thesis unfolding between_def split_conv
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4521
    by(auto simp add:segment_refl dist_commute) next
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4522
  case False hence Fal:"norm (a - b) \<noteq> 0" and Fal2: "norm (a - b) > 0" by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4523
  have *:"\<And>u. a - ((1 - u) *\<^sub>R a + u *\<^sub>R b) = u *\<^sub>R (a - b)" by (auto simp add: algebra_simps)
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  4524
  show ?thesis unfolding between_def split_conv closed_segment_def mem_Collect_eq
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4525
    apply rule apply(erule exE, (erule conjE)+) apply(subst dist_triangle_eq) proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4526
      fix u assume as:"x = (1 - u) *\<^sub>R a + u *\<^sub>R b" "0 \<le> u" "u \<le> 1"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4527
      hence *:"a - x = u *\<^sub>R (a - b)" "x - b = (1 - u) *\<^sub>R (a - b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4528
        unfolding as(1) by(auto simp add:algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4529
      show "norm (a - x) *\<^sub>R (x - b) = norm (x - b) *\<^sub>R (a - x)"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4530
        unfolding norm_minus_commute[of x a] * using as(2,3)
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  4531
        by(auto simp add: field_simps)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4532
    next assume as:"dist a b = dist a x + dist x b"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4533
      have "norm (a - x) / norm (a - b) \<le> 1" unfolding divide_le_eq_1_pos[OF Fal2]
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4534
        unfolding as[unfolded dist_norm] norm_ge_zero by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4535
      thus "\<exists>u. x = (1 - u) *\<^sub>R a + u *\<^sub>R b \<and> 0 \<le> u \<and> u \<le> 1" apply(rule_tac x="dist a x / dist a b" in exI)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4536
        unfolding dist_norm apply(subst euclidean_eq_iff) apply rule defer apply(rule, rule divide_nonneg_pos) prefer 4
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4537
      proof(rule) fix i :: 'a assume i:"i\<in>Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4538
          have "((1 - norm (a - x) / norm (a - b)) *\<^sub>R a + (norm (a - x) / norm (a - b)) *\<^sub>R b) \<bullet> i =
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4539
            ((norm (a - b) - norm (a - x)) * (a \<bullet> i) + norm (a - x) * (b \<bullet> i)) / norm (a - b)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4540
            using Fal by(auto simp add: field_simps inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4541
          also have "\<dots> = x\<bullet>i" apply(rule divide_eq_imp[OF Fal])
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4542
            unfolding as[unfolded dist_norm] using as[unfolded dist_triangle_eq] apply-
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4543
            apply(subst (asm) euclidean_eq_iff) using i apply(erule_tac x=i in ballE) by(auto simp add:field_simps inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4544
          finally show "x \<bullet> i = ((1 - norm (a - x) / norm (a - b)) *\<^sub>R a + (norm (a - x) / norm (a - b)) *\<^sub>R b) \<bullet> i"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4545
            by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4546
        qed(insert Fal2, auto) qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4547
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4548
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4549
lemma between_midpoint: fixes a::"'a::euclidean_space" shows
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4550
  "between (a,b) (midpoint a b)" (is ?t1)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4551
  "between (b,a) (midpoint a b)" (is ?t2)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4552
proof- have *:"\<And>x y z. x = (1/2::real) *\<^sub>R z \<Longrightarrow> y = (1/2) *\<^sub>R z \<Longrightarrow> norm z = norm x + norm y" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4553
  show ?t1 ?t2 unfolding between midpoint_def dist_norm apply(rule_tac[!] *)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4554
    unfolding euclidean_eq_iff[where 'a='a]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4555
    by(auto simp add:field_simps inner_simps) qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4556
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4557
lemma between_mem_convex_hull:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4558
  "between (a,b) x \<longleftrightarrow> x \<in> convex hull {a,b}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4559
  unfolding between_mem_segment segment_convex_hull ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4560
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4561
subsection {* Shrinking towards the interior of a convex set *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4562
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4563
lemma mem_interior_convex_shrink:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4564
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4565
  assumes "convex s" "c \<in> interior s" "x \<in> s" "0 < e" "e \<le> 1"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4566
  shows "x - e *\<^sub>R (x - c) \<in> interior s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4567
proof- obtain d where "d>0" and d:"ball c d \<subseteq> s" using assms(2) unfolding mem_interior by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4568
  show ?thesis unfolding mem_interior apply(rule_tac x="e*d" in exI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4569
    apply(rule) defer unfolding subset_eq Ball_def mem_ball proof(rule,rule)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4570
    fix y assume as:"dist (x - e *\<^sub>R (x - c)) y < e * d"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4571
    have *:"y = (1 - (1 - e)) *\<^sub>R ((1 / e) *\<^sub>R y - ((1 - e) / e) *\<^sub>R x) + (1 - e) *\<^sub>R x" using `e>0` by (auto simp add: scaleR_left_diff_distrib scaleR_right_diff_distrib)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4572
    have "dist c ((1 / e) *\<^sub>R y - ((1 - e) / e) *\<^sub>R x) = abs(1/e) * norm (e *\<^sub>R c - y + (1 - e) *\<^sub>R x)"
49530
wenzelm
parents: 49529
diff changeset
  4573
      unfolding dist_norm unfolding norm_scaleR[symmetric] apply(rule arg_cong[where f=norm]) using `e>0`
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4574
      by(auto simp add: euclidean_eq_iff[where 'a='a] field_simps inner_simps)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4575
    also have "\<dots> = abs(1/e) * norm (x - e *\<^sub>R (x - c) - y)" by(auto intro!:arg_cong[where f=norm] simp add: algebra_simps)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4576
    also have "\<dots> < d" using as[unfolded dist_norm] and `e>0`
36778
739a9379e29b avoid using real-specific versions of generic lemmas
huffman
parents: 36725
diff changeset
  4577
      by(auto simp add:pos_divide_less_eq[OF `e>0`] mult_commute)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4578
    finally show "y \<in> s" apply(subst *) apply(rule assms(1)[unfolded convex_alt,rule_format])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4579
      apply(rule d[unfolded subset_eq,rule_format]) unfolding mem_ball using assms(3-5) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4580
  qed(rule mult_pos_pos, insert `e>0` `d>0`, auto) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4581
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4582
lemma mem_interior_closure_convex_shrink:
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4583
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4584
  assumes "convex s" "c \<in> interior s" "x \<in> closure s" "0 < e" "e \<le> 1"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4585
  shows "x - e *\<^sub>R (x - c) \<in> interior s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4586
proof- obtain d where "d>0" and d:"ball c d \<subseteq> s" using assms(2) unfolding mem_interior by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4587
  have "\<exists>y\<in>s. norm (y - x) * (1 - e) < e * d" proof(cases "x\<in>s")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4588
    case True thus ?thesis using `e>0` `d>0` by(rule_tac bexI[where x=x], auto intro!: mult_pos_pos) next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4589
    case False hence x:"x islimpt s" using assms(3)[unfolded closure_def] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4590
    show ?thesis proof(cases "e=1")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4591
      case True obtain y where "y\<in>s" "y \<noteq> x" "dist y x < 1"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4592
        using x[unfolded islimpt_approachable,THEN spec[where x=1]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4593
      thus ?thesis apply(rule_tac x=y in bexI) unfolding True using `d>0` by auto next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4594
      case False hence "0 < e * d / (1 - e)" and *:"1 - e > 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4595
        using `e\<le>1` `e>0` `d>0` by(auto intro!:mult_pos_pos divide_pos_pos)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4596
      then obtain y where "y\<in>s" "y \<noteq> x" "dist y x < e * d / (1 - e)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4597
        using x[unfolded islimpt_approachable,THEN spec[where x="e*d / (1 - e)"]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4598
      thus ?thesis apply(rule_tac x=y in bexI) unfolding dist_norm using pos_less_divide_eq[OF *] by auto qed qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4599
  then obtain y where "y\<in>s" and y:"norm (y - x) * (1 - e) < e * d" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4600
  def z \<equiv> "c + ((1 - e) / e) *\<^sub>R (x - y)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4601
  have *:"x - e *\<^sub>R (x - c) = y - e *\<^sub>R (y - z)" unfolding z_def using `e>0` by (auto simp add: scaleR_right_diff_distrib scaleR_right_distrib scaleR_left_diff_distrib)
44522
2f7e9d890efe rename subset_{interior,closure} to {interior,closure}_mono;
huffman
parents: 44519
diff changeset
  4602
  have "z\<in>interior s" apply(rule interior_mono[OF d,unfolded subset_eq,rule_format])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4603
    unfolding interior_open[OF open_ball] mem_ball z_def dist_norm using y and assms(4,5)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4604
    by(auto simp add:field_simps norm_minus_commute)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4605
  thus ?thesis unfolding * apply - apply(rule mem_interior_convex_shrink)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4606
    using assms(1,4-5) `y\<in>s` by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4607
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4608
subsection {* Some obvious but surprisingly hard simplex lemmas *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4609
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4610
lemma simplex:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4611
  assumes "finite s" "0 \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4612
  shows "convex hull (insert 0 s) =  { y. (\<exists>u. (\<forall>x\<in>s. 0 \<le> u x) \<and> setsum u s \<le> 1 \<and> setsum (\<lambda>x. u x *\<^sub>R x) s = y)}"
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  4613
  unfolding convex_hull_finite[OF finite.insertI[OF assms(1)]] apply(rule set_eqI, rule) unfolding mem_Collect_eq
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4614
  apply(erule_tac[!] exE) apply(erule_tac[!] conjE)+ unfolding setsum_clauses(2)[OF assms(1)]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4615
  apply(rule_tac x=u in exI) defer apply(rule_tac x="\<lambda>x. if x = 0 then 1 - setsum u s else u x" in exI) using assms(2)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4616
  unfolding if_smult and setsum_delta_notmem[OF assms(2)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4617
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4618
lemma substd_simplex:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4619
  assumes d: "d \<subseteq> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4620
  shows "convex hull (insert 0 d) = {x. (\<forall>i\<in>Basis. 0 \<le> x\<bullet>i) \<and> (\<Sum>i\<in>d. x\<bullet>i) \<le> 1 \<and> (\<forall>i\<in>Basis. i \<notin> d --> x\<bullet>i = 0)}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4621
  (is "convex hull (insert 0 ?p) = ?s")
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4622
proof- let ?D = d
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4623
  have "0 ~: ?p" using assms by (auto simp: image_def)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4624
  from d have "finite d" by (blast intro: finite_subset finite_Basis)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4625
  show ?thesis unfolding simplex[OF `finite d` `0 ~: ?p`]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4626
    apply(rule set_eqI) unfolding mem_Collect_eq apply rule
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4627
    apply(erule exE, (erule conjE)+) apply(erule_tac[2] conjE)+ proof-
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4628
    fix x::"'a::euclidean_space" and u assume as: "\<forall>x\<in>?D. 0 \<le> u x"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4629
      "setsum u ?D \<le> 1" "(\<Sum>x\<in>?D. u x *\<^sub>R x) = x"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4630
    have *:"\<forall>i\<in>Basis. i:d --> u i = x\<bullet>i" and "(\<forall>i\<in>Basis. i ~: d --> x \<bullet> i = 0)" using as(3)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4631
      unfolding substdbasis_expansion_unique[OF assms] by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4632
    hence **:"setsum u ?D = setsum (op \<bullet> x) ?D"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4633
      apply-apply(rule setsum_cong2) using assms by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4634
    have " (\<forall>i\<in>Basis. 0 \<le> x\<bullet>i) \<and> setsum (op \<bullet> x) ?D \<le> 1"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4635
      apply - proof(rule,rule)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4636
      fix i :: 'a assume i:"i\<in>Basis" have "i : d ==> 0 \<le> x\<bullet>i" unfolding *[rule_format,OF i,symmetric]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4637
         apply(rule_tac as(1)[rule_format]) by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4638
      moreover have "i ~: d ==> 0 \<le> x\<bullet>i"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4639
        using `(\<forall>i\<in>Basis. i ~: d --> x \<bullet> i = 0)`[rule_format, OF i] by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4640
      ultimately show "0 \<le> x\<bullet>i" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4641
    qed(insert as(2)[unfolded **], auto)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4642
    from this show " (\<forall>i\<in>Basis. 0 \<le> x\<bullet>i) \<and> setsum (op \<bullet> x) ?D \<le> 1 & (\<forall>i\<in>Basis. i ~: d --> x \<bullet> i = 0)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4643
      using `(\<forall>i\<in>Basis. i ~: d --> x \<bullet> i = 0)` by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4644
  next fix x::"'a::euclidean_space" assume as:"\<forall>i\<in>Basis. 0 \<le> x \<bullet> i" "setsum (op \<bullet> x) ?D \<le> 1"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4645
      "(\<forall>i\<in>Basis. i ~: d --> x \<bullet> i = 0)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4646
    show "\<exists>u. (\<forall>x\<in>?D. 0 \<le> u x) \<and> setsum u ?D \<le> 1 \<and> (\<Sum>x\<in>?D. u x *\<^sub>R x) = x"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4647
      using as d unfolding substdbasis_expansion_unique[OF assms]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4648
      by (rule_tac x="inner x" in exI) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4649
  qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4650
qed
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4651
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4652
lemma std_simplex:
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4653
  "convex hull (insert 0 Basis) =
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4654
        {x::'a::euclidean_space . (\<forall>i\<in>Basis. 0 \<le> x\<bullet>i) \<and> setsum (\<lambda>i. x\<bullet>i) Basis \<le> 1 }"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4655
  using substd_simplex[of Basis] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4656
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4657
lemma interior_std_simplex:
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4658
  "interior (convex hull (insert 0 Basis)) =
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4659
  {x::'a::euclidean_space. (\<forall>i\<in>Basis. 0 < x\<bullet>i) \<and> setsum (\<lambda>i. x\<bullet>i) Basis < 1 }"
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  4660
  apply(rule set_eqI) unfolding mem_interior std_simplex unfolding subset_eq mem_Collect_eq Ball_def mem_ball
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4661
  unfolding Ball_def[symmetric] apply rule apply(erule exE, (erule conjE)+) defer apply(erule conjE) proof-
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4662
  fix x::"'a" and e assume "0<e" and as:"\<forall>xa. dist x xa < e \<longrightarrow> (\<forall>x\<in>Basis. 0 \<le> xa \<bullet> x) \<and> setsum (op \<bullet> xa) Basis \<le> 1"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4663
  show "(\<forall>xa\<in>Basis. 0 < x \<bullet> xa) \<and> setsum (op \<bullet> x) Basis < 1" apply(safe) proof-
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4664
    fix i :: 'a assume i:"i\<in>Basis" thus "0 < x \<bullet> i" using as[THEN spec[where x="x - (e / 2) *\<^sub>R i"]] and `e>0`
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4665
      unfolding dist_norm
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4666
      by (auto elim!:ballE[where x=i] simp: inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4667
  next have **:"dist x (x + (e / 2) *\<^sub>R (SOME i. i\<in>Basis)) < e" using  `e>0`
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4668
      unfolding dist_norm by(auto intro!: mult_strict_left_mono simp: SOME_Basis)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4669
    have "\<And>i. i\<in>Basis \<Longrightarrow> (x + (e / 2) *\<^sub>R (SOME i. i\<in>Basis)) \<bullet> i = x\<bullet>i + (if i = (SOME i. i\<in>Basis) then e/2 else 0)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4670
      by (auto simp: SOME_Basis inner_Basis inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4671
    hence *:"setsum (op \<bullet> (x + (e / 2) *\<^sub>R (SOME i. i\<in>Basis))) Basis = setsum (\<lambda>i. x\<bullet>i + (if (SOME i. i\<in>Basis) = i then e/2 else 0)) Basis"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4672
      apply(rule_tac setsum_cong) by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4673
    have "setsum (op \<bullet> x) Basis < setsum (op \<bullet> (x + (e / 2) *\<^sub>R (SOME i. i\<in>Basis))) Basis" unfolding * setsum_addf
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4674
      using `0<e` DIM_positive[where 'a='a] apply(subst setsum_delta') by (auto simp: SOME_Basis)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4675
    also have "\<dots> \<le> 1" using ** apply(drule_tac as[rule_format]) by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4676
    finally show "setsum (op \<bullet> x) Basis < 1" by auto qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4677
next fix x::"'a" assume as:"\<forall>i\<in>Basis. 0 < x \<bullet> i" "setsum (op \<bullet> x) Basis < 1"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4678
  guess a using UNIV_witness[where 'a='b] ..
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4679
  let ?d = "(1 - setsum (op \<bullet> x) Basis) / real (DIM('a))"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4680
  have "Min ((op \<bullet> x) ` Basis) > 0" apply(rule Min_grI) using as(1) by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4681
  moreover have"?d > 0" apply(rule divide_pos_pos) using as(2) by (auto simp add: Suc_le_eq DIM_positive)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4682
  ultimately show "\<exists>e>0. \<forall>y. dist x y < e \<longrightarrow> (\<forall>i\<in>Basis. 0 \<le> y \<bullet> i) \<and> setsum (op \<bullet> y) Basis \<le> 1"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4683
    apply(rule_tac x="min (Min ((op \<bullet> x) ` Basis)) ?D" in exI) apply rule defer apply(rule,rule) proof-
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4684
    fix y assume y:"dist x y < min (Min (op \<bullet> x ` Basis)) ?d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4685
    have "setsum (op \<bullet> y) Basis \<le> setsum (\<lambda>i. x\<bullet>i + ?d) Basis" proof(rule setsum_mono)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4686
      fix i :: 'a assume i: "i\<in>Basis" hence "abs (y\<bullet>i - x\<bullet>i) < ?d" apply-apply(rule le_less_trans)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4687
        using Basis_le_norm[OF i, of "y - x"]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4688
        using y[unfolded min_less_iff_conj dist_norm, THEN conjunct2] by(auto simp add: norm_minus_commute inner_diff_left)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4689
      thus "y \<bullet> i \<le> x \<bullet> i + ?d" by auto qed
44629
1cd782f3458b remove redundant lemma card_enum
huffman
parents: 44531
diff changeset
  4690
    also have "\<dots> \<le> 1" unfolding setsum_addf setsum_constant real_eq_of_nat by(auto simp add: Suc_le_eq)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4691
    finally show "(\<forall>i\<in>Basis. 0 \<le> y \<bullet> i) \<and> setsum (op \<bullet> y) Basis \<le> 1"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4692
    proof safe fix i :: 'a assume i:"i\<in>Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4693
      have "norm (x - y) < x\<bullet>i" apply(rule less_le_trans)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4694
        apply(rule y[unfolded min_less_iff_conj dist_norm, THEN conjunct1]) using i by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4695
      thus "0 \<le> y\<bullet>i" using Basis_le_norm[OF i, of "x - y"] and as(1)[rule_format, OF i]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4696
        by (auto simp: inner_simps)
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4697
    qed qed auto qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4698
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4699
lemma interior_std_simplex_nonempty: obtains a::"'a::euclidean_space" where
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4700
  "a \<in> interior(convex hull (insert 0 Basis))" proof-
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4701
  let ?D = "Basis :: 'a set" let ?a = "setsum (\<lambda>b::'a. inverse (2 * real DIM('a)) *\<^sub>R b) Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4702
  { fix i :: 'a assume i:"i\<in>Basis" have "?a \<bullet> i = inverse (2 * real DIM('a))"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4703
      by (rule trans[of _ "setsum (\<lambda>j. if i = j then inverse (2 * real DIM('a)) else 0) ?D"])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4704
         (simp_all add: setsum_cases i) }
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4705
  note ** = this
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4706
  show ?thesis apply(rule that[of ?a]) unfolding interior_std_simplex mem_Collect_eq proof safe
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4707
    fix i :: 'a assume i:"i\<in>Basis" show "0 < ?a \<bullet> i" unfolding **[OF i] by(auto simp add: Suc_le_eq DIM_positive)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4708
  next have "setsum (op \<bullet> ?a) ?D = setsum (\<lambda>i. inverse (2 * real DIM('a))) ?D" apply(rule setsum_cong2, rule **) by auto
49530
wenzelm
parents: 49529
diff changeset
  4709
    also have "\<dots> < 1" unfolding setsum_constant real_eq_of_nat divide_inverse[symmetric] by (auto simp add:field_simps)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4710
    finally show "setsum (op \<bullet> ?a) ?D < 1" by auto qed qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4711
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4712
lemma rel_interior_substd_simplex: assumes d: "d\<subseteq>Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4713
  shows "rel_interior (convex hull (insert 0 d)) =
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4714
  {x::'a::euclidean_space. (\<forall>i\<in>d. 0 < x\<bullet>i) \<and> (\<Sum>i\<in>d. x\<bullet>i) < 1 \<and> (\<forall>i\<in>Basis. i ~: d --> x\<bullet>i = 0)}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4715
  (is "rel_interior (convex hull (insert 0 ?p)) = ?s")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4716
(* Proof is a modified copy of the proof of similar lemma interior_std_simplex in Convex_Euclidean_Space.thy *)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4717
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4718
have "finite d" apply(rule finite_subset) using assms by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4719
{ assume "d={}" hence ?thesis using rel_interior_sing using euclidean_eq_iff[of _ 0] by auto }
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4720
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4721
{ assume "d~={}"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4722
have h0: "affine hull (convex hull (insert 0 ?p))={x::'a::euclidean_space. (\<forall>i\<in>Basis. i ~: d --> x\<bullet>i = 0)}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4723
   using affine_hull_convex_hull affine_hull_substd_basis assms by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4724
have aux: "!!x::'a. \<forall>i\<in>Basis. ((\<forall>i\<in>d. 0 \<le> x\<bullet>i) \<and> (\<forall>i\<in>Basis. i \<notin> d \<longrightarrow> x\<bullet>i = 0)) \<longrightarrow> 0 \<le> x\<bullet>i" 
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4725
  by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4726
{ fix x::"'a::euclidean_space" assume x_def: "x : rel_interior (convex hull (insert 0 ?p))"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4727
  from this obtain e where e0: "e>0" and
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4728
       "ball x e Int {xa. (\<forall>i\<in>Basis. i ~: d --> xa\<bullet>i = 0)} <= convex hull (insert 0 ?p)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4729
       using mem_rel_interior_ball[of x "convex hull (insert 0 ?p)"] h0 by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4730
  hence as: "ALL xa. (dist x xa < e & (\<forall>i\<in>Basis. i ~: d --> xa\<bullet>i = 0)) -->
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4731
    (!i : d. 0 <= xa \<bullet> i) & setsum (op \<bullet> xa) d <= 1"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4732
    unfolding ball_def unfolding substd_simplex[OF assms] using assms by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4733
  have x0: "(\<forall>i\<in>Basis. i ~: d --> x\<bullet>i = 0)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4734
    using x_def rel_interior_subset  substd_simplex[OF assms] by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4735
  have "(\<forall>i\<in>d. 0 < x \<bullet> i) & setsum (op \<bullet> x) d < 1 & (\<forall>i\<in>Basis. i ~: d --> x\<bullet>i = 0)" apply(rule,rule)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4736
  proof-
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4737
    fix i::'a assume "i\<in>d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4738
    hence "\<forall>ia\<in>d. 0 \<le> (x - (e / 2) *\<^sub>R i) \<bullet> ia" apply-apply(rule as[rule_format,THEN conjunct1])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4739
      unfolding dist_norm using d `e>0` x0 by (auto simp: inner_simps inner_Basis)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4740
    thus "0 < x \<bullet> i" apply(erule_tac x=i in ballE) using `e>0` `i\<in>d` d
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4741
    by (auto simp: inner_simps inner_Basis)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4742
  next obtain a where a:"a:d" using `d ~= {}` by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4743
    then have **:"dist x (x + (e / 2) *\<^sub>R a) < e"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4744
      using  `e>0` norm_Basis[of a] d
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4745
      unfolding dist_norm by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4746
    have "\<And>i. i\<in>Basis \<Longrightarrow> (x + (e / 2) *\<^sub>R a) \<bullet> i = x\<bullet>i + (if i = a then e/2 else 0)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4747
      using a d by (auto simp: inner_simps inner_Basis)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4748
    hence *:"setsum (op \<bullet> (x + (e / 2) *\<^sub>R a)) d =
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4749
      setsum (\<lambda>i. x\<bullet>i + (if a = i then e/2 else 0)) d" using d by (intro setsum_cong) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4750
    have "a \<in> Basis" using `a \<in> d` d by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4751
    then have h1: "(\<forall>i\<in>Basis. i ~: d --> (x + (e / 2) *\<^sub>R a) \<bullet> i = 0)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4752
      using x0 d `a\<in>d` by (auto simp add: inner_add_left inner_Basis)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4753
    have "setsum (op \<bullet> x) d < setsum (op \<bullet> (x + (e / 2) *\<^sub>R a)) d" unfolding * setsum_addf
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4754
      using `0<e` `a:d` using `finite d` by(auto simp add: setsum_delta')
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4755
    also have "\<dots> \<le> 1" using ** h1 as[rule_format, of "x + (e / 2) *\<^sub>R a"] by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4756
    finally show "setsum (op \<bullet> x) d < 1 & (\<forall>i\<in>Basis. i ~: d --> x\<bullet>i = 0)" using x0 by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4757
  qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4758
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4759
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4760
{
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4761
  fix x::"'a::euclidean_space" assume as: "x : ?s"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4762
  have "!i. ((0<x\<bullet>i) | (0=x\<bullet>i) --> 0<=x\<bullet>i)" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4763
  moreover have "!i. (i:d) | (i ~: d)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4764
  ultimately
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4765
  have "!i. ( (ALL i:d. 0 < x\<bullet>i) & (ALL i. i ~: d --> x\<bullet>i = 0) ) --> 0 <= x\<bullet>i" by metis
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4766
  hence h2: "x : convex hull (insert 0 ?p)" using as assms
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4767
    unfolding substd_simplex[OF assms] by fastforce
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4768
  obtain a where a:"a:d" using `d ~= {}` by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4769
  let ?d = "(1 - setsum (op \<bullet> x) d) / real (card d)"
44466
0e5c27f07529 remove unnecessary lemma card_ge1
huffman
parents: 44465
diff changeset
  4770
  have "0 < card d" using `d ~={}` `finite d` by (simp add: card_gt_0_iff)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4771
  have "Min ((op \<bullet> x) ` d) > 0" using as `d \<noteq> {}` `finite d` by (simp add: Min_grI)
44466
0e5c27f07529 remove unnecessary lemma card_ge1
huffman
parents: 44465
diff changeset
  4772
  moreover have "?d > 0" apply(rule divide_pos_pos) using as using `0 < card d` by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4773
  ultimately have h3: "min (Min ((op \<bullet> x) ` d)) ?d > 0" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4774
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4775
  have "x : rel_interior (convex hull (insert 0 ?p))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4776
    unfolding rel_interior_ball mem_Collect_eq h0 apply(rule,rule h2)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4777
    unfolding substd_simplex[OF assms]
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4778
    apply(rule_tac x="min (Min ((op \<bullet> x) ` d)) ?d" in exI) apply(rule,rule h3) apply safe unfolding mem_ball
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4779
  proof-
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4780
    fix y::'a assume y:"dist x y < min (Min (op \<bullet> x ` d)) ?d" and y2: "\<forall>i\<in>Basis. i \<notin> d \<longrightarrow> y\<bullet>i = 0"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4781
    have "setsum (op \<bullet> y) d \<le> setsum (\<lambda>i. x\<bullet>i + ?d) d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4782
    proof(rule setsum_mono)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4783
      fix i assume "i \<in> d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4784
      with d have i: "i \<in> Basis" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4785
      have "abs (y\<bullet>i - x\<bullet>i) < ?d" apply(rule le_less_trans) using Basis_le_norm[OF i, of "y - x"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4786
        using y[unfolded min_less_iff_conj dist_norm, THEN conjunct2]
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4787
        by (auto simp add: norm_minus_commute inner_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4788
      thus "y \<bullet> i \<le> x \<bullet> i + ?d" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4789
    qed
44629
1cd782f3458b remove redundant lemma card_enum
huffman
parents: 44531
diff changeset
  4790
    also have "\<dots> \<le> 1" unfolding setsum_addf setsum_constant real_eq_of_nat
44466
0e5c27f07529 remove unnecessary lemma card_ge1
huffman
parents: 44465
diff changeset
  4791
      using `0 < card d` by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4792
    finally show "setsum (op \<bullet> y) d \<le> 1" .
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4793
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4794
    fix i :: 'a assume i: "i \<in> Basis" thus "0 \<le> y\<bullet>i"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4795
    proof(cases "i\<in>d") case True
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4796
      have "norm (x - y) < x\<bullet>i" using y[unfolded min_less_iff_conj dist_norm, THEN conjunct1]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4797
        using Min_gr_iff[of "op \<bullet> x ` d" "norm (x - y)"] `0 < card d` `i:d`
44466
0e5c27f07529 remove unnecessary lemma card_ge1
huffman
parents: 44465
diff changeset
  4798
        by (simp add: card_gt_0_iff)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4799
      thus "0 \<le> y\<bullet>i" using Basis_le_norm[OF i, of "x - y"] and as(1)[rule_format]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4800
        by (auto simp: inner_simps)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4801
    qed(insert y2, auto)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4802
  qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4803
} ultimately have
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4804
    "\<And>x. (x : rel_interior (convex hull insert 0 d)) = (x \<in> {x. (ALL i:d. 0 < x \<bullet> i) &
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4805
    setsum (op \<bullet> x) d < 1 & (\<forall>i\<in>Basis. i ~: d --> x \<bullet> i = 0)})" by blast
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4806
from this have ?thesis by (rule set_eqI)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4807
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4808
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4809
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4810
lemma rel_interior_substd_simplex_nonempty: assumes "d ~={}" "d\<subseteq>Basis"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4811
  obtains a::"'a::euclidean_space" where
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4812
  "a : rel_interior(convex hull (insert 0 d))" proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4813
(* Proof is a modified copy of the proof of similar lemma interior_std_simplex_nonempty in Convex_Euclidean_Space.thy *)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4814
  let ?D = d let ?a = "setsum (\<lambda>b::'a::euclidean_space. inverse (2 * real (card d)) *\<^sub>R b) ?D"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4815
  have "finite d" apply(rule finite_subset) using assms(2) by auto
44466
0e5c27f07529 remove unnecessary lemma card_ge1
huffman
parents: 44465
diff changeset
  4816
  hence d1: "0 < real(card d)" using `d ~={}` by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4817
  { fix i assume "i:d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4818
    have "?a \<bullet> i = inverse (2 * real (card d))"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4819
      apply(rule trans[of _ "setsum (\<lambda>j. if i = j then inverse (2 * real (card d)) else 0) ?D"])
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4820
      unfolding inner_setsum_left
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4821
      apply(rule setsum_cong2)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4822
      using `i:d` `finite d` setsum_delta'[of d i "(%k. inverse (2 * real (card d)))"] d1 assms(2)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4823
      by (auto simp: inner_simps inner_Basis set_rev_mp[OF _ assms(2)]) }
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4824
  note ** = this
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4825
  show ?thesis apply(rule that[of ?a]) unfolding rel_interior_substd_simplex[OF assms(2)] mem_Collect_eq
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4826
  proof safe fix i assume "i:d"
44466
0e5c27f07529 remove unnecessary lemma card_ge1
huffman
parents: 44465
diff changeset
  4827
    have "0 < inverse (2 * real (card d))" using d1 by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4828
    also have "...=?a \<bullet> i" using **[of i] `i:d` by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4829
    finally show "0 < ?a \<bullet> i" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4830
  next have "setsum (op \<bullet> ?a) ?D = setsum (\<lambda>i. inverse (2 * real (card d))) ?D"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4831
      by(rule setsum_cong2, rule **)
49530
wenzelm
parents: 49529
diff changeset
  4832
    also have "\<dots> < 1" unfolding setsum_constant real_eq_of_nat divide_real_def[symmetric]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4833
      by (auto simp add:field_simps)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4834
    finally show "setsum (op \<bullet> ?a) ?D < 1" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4835
  next fix i assume "i\<in>Basis" and "i~:d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4836
    have "?a : (span d)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4837
      apply (rule span_setsum[of d "(%b. b /\<^sub>R (2 * real (card d)))" d])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4838
      using finite_subset[OF assms(2) finite_Basis]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4839
      apply blast
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4840
    proof-
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4841
      { fix x assume "(x :: 'a::euclidean_space): d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4842
        hence "x : span d"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4843
          using span_superset[of _ "d"] by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4844
        hence "(x /\<^sub>R (2 * real (card d))) : (span d)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4845
          using span_mul[of x "d" "(inverse (real (card d)) / 2)"] by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4846
      } thus "\<forall>x\<in>d. x /\<^sub>R (2 * real (card d)) \<in> span d" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4847
    qed
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4848
    thus "?a \<bullet> i = 0 " using `i~:d` unfolding span_substd_basis[OF assms(2)] using `i\<in>Basis` by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4849
  qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4850
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4851
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4852
subsection {* Relative interior of convex set *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4853
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4854
lemma rel_interior_convex_nonempty_aux:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4855
fixes S :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4856
assumes "convex S" and "0 : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4857
shows "rel_interior S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4858
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4859
{ assume "S = {0}" hence ?thesis using rel_interior_sing by auto }
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4860
moreover {
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4861
assume "S ~= {0}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4862
obtain B where B_def: "independent B & B<=S & (S <= span B) & card B = dim S" using basis_exists[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4863
hence "B~={}" using B_def assms `S ~= {0}` span_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4864
have "insert 0 B <= span B" using subspace_span[of B] subspace_0[of "span B"] span_inc by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4865
hence "span (insert 0 B) <= span B"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4866
    using span_span[of B] span_mono[of "insert 0 B" "span B"] by blast
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4867
hence "convex hull insert 0 B <= span B"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4868
    using convex_hull_subset_span[of "insert 0 B"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4869
hence "span (convex hull insert 0 B) <= span B"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4870
    using span_span[of B] span_mono[of "convex hull insert 0 B" "span B"] by blast
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4871
hence *: "span (convex hull insert 0 B) = span B"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4872
    using span_mono[of B "convex hull insert 0 B"] hull_subset[of "insert 0 B"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4873
hence "span (convex hull insert 0 B) = span S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4874
    using B_def span_mono[of B S] span_mono[of S "span B"] span_span[of B] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4875
moreover have "0 : affine hull (convex hull insert 0 B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4876
    using hull_subset[of "convex hull insert 0 B"] hull_subset[of "insert 0 B"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4877
ultimately have **: "affine hull (convex hull insert 0 B) = affine hull S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4878
    using affine_hull_span_0[of "convex hull insert 0 B"] affine_hull_span_0[of "S"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4879
    assms  hull_subset[of S] by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4880
obtain d and f::"'n=>'n" where fd: "card d = card B & linear f & f ` B = d &
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4881
       f ` span B = {x. \<forall>i\<in>Basis. i ~: d --> x \<bullet> i = (0::real)} &  inj_on f (span B)" and d:"d\<subseteq>Basis"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4882
    using basis_to_substdbasis_subspace_isomorphism[of B,OF _ ] B_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4883
hence "bounded_linear f" using linear_conv_bounded_linear by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4884
have "d ~={}" using fd B_def `B ~={}` by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4885
have "(insert 0 d) = f ` (insert 0 B)" using fd linear_0 by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4886
hence "(convex hull (insert 0 d)) = f ` (convex hull (insert 0 B))"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  4887
   using convex_hull_linear_image[of f "(insert 0 d)"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4888
   convex_hull_linear_image[of f "(insert 0 B)"] `bounded_linear f` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4889
moreover have "rel_interior (f ` (convex hull insert 0 B)) =
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4890
   f ` rel_interior (convex hull insert 0 B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4891
   apply (rule  rel_interior_injective_on_span_linear_image[of f "(convex hull insert 0 B)"])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4892
   using `bounded_linear f` fd * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4893
ultimately have "rel_interior (convex hull insert 0 B) ~= {}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4894
   using rel_interior_substd_simplex_nonempty[OF `d~={}` d] apply auto by blast
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4895
moreover have "convex hull (insert 0 B) <= S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4896
   using B_def assms hull_mono[of "insert 0 B" "S" "convex"] convex_hull_eq by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4897
ultimately have ?thesis using subset_rel_interior[of "convex hull insert 0 B" S] ** by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4898
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4899
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4900
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4901
lemma rel_interior_convex_nonempty:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4902
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4903
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4904
shows "rel_interior S = {} <-> S = {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4905
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4906
{ assume "S ~= {}" from this obtain a where "a : S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4907
  hence "0 : op + (-a) ` S" using assms exI[of "(%x. x:S & -a+x=0)" a] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4908
  hence "rel_interior (op + (-a) ` S) ~= {}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4909
    using rel_interior_convex_nonempty_aux[of "op + (-a) ` S"]
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4910
          convex_translation[of S "-a"] assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4911
  hence "rel_interior S ~= {}" using rel_interior_translation by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4912
} from this show ?thesis using rel_interior_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4913
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4914
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4915
lemma convex_rel_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4916
fixes S :: "(_::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4917
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4918
shows "convex (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4919
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4920
{ fix "x" "y" "u"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4921
  assume assm: "x:rel_interior S" "y:rel_interior S" "0<=u" "(u :: real) <= 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4922
  hence "x:S" using rel_interior_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4923
  have "x - u *\<^sub>R (x-y) : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4924
  proof(cases "0=u")
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4925
     case False hence "0<u" using assm by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4926
        thus ?thesis
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4927
        using assm rel_interior_convex_shrink[of S y x u] assms `x:S` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4928
     next
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4929
     case True thus ?thesis using assm by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4930
  qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4931
  hence "(1-u) *\<^sub>R x + u *\<^sub>R y : rel_interior S" by (simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4932
} from this show ?thesis unfolding convex_alt by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4933
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4934
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4935
lemma convex_closure_rel_interior:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4936
fixes S :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4937
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4938
shows "closure(rel_interior S) = closure S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4939
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4940
have h1: "closure(rel_interior S) <= closure S"
44522
2f7e9d890efe rename subset_{interior,closure} to {interior,closure}_mono;
huffman
parents: 44519
diff changeset
  4941
   using closure_mono[of "rel_interior S" S] rel_interior_subset[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4942
{ assume "S ~= {}" from this obtain a where a_def: "a : rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4943
    using rel_interior_convex_nonempty assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4944
  { fix x assume x_def: "x : closure S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4945
    { assume "x=a" hence "x : closure(rel_interior S)" using a_def unfolding closure_def by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4946
    moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4947
    { assume "x ~= a"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4948
       { fix e :: real assume e_def: "e>0"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4949
         def e1 == "min 1 (e/norm (x - a))" hence e1_def: "e1>0 & e1<=1 & e1*norm(x-a)<=e"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4950
            using `x ~= a` `e>0` divide_pos_pos[of e] le_divide_eq[of e1 e "norm(x-a)"] by simp
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4951
         hence *: "x - e1 *\<^sub>R (x - a) : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4952
            using rel_interior_closure_convex_shrink[of S a x e1] assms x_def a_def e1_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4953
         have "EX y. y:rel_interior S & y ~= x & (dist y x) <= e"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4954
            apply (rule_tac x="x - e1 *\<^sub>R (x - a)" in exI)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4955
            using * e1_def dist_norm[of "x - e1 *\<^sub>R (x - a)" x] `x ~= a` by simp
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4956
      } hence "x islimpt rel_interior S" unfolding islimpt_approachable_le by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4957
      hence "x : closure(rel_interior S)" unfolding closure_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4958
    } ultimately have "x : closure(rel_interior S)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4959
  } hence ?thesis using h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4960
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4961
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4962
{ assume "S = {}" hence "rel_interior S = {}" using rel_interior_empty by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4963
  hence "closure(rel_interior S) = {}" using closure_empty by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4964
  hence ?thesis using `S={}` by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4965
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4966
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4967
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4968
lemma rel_interior_same_affine_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4969
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4970
  assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4971
  shows "affine hull (rel_interior S) = affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4972
by (metis assms closure_same_affine_hull convex_closure_rel_interior)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4973
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4974
lemma rel_interior_aff_dim:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4975
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4976
  assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4977
  shows "aff_dim (rel_interior S) = aff_dim S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4978
by (metis aff_dim_affine_hull2 assms rel_interior_same_affine_hull)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4979
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4980
lemma rel_interior_rel_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4981
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4982
  assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4983
  shows "rel_interior (rel_interior S) = rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4984
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4985
have "openin (subtopology euclidean (affine hull (rel_interior S))) (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4986
  using opein_rel_interior[of S] rel_interior_same_affine_hull[of S] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4987
from this show ?thesis using rel_interior_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4988
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4989
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4990
lemma rel_interior_rel_open:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4991
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4992
  assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4993
  shows "rel_open (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4994
unfolding rel_open_def using rel_interior_rel_interior assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4995
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4996
lemma convex_rel_interior_closure_aux:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4997
  fixes x y z :: "_::euclidean_space"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4998
  assumes "0 < a" "0 < b" "(a+b) *\<^sub>R z = a *\<^sub>R x + b *\<^sub>R y"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4999
  obtains e where "0 < e" "e <= 1" "z = y - e *\<^sub>R (y-x)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5000
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5001
def e == "a/(a+b)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5002
have "z = (1 / (a + b)) *\<^sub>R ((a + b) *\<^sub>R z)" apply auto using assms by simp
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5003
also have "... = (1 / (a + b)) *\<^sub>R (a *\<^sub>R x + b *\<^sub>R y)" using assms
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5004
   scaleR_cancel_left[of "1/(a+b)" "(a + b) *\<^sub>R z" "a *\<^sub>R x + b *\<^sub>R y"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5005
also have "... = y - e *\<^sub>R (y-x)" using e_def apply (simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5006
   using scaleR_left_distrib[of "a/(a+b)" "b/(a+b)" y] assms add_divide_distrib[of a b "a+b"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5007
finally have "z = y - e *\<^sub>R (y-x)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5008
moreover have "0<e" using e_def assms divide_pos_pos[of a "a+b"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5009
moreover have "e<=1" using e_def assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5010
ultimately show ?thesis using that[of e] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5011
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5012
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5013
lemma convex_rel_interior_closure:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5014
  fixes S :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5015
  assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5016
  shows "rel_interior (closure S) = rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5017
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5018
{ assume "S={}" hence ?thesis using assms rel_interior_convex_nonempty by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5019
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5020
{ assume "S ~= {}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5021
  have "rel_interior (closure S) >= rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5022
    using subset_rel_interior[of S "closure S"] closure_same_affine_hull closure_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5023
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5024
  { fix z assume z_def: "z : rel_interior (closure S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5025
    obtain x where x_def: "x : rel_interior S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5026
      using `S ~= {}` assms rel_interior_convex_nonempty by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5027
    { assume "x=z" hence "z : rel_interior S" using x_def by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5028
    moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5029
    { assume "x ~= z"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5030
      obtain e where e_def: "e > 0 & cball z e Int affine hull closure S <= closure S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5031
        using z_def rel_interior_cball[of "closure S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5032
      hence *: "0 < e/norm(z-x)" using e_def `x ~= z` divide_pos_pos[of e "norm(z-x)"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5033
      def y == "z + (e/norm(z-x)) *\<^sub>R (z-x)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5034
      have yball: "y : cball z e"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5035
        using mem_cball y_def dist_norm[of z y] e_def by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5036
      have "x : affine hull closure S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5037
        using x_def rel_interior_subset_closure hull_inc[of x "closure S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5038
      moreover have "z : affine hull closure S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5039
        using z_def rel_interior_subset hull_subset[of "closure S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5040
      ultimately have "y : affine hull closure S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5041
        using y_def affine_affine_hull[of "closure S"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5042
          mem_affine_3_minus [of "affine hull closure S" z z x "e/norm(z-x)"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5043
      hence "y : closure S" using e_def yball by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5044
      have "(1+(e/norm(z-x))) *\<^sub>R z = (e/norm(z-x)) *\<^sub>R x + y"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5045
        using y_def by (simp add: algebra_simps)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5046
      from this obtain e1 where "0 < e1 & e1 <= 1 & z = y - e1 *\<^sub>R (y - x)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5047
        using * convex_rel_interior_closure_aux[of "e / norm (z - x)" 1 z x y]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5048
          by (auto simp add: algebra_simps)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5049
      hence "z : rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5050
        using rel_interior_closure_convex_shrink assms x_def `y : closure S` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5051
    } ultimately have "z : rel_interior S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5052
  } ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5053
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5054
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5055
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5056
lemma convex_interior_closure:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5057
fixes S :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5058
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5059
shows "interior (closure S) = interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5060
using closure_aff_dim[of S] interior_rel_interior_gen[of S] interior_rel_interior_gen[of "closure S"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5061
      convex_rel_interior_closure[of S] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5062
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5063
lemma closure_eq_rel_interior_eq:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5064
fixes S1 S2 ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5065
assumes "convex S1" "convex S2"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5066
shows "(closure S1 = closure S2) <-> (rel_interior S1 = rel_interior S2)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5067
 by (metis convex_rel_interior_closure convex_closure_rel_interior assms)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5068
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5069
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5070
lemma closure_eq_between:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5071
fixes S1 S2 ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5072
assumes "convex S1" "convex S2"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5073
shows "(closure S1 = closure S2) <->
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5074
      ((rel_interior S1 <= S2) & (S2 <= closure S1))" (is "?A <-> ?B")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5075
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5076
have "?A --> ?B" by (metis assms closure_subset convex_rel_interior_closure rel_interior_subset)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5077
moreover have "?B --> (closure S1 <= closure S2)"
44522
2f7e9d890efe rename subset_{interior,closure} to {interior,closure}_mono;
huffman
parents: 44519
diff changeset
  5078
     by (metis assms(1) convex_closure_rel_interior closure_mono)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5079
moreover have "?B --> (closure S1 >= closure S2)" by (metis closed_closure closure_minimal)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5080
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5081
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5082
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5083
lemma open_inter_closure_rel_interior:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5084
fixes S A ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5085
assumes "convex S" "open A"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5086
shows "((A Int closure S) = {}) <-> ((A Int rel_interior S) = {})"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5087
by (metis assms convex_closure_rel_interior open_inter_closure_eq_empty)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5088
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5089
definition "rel_frontier S = closure S - rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5090
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5091
lemma closed_affine_hull: "closed (affine hull ((S :: ('n::euclidean_space) set)))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5092
by (metis affine_affine_hull affine_closed)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5093
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5094
lemma closed_rel_frontier: "closed(rel_frontier (S :: ('n::euclidean_space) set))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5095
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5096
have *: "closedin (subtopology euclidean (affine hull S)) (closure S - rel_interior S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5097
apply (rule closedin_diff[of "subtopology euclidean (affine hull S)""closure S" "rel_interior S"])  using closed_closedin_trans[of "affine hull S" "closure S"] closed_affine_hull[of S]
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5098
  closure_affine_hull[of S] opein_rel_interior[of S] by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5099
show ?thesis apply (rule closedin_closed_trans[of "affine hull S" "rel_frontier S"])
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5100
  unfolding rel_frontier_def using * closed_affine_hull by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5101
qed
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5102
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5103
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5104
lemma convex_rel_frontier_aff_dim:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5105
fixes S1 S2 ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5106
assumes "convex S1" "convex S2" "S2 ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5107
assumes "S1 <= rel_frontier S2"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5108
shows "aff_dim S1 < aff_dim S2"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5109
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5110
have "S1 <= closure S2" using assms unfolding rel_frontier_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5111
hence *: "affine hull S1 <= affine hull S2"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5112
   using hull_mono[of "S1" "closure S2"] closure_same_affine_hull[of S2] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5113
hence "aff_dim S1 <= aff_dim S2" using * aff_dim_affine_hull[of S1] aff_dim_affine_hull[of S2]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5114
    aff_dim_subset[of "affine hull S1" "affine hull S2"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5115
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5116
{ assume eq: "aff_dim S1 = aff_dim S2"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5117
  hence "S1 ~= {}" using aff_dim_empty[of S1] aff_dim_empty[of S2] `S2 ~= {}` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5118
  have **: "affine hull S1 = affine hull S2"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5119
     apply (rule affine_dim_equal) using * affine_affine_hull apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5120
     using `S1 ~= {}` hull_subset[of S1] apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5121
     using eq aff_dim_affine_hull[of S1] aff_dim_affine_hull[of S2] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5122
  obtain a where a_def: "a : rel_interior S1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5123
     using  `S1 ~= {}` rel_interior_convex_nonempty assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5124
  obtain T where T_def: "open T & a : T Int S1 & T Int affine hull S1 <= S1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5125
     using mem_rel_interior[of a S1] a_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5126
  hence "a : T Int closure S2" using a_def assms unfolding rel_frontier_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5127
  from this obtain b where b_def: "b : T Int rel_interior S2"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5128
     using open_inter_closure_rel_interior[of S2 T] assms T_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5129
  hence "b : affine hull S1" using rel_interior_subset hull_subset[of S2] ** by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5130
  hence "b : S1" using T_def b_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5131
  hence False using b_def assms unfolding rel_frontier_def by auto
44821
a92f65e174cf avoid using legacy theorem names
huffman
parents: 44647
diff changeset
  5132
} ultimately show ?thesis using less_le by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5133
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5134
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5135
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5136
lemma convex_rel_interior_if:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5137
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5138
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5139
assumes "z : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5140
shows "(!x:affine hull S. EX m. m>1 & (!e. (e>1 & e<=m) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S ))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5141
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5142
obtain e1 where e1_def: "e1>0 & cball z e1 Int affine hull S <= S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5143
    using mem_rel_interior_cball[of z S] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5144
{ fix x assume x_def: "x:affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5145
  { assume "x ~= z"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5146
    def m == "1+e1/norm(x-z)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5147
    hence "m>1" using e1_def `x ~= z` divide_pos_pos[of e1 "norm (x - z)"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5148
    { fix e assume e_def: "e>1 & e<=m"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5149
      have "z : affine hull S" using assms rel_interior_subset hull_subset[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5150
      hence *: "(1-e)*\<^sub>R x+ e *\<^sub>R z : affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5151
         using mem_affine[of "affine hull S" x z "(1-e)" e] affine_affine_hull[of S] x_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5152
      have "norm (z + e *\<^sub>R x - (x + e *\<^sub>R z)) = norm ((e - 1) *\<^sub>R (x-z))" by (simp add: algebra_simps)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5153
      also have "...= (e - 1) * norm(x-z)" using norm_scaleR e_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5154
      also have "...<=(m - 1) * norm(x-z)" using e_def mult_right_mono[of _ _ "norm(x-z)"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5155
      also have "...= (e1 / norm (x - z)) * norm (x - z)" using m_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5156
      also have "...=e1" using `x ~= z` e1_def by simp
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5157
      finally have **: "norm (z + e *\<^sub>R x - (x + e *\<^sub>R z)) <= e1" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5158
      have "(1-e)*\<^sub>R x+ e *\<^sub>R z : cball z e1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5159
         using m_def ** unfolding cball_def dist_norm by (auto simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5160
      hence "(1-e)*\<^sub>R x+ e *\<^sub>R z : S" using e_def * e1_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5161
    } hence "EX m. m>1 & (!e. (e>1 & e<=m) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S )" using `m>1` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5162
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5163
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5164
  { assume "x=z" def m == "1+e1" hence "m>1" using e1_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5165
    { fix e assume e_def: "e>1 & e<=m"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5166
      hence "(1-e)*\<^sub>R x+ e *\<^sub>R z : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5167
        using e1_def x_def `x=z` by (auto simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5168
      hence "(1-e)*\<^sub>R x+ e *\<^sub>R z : S" using e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5169
    } hence "EX m. m>1 & (!e. (e>1 & e<=m) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S )" using `m>1` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5170
  } ultimately have "EX m. m>1 & (!e. (e>1 & e<=m) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S )" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5171
} from this show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5172
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5173
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5174
lemma convex_rel_interior_if2:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5175
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5176
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5177
assumes "z : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5178
shows "(!x:affine hull S. EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5179
using convex_rel_interior_if[of S z] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5180
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5181
lemma convex_rel_interior_only_if:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5182
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5183
assumes "convex S" "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5184
assumes "(!x:S. EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5185
shows "z : rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5186
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5187
obtain x where x_def: "x : rel_interior S" using rel_interior_convex_nonempty assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5188
hence "x:S" using rel_interior_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5189
from this obtain e where e_def: "e>1 & (1 - e) *\<^sub>R x + e *\<^sub>R z : S" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5190
def y == "(1 - e) *\<^sub>R x + e *\<^sub>R z" hence "y:S" using e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5191
def e1 == "1/e" hence "0<e1 & e1<1" using e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5192
hence "z=y-(1-e1)*\<^sub>R (y-x)" using e1_def y_def by (auto simp add: algebra_simps)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5193
from this show ?thesis
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5194
    using rel_interior_convex_shrink[of S x y "1-e1"] `0<e1 & e1<1` `y:S` x_def assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5195
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5196
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5197
lemma convex_rel_interior_iff:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5198
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5199
assumes "convex S" "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5200
shows "z : rel_interior S <-> (!x:S. EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5201
using assms hull_subset[of S "affine"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5202
      convex_rel_interior_if[of S z] convex_rel_interior_only_if[of S z] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5203
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5204
lemma convex_rel_interior_iff2:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5205
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5206
assumes "convex S" "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5207
shows "z : rel_interior S <-> (!x:affine hull S. EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5208
using assms hull_subset[of S]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5209
      convex_rel_interior_if2[of S z] convex_rel_interior_only_if[of S z] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5210
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5211
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5212
lemma convex_interior_iff:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5213
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5214
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5215
shows "z : interior S <-> (!x. EX e. e>0 & z+ e *\<^sub>R x : S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5216
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5217
{ assume a: "~(aff_dim S = int DIM('n))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5218
  { assume "z : interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5219
    hence False using a interior_rel_interior_gen[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5220
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5221
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5222
  { assume r: "!x. EX e. e>0 & z+ e *\<^sub>R x : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5223
    { fix x obtain e1 where e1_def: "e1>0 & z+ e1 *\<^sub>R (x-z) : S" using r by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5224
      obtain e2 where e2_def: "e2>0 & z+ e2 *\<^sub>R (z-x) : S" using r by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5225
      def x1 == "z+ e1 *\<^sub>R (x-z)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5226
         hence x1: "x1 : affine hull S" using e1_def hull_subset[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5227
      def x2 == "z+ e2 *\<^sub>R (z-x)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5228
         hence x2: "x2 : affine hull S" using e2_def hull_subset[of S] by auto
44282
f0de18b62d63 remove bounded_(bi)linear locale interpretations, to avoid duplicating so many lemmas
huffman
parents: 44170
diff changeset
  5229
      have *: "e1/(e1+e2) + e2/(e1+e2) = 1" using add_divide_distrib[of e1 e2 "e1+e2"] e1_def e2_def by simp
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5230
      hence "z = (e2/(e1+e2)) *\<^sub>R x1 + (e1/(e1+e2)) *\<^sub>R x2"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5231
         using x1_def x2_def apply (auto simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5232
         using scaleR_left_distrib[of "e1/(e1+e2)" "e2/(e1+e2)" z] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5233
      hence z: "z : affine hull S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5234
         using mem_affine[of "affine hull S" x1 x2 "e2/(e1+e2)" "e1/(e1+e2)"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5235
         x1 x2 affine_affine_hull[of S] * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5236
      have "x1-x2 = (e1+e2) *\<^sub>R (x-z)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5237
         using x1_def x2_def by (auto simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5238
      hence "x=z+(1/(e1+e2)) *\<^sub>R (x1-x2)" using e1_def e2_def by simp
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5239
      hence "x : affine hull S" using mem_affine_3_minus[of "affine hull S" z x1 x2 "1/(e1+e2)"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5240
          x1 x2 z affine_affine_hull[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5241
    } hence "affine hull S = UNIV" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5242
    hence "aff_dim S = int DIM('n)" using aff_dim_affine_hull[of S] by (simp add: aff_dim_univ)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5243
    hence False using a by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5244
  } ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5245
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5246
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5247
{ assume a: "aff_dim S = int DIM('n)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5248
  hence "S ~= {}" using aff_dim_empty[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5249
  have *: "affine hull S=UNIV" using a affine_hull_univ by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5250
  { assume "z : interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5251
    hence "z : rel_interior S" using a interior_rel_interior_gen[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5252
    hence **: "(!x. EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5253
      using convex_rel_interior_iff2[of S z] assms `S~={}` * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5254
    fix x obtain e1 where e1_def: "e1>1 & (1-e1)*\<^sub>R (z-x)+ e1 *\<^sub>R z : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5255
      using **[rule_format, of "z-x"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5256
    def e == "e1 - 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5257
    hence "(1-e1)*\<^sub>R (z-x)+ e1 *\<^sub>R z = z+ e *\<^sub>R x" by (simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5258
    hence "e>0 & z+ e *\<^sub>R x : S" using e1_def e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5259
    hence "EX e. e>0 & z+ e *\<^sub>R x : S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5260
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5261
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5262
  { assume r: "(!x. EX e. e>0 & z+ e *\<^sub>R x : S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5263
    { fix x obtain e1 where e1_def: "e1>0 & z + e1*\<^sub>R (z-x) : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5264
         using r[rule_format, of "z-x"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5265
      def e == "e1 + 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5266
      hence "z + e1*\<^sub>R (z-x) = (1-e)*\<^sub>R x+ e *\<^sub>R z" by (simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5267
      hence "e > 1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S" using e1_def e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5268
      hence "EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5269
    }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5270
    hence "z : rel_interior S" using convex_rel_interior_iff2[of S z] assms `S~={}` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5271
    hence "z : interior S" using a interior_rel_interior_gen[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5272
  } ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5273
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5274
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5275
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  5276
subsubsection {* Relative interior and closure under common operations *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5277
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5278
lemma rel_interior_inter_aux: "Inter {rel_interior S |S. S : I} <= Inter I"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5279
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5280
{ fix y assume "y : Inter {rel_interior S |S. S : I}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5281
  hence y_def: "!S : I. y : rel_interior S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5282
  { fix S assume "S : I" hence "y : S" using rel_interior_subset y_def by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5283
  hence "y : Inter I" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5284
} thus ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5285
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5286
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5287
lemma closure_inter: "closure (Inter I) <= Inter {closure S |S. S : I}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5288
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5289
{ fix y assume "y : Inter I" hence y_def: "!S : I. y : S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5290
  { fix S assume "S : I" hence "y : closure S" using closure_subset y_def by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5291
  hence "y : Inter {closure S |S. S : I}" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5292
} hence "Inter I <= Inter {closure S |S. S : I}" by auto
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  5293
moreover have "closed (Inter {closure S |S. S : I})"
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  5294
  unfolding closed_Inter closed_closure by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5295
ultimately show ?thesis using closure_hull[of "Inter I"]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5296
  hull_minimal[of "Inter I" "Inter {closure S |S. S : I}" "closed"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5297
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5298
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5299
lemma convex_closure_rel_interior_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5300
assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5301
assumes "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5302
shows "Inter {closure S |S. S : I} <= closure (Inter {rel_interior S |S. S : I})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5303
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5304
obtain x where x_def: "!S : I. x : rel_interior S" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5305
{ fix y assume "y : Inter {closure S |S. S : I}" hence y_def: "!S : I. y : closure S" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5306
  { assume "y = x"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5307
    hence "y : closure (Inter {rel_interior S |S. S : I})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5308
       using x_def closure_subset[of "Inter {rel_interior S |S. S : I}"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5309
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5310
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5311
  { assume "y ~= x"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5312
    { fix e :: real assume e_def: "0 < e"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5313
      def e1 == "min 1 (e/norm (y - x))" hence e1_def: "e1>0 & e1<=1 & e1*norm(y-x)<=e"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5314
        using `y ~= x` `e>0` divide_pos_pos[of e] le_divide_eq[of e1 e "norm(y-x)"] by simp
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5315
      def z == "y - e1 *\<^sub>R (y - x)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5316
      { fix S assume "S : I"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5317
        hence "z : rel_interior S" using rel_interior_closure_convex_shrink[of S x y e1]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5318
           assms x_def y_def e1_def z_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5319
      } hence *: "z : Inter {rel_interior S |S. S : I}" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5320
      have "EX z. z:Inter {rel_interior S |S. S : I} & z ~= y & (dist z y) <= e"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5321
           apply (rule_tac x="z" in exI) using `y ~= x` z_def * e1_def e_def dist_norm[of z y] by simp
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5322
    } hence "y islimpt Inter {rel_interior S |S. S : I}" unfolding islimpt_approachable_le by blast
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5323
    hence "y : closure (Inter {rel_interior S |S. S : I})" unfolding closure_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5324
  } ultimately have "y : closure (Inter {rel_interior S |S. S : I})" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5325
} from this show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5326
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5327
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5328
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5329
lemma convex_closure_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5330
assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5331
assumes "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5332
shows "closure (Inter I) = Inter {closure S |S. S : I}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5333
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5334
have "Inter {closure S |S. S : I} <= closure (Inter {rel_interior S |S. S : I})"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5335
  using convex_closure_rel_interior_inter assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5336
moreover have "closure (Inter {rel_interior S |S. S : I}) <= closure (Inter I)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5337
    using rel_interior_inter_aux
44522
2f7e9d890efe rename subset_{interior,closure} to {interior,closure}_mono;
huffman
parents: 44519
diff changeset
  5338
          closure_mono[of "Inter {rel_interior S |S. S : I}" "Inter I"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5339
ultimately show ?thesis using closure_inter[of I] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5340
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5341
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5342
lemma convex_inter_rel_interior_same_closure:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5343
assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5344
assumes "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5345
shows "closure (Inter {rel_interior S |S. S : I}) = closure (Inter I)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5346
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5347
have "Inter {closure S |S. S : I} <= closure (Inter {rel_interior S |S. S : I})"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5348
  using convex_closure_rel_interior_inter assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5349
moreover have "closure (Inter {rel_interior S |S. S : I}) <= closure (Inter I)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5350
    using rel_interior_inter_aux
44522
2f7e9d890efe rename subset_{interior,closure} to {interior,closure}_mono;
huffman
parents: 44519
diff changeset
  5351
          closure_mono[of "Inter {rel_interior S |S. S : I}" "Inter I"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5352
ultimately show ?thesis using closure_inter[of I] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5353
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5354
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5355
lemma convex_rel_interior_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5356
assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5357
assumes "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5358
shows "rel_interior (Inter I) <= Inter {rel_interior S |S. S : I}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5359
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5360
have "convex(Inter I)" using assms convex_Inter by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5361
moreover have "convex(Inter {rel_interior S |S. S : I})" apply (rule convex_Inter)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5362
   using assms convex_rel_interior by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5363
ultimately have "rel_interior (Inter {rel_interior S |S. S : I}) = rel_interior (Inter I)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5364
   using convex_inter_rel_interior_same_closure assms
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5365
   closure_eq_rel_interior_eq[of "Inter {rel_interior S |S. S : I}" "Inter I"] by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5366
from this show ?thesis using rel_interior_subset[of "Inter {rel_interior S |S. S : I}"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5367
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5368
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5369
lemma convex_rel_interior_finite_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5370
assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5371
assumes "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5372
assumes "finite I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5373
shows "rel_interior (Inter I) = Inter {rel_interior S |S. S : I}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5374
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5375
have "Inter I ~= {}" using assms rel_interior_inter_aux[of I] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5376
have "convex (Inter I)" using convex_Inter assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5377
{ assume "I={}" hence ?thesis using Inter_empty rel_interior_univ2 by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5378
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5379
{ assume "I ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5380
{ fix z assume z_def: "z : Inter {rel_interior S |S. S : I}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5381
  { fix x assume x_def: "x : Inter I"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5382
    { fix S assume S_def: "S : I" hence "z : rel_interior S" "x : S" using z_def x_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5383
      (*from this obtain e where e_def: "e>1 & (1 - e) *\<^sub>R x + e *\<^sub>R z : S"*)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5384
      hence "EX m. m>1 & (!e. (e>1 & e<=m) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S )"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5385
         using convex_rel_interior_if[of S z] S_def assms hull_subset[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5386
    } from this obtain mS where mS_def: "!S : I. (mS(S) > (1 :: real) &
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5387
         (!e. (e>1 & e<=mS(S)) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S))" by metis
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5388
    obtain e where e_def: "e=Min (mS ` I)" by auto
44457
d366fa5551ef declare euclidean_simps [simp] at the point they are proved;
huffman
parents: 44365
diff changeset
  5389
    have "e : (mS ` I)" using e_def assms `I ~= {}` by simp
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5390
    hence "e>(1 :: real)" using mS_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5391
    moreover have "!S : I. e<=mS(S)" using e_def assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5392
    ultimately have "EX e>1. (1 - e) *\<^sub>R x + e *\<^sub>R z : Inter I" using mS_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5393
  } hence "z : rel_interior (Inter I)" using convex_rel_interior_iff[of "Inter I" z]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5394
       `Inter I ~= {}` `convex (Inter I)` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5395
} from this have ?thesis using convex_rel_interior_inter[of I] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5396
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5397
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5398
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5399
lemma convex_closure_inter_two:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5400
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5401
assumes "convex S" "convex T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5402
assumes "(rel_interior S) Int (rel_interior T) ~= {}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5403
shows "closure (S Int T) = (closure S) Int (closure T)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5404
using convex_closure_inter[of "{S,T}"] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5405
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5406
lemma convex_rel_interior_inter_two:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5407
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5408
assumes "convex S" "convex T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5409
assumes "(rel_interior S) Int (rel_interior T) ~= {}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5410
shows "rel_interior (S Int T) = (rel_interior S) Int (rel_interior T)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5411
using convex_rel_interior_finite_inter[of "{S,T}"] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5412
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5413
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5414
lemma convex_affine_closure_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5415
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5416
assumes "convex S" "affine T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5417
assumes "(rel_interior S) Int T ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5418
shows "closure (S Int T) = (closure S) Int T"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5419
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5420
have "affine hull T = T" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5421
hence "rel_interior T = T" using rel_interior_univ[of T] by metis
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5422
moreover have "closure T = T" using assms affine_closed[of T] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5423
ultimately show ?thesis using convex_closure_inter_two[of S T] assms affine_imp_convex by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5424
qed
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5425
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5426
lemma convex_affine_rel_interior_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5427
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5428
assumes "convex S" "affine T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5429
assumes "(rel_interior S) Int T ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5430
shows "rel_interior (S Int T) = (rel_interior S) Int T"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5431
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5432
have "affine hull T = T" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5433
hence "rel_interior T = T" using rel_interior_univ[of T] by metis
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5434
moreover have "closure T = T" using assms affine_closed[of T] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5435
ultimately show ?thesis using convex_rel_interior_inter_two[of S T] assms affine_imp_convex by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5436
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5437
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5438
lemma subset_rel_interior_convex:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5439
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5440
assumes "convex S" "convex T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5441
assumes "S <= closure T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5442
assumes "~(S <= rel_frontier T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5443
shows "rel_interior S <= rel_interior T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5444
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5445
have *: "S Int closure T = S" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5446
have "~(rel_interior S <= rel_frontier T)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5447
     using closure_mono[of "rel_interior S" "rel_frontier T"] closed_rel_frontier[of T]
50976
9efd58e1e07c tuned proof -- much faster;
wenzelm
parents: 50804
diff changeset
  5448
     closure_closed[of S] convex_closure_rel_interior[of S] closure_subset[of S] assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5449
hence "(rel_interior S) Int (rel_interior (closure T)) ~= {}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5450
     using assms rel_frontier_def[of T] rel_interior_subset convex_rel_interior_closure[of T] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5451
hence "rel_interior S Int rel_interior T = rel_interior (S Int closure T)" using assms convex_closure
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5452
     convex_rel_interior_inter_two[of S "closure T"] convex_rel_interior_closure[of T] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5453
also have "...=rel_interior (S)" using * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5454
finally show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5455
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5456
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5457
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5458
lemma rel_interior_convex_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5459
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5460
assumes "linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5461
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5462
shows "f ` (rel_interior S) = rel_interior (f ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5463
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5464
{ assume "S = {}" hence ?thesis using assms rel_interior_empty rel_interior_convex_nonempty by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5465
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5466
{ assume "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5467
have *: "f ` (rel_interior S) <= f ` S" unfolding image_mono using rel_interior_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5468
have "f ` S <= f ` (closure S)" unfolding image_mono using closure_subset by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5469
also have "... = f ` (closure (rel_interior S))" using convex_closure_rel_interior assms by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5470
also have "... <= closure (f ` (rel_interior S))" using closure_linear_image assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5471
finally have "closure (f ` S) = closure (f ` rel_interior S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5472
   using closure_mono[of "f ` S" "closure (f ` rel_interior S)"] closure_closure
44522
2f7e9d890efe rename subset_{interior,closure} to {interior,closure}_mono;
huffman
parents: 44519
diff changeset
  5473
         closure_mono[of "f ` rel_interior S" "f ` S"] * by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5474
hence "rel_interior (f ` S) = rel_interior (f ` rel_interior S)" using assms convex_rel_interior
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5475
   linear_conv_bounded_linear[of f] convex_linear_image[of S] convex_linear_image[of "rel_interior S"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5476
   closure_eq_rel_interior_eq[of "f ` S" "f ` rel_interior S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5477
hence "rel_interior (f ` S) <= f ` rel_interior S" using rel_interior_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5478
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5479
{ fix z assume z_def: "z : f ` rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5480
  from this obtain z1 where z1_def: "z1 : rel_interior S & (f z1 = z)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5481
  { fix x assume "x : f ` S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5482
    from this obtain x1 where x1_def: "x1 : S & (f x1 = x)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5483
    from this obtain e where e_def: "e>1 & (1 - e) *\<^sub>R x1 + e *\<^sub>R z1 : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5484
       using convex_rel_interior_iff[of S z1] `convex S` x1_def z1_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5485
    moreover have "f ((1 - e) *\<^sub>R x1 + e *\<^sub>R z1) = (1 - e) *\<^sub>R x + e *\<^sub>R z"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5486
        using x1_def z1_def `linear f` by (simp add: linear_add_cmul)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5487
    ultimately have "(1 - e) *\<^sub>R x + e *\<^sub>R z : f ` S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5488
        using imageI[of "(1 - e) *\<^sub>R x1 + e *\<^sub>R z1" S f] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5489
    hence "EX e. (e>1 & (1 - e) *\<^sub>R x + e *\<^sub>R z : f ` S)" using e_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5490
  } from this have "z : rel_interior (f ` S)" using convex_rel_interior_iff[of "f ` S" z] `convex S`
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5491
       `linear f` `S ~= {}` convex_linear_image[of S f]  linear_conv_bounded_linear[of f] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5492
} ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5493
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5494
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5495
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5496
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5497
lemma convex_linear_preimage:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5498
  assumes c:"convex S" and l:"bounded_linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5499
  shows "convex(f -` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5500
proof(auto simp add: convex_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5501
  interpret f: bounded_linear f by fact
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5502
  fix x y assume xy:"f x : S" "f y : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5503
  fix u v ::real assume uv:"0 <= u" "0 <= v" "u + v = 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5504
  show "f (u *\<^sub>R x + v *\<^sub>R y) : S" unfolding image_iff
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5505
    using bexI[of _ "u *\<^sub>R x + v *\<^sub>R y"] f.add f.scaleR
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5506
      c[unfolded convex_def] xy uv by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5507
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5508
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5509
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5510
lemma rel_interior_convex_linear_preimage:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5511
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5512
assumes "linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5513
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5514
assumes "f -` (rel_interior S) ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5515
shows "rel_interior (f -` S) = f -` (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5516
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5517
have "S ~= {}" using assms rel_interior_empty by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5518
have nonemp: "f -` S ~= {}" by (metis assms(3) rel_interior_subset subset_empty vimage_mono)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5519
hence "S Int (range f) ~= {}" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5520
have conv: "convex (f -` S)" using convex_linear_preimage assms linear_conv_bounded_linear by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5521
hence "convex (S Int (range f))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5522
  by (metis assms(1) assms(2) convex_Int subspace_UNIV subspace_imp_convex subspace_linear_image)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5523
{ fix z assume "z : f -` (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5524
  hence z_def: "f z : rel_interior S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5525
  { fix x assume "x : f -` S" from this have x_def: "f x : S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5526
    from this obtain e where e_def: "e>1 & (1-e)*\<^sub>R (f x)+ e *\<^sub>R (f z) : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5527
      using convex_rel_interior_iff[of S "f z"] z_def assms `S ~= {}` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5528
    moreover have "(1-e)*\<^sub>R (f x)+ e *\<^sub>R (f z) = f ((1-e)*\<^sub>R x + e *\<^sub>R z)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5529
      using `linear f` by (simp add: linear_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5530
    ultimately have "EX e. e>1 & (1-e)*\<^sub>R x + e *\<^sub>R z : f -` S" using e_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5531
  } hence "z : rel_interior (f -` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5532
       using convex_rel_interior_iff[of "f -` S" z] conv nonemp by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5533
}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5534
moreover
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5535
{ fix z assume z_def: "z : rel_interior (f -` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5536
  { fix x assume x_def: "x: S Int (range f)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5537
    from this obtain y where y_def: "(f y = x) & (y : f -` S)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5538
    from this obtain e where e_def: "e>1 & (1-e)*\<^sub>R y+ e *\<^sub>R z : f -` S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5539
      using convex_rel_interior_iff[of "f -` S" z] z_def conv by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5540
    moreover have "(1-e)*\<^sub>R x+ e *\<^sub>R (f z) = f ((1-e)*\<^sub>R y + e *\<^sub>R z)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5541
      using `linear f` y_def by (simp add: linear_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5542
    ultimately have "EX e. e>1 & (1-e)*\<^sub>R x + e *\<^sub>R (f z) : S Int (range f)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5543
      using e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5544
  } hence "f z : rel_interior (S Int (range f))" using `convex (S Int (range f))`
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5545
    `S Int (range f) ~= {}` convex_rel_interior_iff[of "S Int (range f)" "f z"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5546
  moreover have "affine (range f)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5547
    by (metis assms(1) subspace_UNIV subspace_imp_affine subspace_linear_image)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5548
  ultimately have "f z : rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5549
    using convex_affine_rel_interior_inter[of S "range f"] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5550
  hence "z : f -` (rel_interior S)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5551
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5552
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5553
qed
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5554
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5555
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5556
lemma convex_direct_sum:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5557
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5558
fixes T :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5559
assumes "convex S" "convex T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5560
shows "convex (S <*> T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5561
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5562
{
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5563
fix x assume "x : S <*> T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5564
from this obtain xs xt where xst_def: "xs : S & xt : T & (xs,xt) = x" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5565
fix y assume "y : S <*> T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5566
from this obtain ys yt where yst_def: "ys : S & yt : T & (ys,yt) = y" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5567
fix u v assume uv_def: "(u :: real)>=0 & (v :: real)>=0 & u+v=1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5568
have "u *\<^sub>R x + v *\<^sub>R y = (u *\<^sub>R xs + v *\<^sub>R ys, u *\<^sub>R xt + v *\<^sub>R yt)" using xst_def yst_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5569
moreover have "u *\<^sub>R xs + v *\<^sub>R ys : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5570
   using uv_def xst_def yst_def convex_def[of S] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5571
moreover have "u *\<^sub>R xt + v *\<^sub>R yt : T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5572
   using uv_def xst_def yst_def convex_def[of T] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5573
ultimately have "u *\<^sub>R x + v *\<^sub>R y : S <*> T" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5574
} from this show ?thesis unfolding convex_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5575
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5576
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5577
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5578
lemma convex_hull_direct_sum:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5579
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5580
fixes T :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5581
shows "convex hull (S <*> T) = (convex hull S) <*> (convex hull T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5582
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5583
{ fix x assume "x : (convex hull S) <*> (convex hull T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5584
  from this obtain xs xt where xst_def: "xs : convex hull S & xt : convex hull T & (xs,xt) = x" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5585
  from xst_def obtain sI su where s: "finite sI & sI <= S & (ALL x:sI. 0 <= su x) & setsum su sI = 1
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5586
     & (SUM v:sI. su v *\<^sub>R v) = xs" using convex_hull_explicit[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5587
  from xst_def obtain tI tu where t: "finite tI & tI <= T & (ALL x:tI. 0 <= tu x) & setsum tu tI = 1
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5588
     & (SUM v:tI. tu v *\<^sub>R v) = xt" using convex_hull_explicit[of T] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5589
  def I == "(sI <*> tI)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5590
  def u == "(%i. (su (fst i))*(tu(snd i)))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5591
  have "fst (SUM v:sI <*> tI. (su (fst v) * tu (snd v)) *\<^sub>R v)=
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5592
     (SUM vs:sI. SUM vt:tI. (su vs * tu vt) *\<^sub>R vs)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5593
     using fst_setsum[of "(%v. (su (fst v) * tu (snd v)) *\<^sub>R v)" "sI <*> tI"]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5594
     by (simp add: split_def scaleR_prod_def setsum_cartesian_product)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5595
  also have "...=(SUM vt:tI. tu vt *\<^sub>R (SUM vs:sI. su vs *\<^sub>R vs))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5596
     using setsum_commute[of "(%vt vs. (su vs * tu vt) *\<^sub>R vs)" sI tI]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5597
     by (simp add: mult_commute scaleR_right.setsum)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5598
  also have "...=(SUM vt:tI. tu vt *\<^sub>R xs)" using s by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5599
  also have "...=(SUM vt:tI. tu vt) *\<^sub>R xs" by (simp add: scaleR_left.setsum)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5600
  also have "...=xs" using t by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5601
  finally have h1: "fst (SUM v:sI <*> tI. (su (fst v) * tu (snd v)) *\<^sub>R v)=xs" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5602
  have "snd (SUM v:sI <*> tI. (su (fst v) * tu (snd v)) *\<^sub>R v)=
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5603
     (SUM vs:sI. SUM vt:tI. (su vs * tu vt) *\<^sub>R vt)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5604
     using snd_setsum[of "(%v. (su (fst v) * tu (snd v)) *\<^sub>R v)" "sI <*> tI"]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5605
     by (simp add: split_def scaleR_prod_def setsum_cartesian_product)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5606
  also have "...=(SUM vs:sI. su vs *\<^sub>R (SUM vt:tI. tu vt *\<^sub>R vt))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5607
     by (simp add: mult_commute scaleR_right.setsum)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5608
  also have "...=(SUM vs:sI. su vs *\<^sub>R xt)" using t by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5609
  also have "...=(SUM vs:sI. su vs) *\<^sub>R xt" by (simp add: scaleR_left.setsum)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5610
  also have "...=xt" using s by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5611
  finally have h2: "snd (SUM v:sI <*> tI. (su (fst v) * tu (snd v)) *\<^sub>R v)=xt" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5612
  from h1 h2 have "(SUM v:sI <*> tI. (su (fst v) * tu (snd v)) *\<^sub>R v) = x" using xst_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5613
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5614
  moreover have "finite I & (I <= S <*> T)" using s t I_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5615
  moreover have "!i:I. 0 <= u i" using s t I_def u_def by (simp add: mult_nonneg_nonneg)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5616
  moreover have "setsum u I = 1" using u_def I_def setsum_cartesian_product[of "(% x y. (su x)*(tu y))"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5617
     s t setsum_product[of su sI tu tI] by (auto simp add: split_def)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5618
  ultimately have "x : convex hull (S <*> T)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5619
     apply (subst convex_hull_explicit[of "S <*> T"]) apply rule
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5620
     apply (rule_tac x="I" in exI) apply (rule_tac x="u" in exI)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5621
     using I_def u_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5622
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5623
hence "convex hull (S <*> T) >= (convex hull S) <*> (convex hull T)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5624
moreover have "convex ((convex hull S) <*> (convex hull T))"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  5625
   by (simp add: convex_direct_sum convex_convex_hull)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5626
ultimately show ?thesis
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5627
   using hull_minimal[of "S <*> T" "(convex hull S) <*> (convex hull T)" "convex"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5628
         hull_subset[of S convex] hull_subset[of T convex] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5629
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5630
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5631
lemma rel_interior_direct_sum:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5632
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5633
fixes T :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5634
assumes "convex S" "convex T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5635
shows "rel_interior (S <*> T) = rel_interior S <*> rel_interior T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5636
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5637
{ assume "S={}" hence ?thesis apply auto using rel_interior_empty by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5638
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5639
{ assume "T={}" hence ?thesis apply auto using rel_interior_empty by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5640
moreover {
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5641
assume "S ~={}" "T ~={}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5642
hence ri: "rel_interior S ~= {}" "rel_interior T ~= {}" using rel_interior_convex_nonempty assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5643
hence "fst -` rel_interior S ~= {}" using fst_vimage_eq_Times[of "rel_interior S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5644
hence "rel_interior ((fst :: 'n * 'm => 'n) -` S) = fst -` rel_interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5645
  using fst_linear `convex S` rel_interior_convex_linear_preimage[of fst S] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5646
hence s: "rel_interior (S <*> (UNIV :: 'm set)) = rel_interior S <*> UNIV" by (simp add: fst_vimage_eq_Times)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5647
from ri have "snd -` rel_interior T ~= {}" using snd_vimage_eq_Times[of "rel_interior T"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5648
hence "rel_interior ((snd :: 'n * 'm => 'm) -` T) = snd -` rel_interior T"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5649
  using snd_linear `convex T` rel_interior_convex_linear_preimage[of snd T] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5650
hence t: "rel_interior ((UNIV :: 'n set) <*> T) = UNIV <*> rel_interior T" by (simp add: snd_vimage_eq_Times)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5651
from s t have *: "rel_interior (S <*> (UNIV :: 'm set)) Int rel_interior ((UNIV :: 'n set) <*> T)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5652
  = rel_interior S <*> rel_interior T" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5653
have "(S <*> T) = (S <*> (UNIV :: 'm set)) Int ((UNIV :: 'n set) <*> T)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5654
hence "rel_interior (S <*> T) = rel_interior ((S <*> (UNIV :: 'm set)) Int ((UNIV :: 'n set) <*> T))" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5655
also have "...=rel_interior (S <*> (UNIV :: 'm set)) Int rel_interior ((UNIV :: 'n set) <*> T)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5656
   apply (subst convex_rel_interior_inter_two[of "S <*> (UNIV :: 'm set)" "(UNIV :: 'n set) <*> T"])
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5657
   using * ri assms convex_direct_sum by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5658
finally have ?thesis using * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5659
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5660
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5661
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5662
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5663
lemma rel_interior_scaleR:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5664
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5665
assumes "c ~= 0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5666
shows "(op *\<^sub>R c) ` (rel_interior S) = rel_interior ((op *\<^sub>R c) ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5667
using rel_interior_injective_linear_image[of "(op *\<^sub>R c)" S]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5668
      linear_conv_bounded_linear[of "op *\<^sub>R c"] linear_scaleR injective_scaleR[of c] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5669
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5670
lemma rel_interior_convex_scaleR:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5671
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5672
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5673
shows "(op *\<^sub>R c) ` (rel_interior S) = rel_interior ((op *\<^sub>R c) ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5674
by (metis assms linear_scaleR rel_interior_convex_linear_image)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5675
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5676
lemma convex_rel_open_scaleR:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5677
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5678
assumes "convex S" "rel_open S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5679
shows "convex ((op *\<^sub>R c) ` S) & rel_open ((op *\<^sub>R c) ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5680
by (metis assms convex_scaling rel_interior_convex_scaleR rel_open_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5681
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5682
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5683
lemma convex_rel_open_finite_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5684
assumes "!S : I. (convex (S :: ('n::euclidean_space) set) & rel_open S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5685
assumes "finite I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5686
shows "convex (Inter I) & rel_open (Inter I)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5687
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5688
{ assume "Inter {rel_interior S |S. S : I} = {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5689
  hence "Inter I = {}" using assms unfolding rel_open_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5690
  hence ?thesis unfolding rel_open_def using rel_interior_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5691
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5692
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5693
{ assume "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5694
  hence "rel_open (Inter I)" using assms unfolding rel_open_def
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5695
    using convex_rel_interior_finite_inter[of I] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5696
  hence ?thesis using convex_Inter assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5697
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5698
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5699
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5700
lemma convex_rel_open_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5701
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5702
assumes "linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5703
assumes "convex S" "rel_open S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5704
shows "convex (f ` S) & rel_open (f ` S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5705
by (metis assms convex_linear_image rel_interior_convex_linear_image
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5706
   linear_conv_bounded_linear rel_open_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5707
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5708
lemma convex_rel_open_linear_preimage:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5709
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5710
assumes "linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5711
assumes "convex S" "rel_open S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5712
shows "convex (f -` S) & rel_open (f -` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5713
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5714
{ assume "f -` (rel_interior S) = {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5715
  hence "f -` S = {}" using assms unfolding rel_open_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5716
  hence ?thesis unfolding rel_open_def using rel_interior_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5717
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5718
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5719
{ assume "f -` (rel_interior S) ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5720
  hence "rel_open (f -` S)" using assms unfolding rel_open_def
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5721
    using rel_interior_convex_linear_preimage[of f S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5722
  hence ?thesis using convex_linear_preimage assms linear_conv_bounded_linear by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5723
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5724
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5725
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5726
lemma rel_interior_projection:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5727
fixes S :: "('m::euclidean_space*'n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5728
fixes f :: "'m::euclidean_space => ('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5729
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5730
assumes "f = (%y. {z. (y,z) : S})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5731
shows "(y,z) : rel_interior S <-> (y : rel_interior {y. (f y ~= {})} & z : rel_interior (f y))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5732
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5733
{ fix y assume "y : {y. (f y ~= {})}" from this obtain z where "(y,z) : S" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5734
  hence "EX x. x : S & y = fst x" apply (rule_tac x="(y,z)" in exI) by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5735
  from this obtain x where "x : S & y = fst x" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5736
  hence "y : fst ` S" unfolding image_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5737
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5738
hence "fst ` S = {y. (f y ~= {})}" unfolding fst_def using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5739
hence h1: "fst ` rel_interior S = rel_interior {y. (f y ~= {})}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5740
   using rel_interior_convex_linear_image[of fst S] assms fst_linear by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5741
{ fix y assume "y : rel_interior {y. (f y ~= {})}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5742
  hence "y : fst ` rel_interior S" using h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5743
  hence *: "rel_interior S Int fst -` {y} ~= {}" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5744
  moreover have aff: "affine (fst -` {y})" unfolding affine_alt by (simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5745
  ultimately have **: "rel_interior (S Int fst -` {y}) = rel_interior S Int fst -` {y}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5746
    using convex_affine_rel_interior_inter[of S "fst -` {y}"] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5747
  have conv: "convex (S Int fst -` {y})" using convex_Int assms aff affine_imp_convex by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5748
  { fix x assume "x : f y"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5749
    hence "(y,x) : S Int (fst -` {y})" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5750
    moreover have "x = snd (y,x)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5751
    ultimately have "x : snd ` (S Int fst -` {y})" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5752
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5753
  hence "snd ` (S Int fst -` {y}) = f y" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5754
  hence ***: "rel_interior (f y) = snd ` rel_interior (S Int fst -` {y})"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5755
    using rel_interior_convex_linear_image[of snd "S Int fst -` {y}"] snd_linear conv by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5756
  { fix z assume "z : rel_interior (f y)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5757
    hence "z : snd ` rel_interior (S Int fst -` {y})" using *** by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5758
    moreover have "{y} = fst ` rel_interior (S Int fst -` {y})" using * ** rel_interior_subset by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5759
    ultimately have "(y,z) : rel_interior (S Int fst -` {y})" by force
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5760
    hence "(y,z) : rel_interior S" using ** by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5761
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5762
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5763
  { fix z assume "(y,z) : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5764
    hence "(y,z) : rel_interior (S Int fst -` {y})" using ** by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5765
    hence "z : snd ` rel_interior (S Int fst -` {y})" by (metis Range_iff snd_eq_Range)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5766
    hence "z : rel_interior (f y)" using *** by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5767
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5768
  ultimately have "!!z. (y,z) : rel_interior S <-> z : rel_interior (f y)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5769
}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5770
hence h2: "!!y z. y : rel_interior {t. f t ~= {}} ==> ((y, z) : rel_interior S) = (z : rel_interior (f y))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5771
  by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5772
{ fix y z assume asm: "(y, z) : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5773
  hence "y : fst ` rel_interior S" by (metis Domain_iff fst_eq_Domain)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5774
  hence "y : rel_interior {t. f t ~= {}}" using h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5775
  hence "y : rel_interior {t. f t ~= {}} & (z : rel_interior (f y))" using h2 asm by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5776
} from this show ?thesis using h2 by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5777
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5778
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  5779
subsubsection {* Relative interior of convex cone *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5780
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5781
lemma cone_rel_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5782
fixes S :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5783
assumes "cone S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5784
shows "cone ({0} Un (rel_interior S))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5785
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5786
{ assume "S = {}" hence ?thesis by (simp add: rel_interior_empty cone_0) }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5787
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5788
{ assume "S ~= {}" hence *: "0:S & (!c. c>0 --> op *\<^sub>R c ` S = S)" using cone_iff[of S] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5789
  hence *: "0:({0} Un (rel_interior S)) &
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5790
           (!c. c>0 --> op *\<^sub>R c ` ({0} Un rel_interior S) = ({0} Un rel_interior S))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5791
           by (auto simp add: rel_interior_scaleR)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5792
  hence ?thesis using cone_iff[of "{0} Un rel_interior S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5793
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5794
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5795
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5796
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5797
lemma rel_interior_convex_cone_aux:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5798
fixes S :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5799
assumes "convex S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5800
shows "(c,x) : rel_interior (cone hull ({(1 :: real)} <*> S)) <->
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5801
       c>0 & x : ((op *\<^sub>R c) ` (rel_interior S))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5802
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5803
{ assume "S={}" hence ?thesis by (simp add: rel_interior_empty cone_hull_empty) }
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5804
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5805
{ assume "S ~= {}" from this obtain s where "s : S" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5806
have conv: "convex ({(1 :: real)} <*> S)" using convex_direct_sum[of "{(1 :: real)}" S]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5807
   assms convex_singleton[of "1 :: real"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5808
def f == "(%y. {z. (y,z) : cone hull ({(1 :: real)} <*> S)})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5809
hence *: "(c, x) : rel_interior (cone hull ({(1 :: real)} <*> S)) =
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5810
      (c : rel_interior {y. f y ~= {}} & x : rel_interior (f c))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5811
  apply (subst rel_interior_projection[of "cone hull ({(1 :: real)} <*> S)" f c x])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5812
  using convex_cone_hull[of "{(1 :: real)} <*> S"] conv by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5813
{ fix y assume "(y :: real)>=0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5814
  hence "y *\<^sub>R (1,s) : cone hull ({(1 :: real)} <*> S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5815
     using cone_hull_expl[of "{(1 :: real)} <*> S"] `s:S` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5816
  hence "f y ~= {}" using f_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5817
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5818
hence "{y. f y ~= {}} = {0..}" using f_def cone_hull_expl[of "{(1 :: real)} <*> S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5819
hence **: "rel_interior {y. f y ~= {}} = {0<..}" using rel_interior_real_semiline by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5820
{ fix c assume "c>(0 :: real)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5821
  hence "f c = (op *\<^sub>R c ` S)" using f_def cone_hull_expl[of "{(1 :: real)} <*> S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5822
  hence "rel_interior (f c)= (op *\<^sub>R c ` rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5823
     using rel_interior_convex_scaleR[of S c] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5824
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5825
hence ?thesis using * ** by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5826
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5827
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5828
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5829
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5830
lemma rel_interior_convex_cone:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5831
fixes S :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5832
assumes "convex S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5833
shows "rel_interior (cone hull ({(1 :: real)} <*> S)) =
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5834
       {(c,c *\<^sub>R x) |c x. c>0 & x : (rel_interior S)}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5835
(is "?lhs=?rhs")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5836
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5837
{ fix z assume "z:?lhs"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5838
  have *: "z=(fst z,snd z)" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5839
  have "z:?rhs" using rel_interior_convex_cone_aux[of S "fst z" "snd z"] assms `z:?lhs` apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5840
     apply (rule_tac x="fst z" in exI) apply (rule_tac x="x" in exI) using * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5841
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5842
moreover
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5843
{ fix z assume "z:?rhs" hence "z:?lhs"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5844
  using rel_interior_convex_cone_aux[of S "fst z" "snd z"] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5845
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5846
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5847
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5848
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5849
lemma convex_hull_finite_union:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5850
assumes "finite I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5851
assumes "!i:I. (convex (S i) & (S i) ~= {})"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5852
shows "convex hull (Union (S ` I)) =
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5853
       {setsum (%i. c i *\<^sub>R s i) I |c s. (!i:I. c i >= 0) & (setsum c I = 1) & (!i:I. s i : S i)}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5854
  (is "?lhs = ?rhs")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5855
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5856
{ fix x assume "x : ?rhs"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5857
  from this obtain c s
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5858
    where *: "setsum (%i. c i *\<^sub>R s i) I=x" "(setsum c I = 1)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5859
     "(!i:I. c i >= 0) & (!i:I. s i : S i)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5860
  hence "!i:I. s i : convex hull (Union (S ` I))" using hull_subset[of "Union (S ` I)" convex] by auto
49530
wenzelm
parents: 49529
diff changeset
  5861
  hence "x : ?lhs" unfolding *(1)[symmetric]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5862
     apply (subst convex_setsum[of I "convex hull Union (S ` I)" c s])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5863
     using * assms convex_convex_hull by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5864
} hence "?lhs >= ?rhs" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5865
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5866
{ fix i assume "i:I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5867
    from this assms have "EX p. p : S i" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5868
}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5869
from this obtain p where p_def: "!i:I. p i : S i" by metis
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5870
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5871
{ fix i assume "i:I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5872
  { fix x assume "x : S i"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5873
    def c == "(%j. if (j=i) then (1::real) else 0)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5874
    hence *: "setsum c I = 1" using `finite I` `i:I` setsum_delta[of I i "(%(j::'a). (1::real))"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5875
    def s == "(%j. if (j=i) then x else p j)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5876
    hence "!j. c j *\<^sub>R s j = (if (j=i) then x else 0)" using c_def by (auto simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5877
    hence "x = setsum (%i. c i *\<^sub>R s i) I"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5878
       using s_def c_def `finite I` `i:I` setsum_delta[of I i "(%(j::'a). x)"] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5879
    hence "x : ?rhs" apply auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5880
      apply (rule_tac x="c" in exI)
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5881
      apply (rule_tac x="s" in exI) using * c_def s_def p_def `x : S i` by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5882
  } hence "?rhs >= S i" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5883
} hence *: "?rhs >= Union (S ` I)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5884
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5885
{ fix u v assume uv: "(u :: real)>=0 & v>=0 & u+v=1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5886
  fix x y assume xy: "(x : ?rhs) & (y : ?rhs)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5887
  from xy obtain c s where xc: "x=setsum (%i. c i *\<^sub>R s i) I &
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5888
     (!i:I. c i >= 0) & (setsum c I = 1) & (!i:I. s i : S i)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5889
  from xy obtain d t where yc: "y=setsum (%i. d i *\<^sub>R t i) I &
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5890
     (!i:I. d i >= 0) & (setsum d I = 1) & (!i:I. t i : S i)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5891
  def e == "(%i. u * (c i)+v * (d i))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5892
  have ge0: "!i:I. e i >= 0"  using e_def xc yc uv by (simp add: mult_nonneg_nonneg)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5893
  have "setsum (%i. u * c i) I = u * setsum c I" by (simp add: setsum_right_distrib)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5894
  moreover have "setsum (%i. v * d i) I = v * setsum d I" by (simp add: setsum_right_distrib)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5895
  ultimately have sum1: "setsum e I = 1" using e_def xc yc uv by (simp add: setsum_addf)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5896
  def q == "(%i. if (e i = 0) then (p i)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5897
                 else (u * (c i)/(e i))*\<^sub>R (s i)+(v * (d i)/(e i))*\<^sub>R (t i))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5898
  { fix i assume "i:I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5899
    { assume "e i = 0" hence "q i : S i" using `i:I` p_def q_def by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5900
    moreover
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5901
    { assume "e i ~= 0"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5902
      hence "q i : S i" using mem_convex_alt[of "S i" "s i" "t i" "u * (c i)" "v * (d i)"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5903
         mult_nonneg_nonneg[of u "c i"] mult_nonneg_nonneg[of v "d i"]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5904
         assms q_def e_def `i:I` `e i ~= 0` xc yc uv by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5905
    } ultimately have "q i : S i" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5906
  } hence qs: "!i:I. q i : S i" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5907
  { fix i assume "i:I"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5908
    { assume "e i = 0"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5909
      have ge: "u * (c i) >= 0 & v * (d i) >= 0" using xc yc uv `i:I` by (simp add: mult_nonneg_nonneg)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5910
      moreover hence "u * (c i) <= 0 & v * (d i) <= 0" using `e i = 0` e_def `i:I` by simp
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5911
      ultimately have "u * (c i) = 0 & v * (d i) = 0" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5912
      hence "(u * (c i))*\<^sub>R (s i)+(v * (d i))*\<^sub>R (t i) = (e i) *\<^sub>R (q i)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5913
         using `e i = 0` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5914
    }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5915
    moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5916
    { assume "e i ~= 0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5917
      hence "(u * (c i)/(e i))*\<^sub>R (s i)+(v * (d i)/(e i))*\<^sub>R (t i) = q i"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5918
         using q_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5919
      hence "e i *\<^sub>R ((u * (c i)/(e i))*\<^sub>R (s i)+(v * (d i)/(e i))*\<^sub>R (t i))
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5920
             = (e i) *\<^sub>R (q i)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5921
      hence "(u * (c i))*\<^sub>R (s i)+(v * (d i))*\<^sub>R (t i) = (e i) *\<^sub>R (q i)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5922
         using `e i ~= 0` by (simp add: algebra_simps)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5923
    } ultimately have
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5924
      "(u * (c i))*\<^sub>R (s i)+(v * (d i))*\<^sub>R (t i) = (e i) *\<^sub>R (q i)" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5925
  } hence *: "!i:I.
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5926
    (u * (c i))*\<^sub>R (s i)+(v * (d i))*\<^sub>R (t i) = (e i) *\<^sub>R (q i)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5927
  have "u *\<^sub>R x + v *\<^sub>R y =
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5928
       setsum (%i. (u * (c i))*\<^sub>R (s i)+(v * (d i))*\<^sub>R (t i)) I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5929
          using xc yc by (simp add: algebra_simps scaleR_right.setsum setsum_addf)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5930
  also have "...=setsum (%i. (e i) *\<^sub>R (q i)) I" using * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5931
  finally have "u *\<^sub>R x + v *\<^sub>R y = setsum (%i. (e i) *\<^sub>R (q i)) I" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5932
  hence "u *\<^sub>R x + v *\<^sub>R y : ?rhs" using ge0 sum1 qs by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5933
} hence "convex ?rhs" unfolding convex_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5934
from this show ?thesis using `?lhs >= ?rhs` *
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5935
   hull_minimal[of "Union (S ` I)" "?rhs" "convex"] by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5936
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5937
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5938
lemma convex_hull_union_two:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5939
fixes S T :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5940
assumes "convex S" "S ~= {}" "convex T" "T ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5941
shows "convex hull (S Un T) = {u *\<^sub>R s + v *\<^sub>R t |u v s t. u>=0 & v>=0 & u+v=1 & s:S & t:T}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5942
  (is "?lhs = ?rhs")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5943
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5944
def I == "{(1::nat),2}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5945
def s == "(%i. (if i=(1::nat) then S else T))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5946
have "Union (s ` I) = S Un T" using s_def I_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5947
hence "convex hull (Union (s ` I)) = convex hull (S Un T)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5948
moreover have "convex hull Union (s ` I) =
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5949
    {SUM i:I. c i *\<^sub>R sa i |c sa. (ALL i:I. 0 <= c i) & setsum c I = 1 & (ALL i:I. sa i : s i)}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5950
    apply (subst convex_hull_finite_union[of I s]) using assms s_def I_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5951
moreover have
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5952
  "{SUM i:I. c i *\<^sub>R sa i |c sa. (ALL i:I. 0 <= c i) & setsum c I = 1 & (ALL i:I. sa i : s i)} <=
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5953
  ?rhs"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5954
  using s_def I_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5955
ultimately have "?lhs<=?rhs" by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5956
{ fix x assume "x : ?rhs"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5957
  from this obtain u v s t
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5958
    where *: "x=u *\<^sub>R s + v *\<^sub>R t & u>=0 & v>=0 & u+v=1 & s:S & t:T" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5959
  hence "x : convex hull {s,t}" using convex_hull_2[of s t] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5960
  hence "x : convex hull (S Un T)" using * hull_mono[of "{s, t}" "S Un T"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5961
} hence "?lhs >= ?rhs" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5962
from this show ?thesis using `?lhs<=?rhs` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5963
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5964
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5965
subsection {* Convexity on direct sums *}
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5966
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5967
lemma closure_sum:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5968
  fixes S T :: "('n::euclidean_space) set"
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5969
  shows "closure S + closure T \<subseteq> closure (S + T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5970
proof-
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5971
  have "(closure S) + (closure T) = (\<lambda>(x,y). x + y) ` (closure S \<times> closure T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5972
    by (simp add: set_plus_image)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5973
  also have "... = (\<lambda>(x,y). x + y) ` closure (S \<times> T)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5974
    using closure_direct_sum by auto
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5975
  also have "... \<subseteq> closure (S + T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5976
    using fst_snd_linear closure_linear_image[of "(\<lambda>(x,y). x + y)" "S \<times> T"]
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5977
    by (auto simp: set_plus_image)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5978
  finally show ?thesis
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5979
    by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5980
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5981
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5982
lemma convex_oplus:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5983
fixes S T :: "('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5984
assumes "convex S" "convex T"
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5985
shows "convex (S + T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5986
proof-
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5987
have "{x + y |x y. x : S & y : T} = {c. EX a:S. EX b:T. c = a + b}" by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5988
thus ?thesis unfolding set_plus_def using convex_sums[of S T] assms by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5989
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5990
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5991
lemma convex_hull_sum:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5992
fixes S T :: "('n::euclidean_space) set"
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5993
shows "convex hull (S + T) = (convex hull S) + (convex hull T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5994
proof-
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5995
have "(convex hull S) + (convex hull T) =
40897
1eb1b2f9d062 adapt proofs to changed set_plus_image (cf. ee8d0548c148);
hoelzl
parents: 40887
diff changeset
  5996
      (%(x,y). x + y) ` ((convex hull S) <*> (convex hull T))"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5997
   by (simp add: set_plus_image)
40897
1eb1b2f9d062 adapt proofs to changed set_plus_image (cf. ee8d0548c148);
hoelzl
parents: 40887
diff changeset
  5998
also have "... = (%(x,y). x + y) ` (convex hull (S <*> T))" using convex_hull_direct_sum by auto
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5999
also have "...= convex hull (S + T)" using fst_snd_linear linear_conv_bounded_linear
40897
1eb1b2f9d062 adapt proofs to changed set_plus_image (cf. ee8d0548c148);
hoelzl
parents: 40887
diff changeset
  6000
   convex_hull_linear_image[of "(%(x,y). x + y)" "S <*> T"] by (auto simp add: set_plus_image)
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6001
finally show ?thesis by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6002
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6003
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6004
lemma rel_interior_sum:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6005
fixes S T :: "('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6006
assumes "convex S" "convex T"
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  6007
shows "rel_interior (S + T) = (rel_interior S) + (rel_interior T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6008
proof-
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  6009
have "(rel_interior S) + (rel_interior T) = (%(x,y). x + y) ` (rel_interior S <*> rel_interior T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6010
   by (simp add: set_plus_image)
40897
1eb1b2f9d062 adapt proofs to changed set_plus_image (cf. ee8d0548c148);
hoelzl
parents: 40887
diff changeset
  6011
also have "... = (%(x,y). x + y) ` rel_interior (S <*> T)" using rel_interior_direct_sum assms by auto
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  6012
also have "...= rel_interior (S + T)" using fst_snd_linear convex_direct_sum assms
40897
1eb1b2f9d062 adapt proofs to changed set_plus_image (cf. ee8d0548c148);
hoelzl
parents: 40887
diff changeset
  6013
   rel_interior_convex_linear_image[of "(%(x,y). x + y)" "S <*> T"] by (auto simp add: set_plus_image)
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6014
finally show ?thesis by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6015
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6016
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6017
lemma convex_sum_gen:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6018
  fixes S :: "'a \<Rightarrow> 'n::euclidean_space set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6019
  assumes "\<And>i. i \<in> I \<Longrightarrow> (convex (S i))"
47444
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  6020
  shows "convex (setsum S I)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6021
proof cases
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6022
  assume "finite I" from this assms show ?thesis
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6023
    by induct (auto simp: convex_oplus)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6024
qed auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6025
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6026
lemma convex_hull_sum_gen:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6027
fixes S :: "'a => ('n::euclidean_space) set"
47444
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  6028
shows "convex hull (setsum S I) = setsum (%i. (convex hull (S i))) I"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6029
apply (subst setsum_set_linear) using convex_hull_sum convex_hull_singleton by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6030
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6031
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6032
lemma rel_interior_sum_gen:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6033
fixes S :: "'a => ('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6034
assumes "!i:I. (convex (S i))"
47444
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  6035
shows "rel_interior (setsum S I) = setsum (%i. (rel_interior (S i))) I"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6036
apply (subst setsum_set_cond_linear[of convex])
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6037
  using rel_interior_sum rel_interior_sing[of "0"] assms by (auto simp add: convex_oplus)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6038
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6039
lemma convex_rel_open_direct_sum:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6040
fixes S T :: "('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6041
assumes "convex S" "rel_open S" "convex T" "rel_open T"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6042
shows "convex (S <*> T) & rel_open (S <*> T)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6043
by (metis assms convex_direct_sum rel_interior_direct_sum rel_open_def)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6044
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6045
lemma convex_rel_open_sum:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6046
fixes S T :: "('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6047
assumes "convex S" "rel_open S" "convex T" "rel_open T"
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  6048
shows "convex (S + T) & rel_open (S + T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6049
by (metis assms convex_oplus rel_interior_sum rel_open_def)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6050
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6051
lemma convex_hull_finite_union_cones:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6052
assumes "finite I" "I ~= {}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6053
assumes "!i:I. (convex (S i) & cone (S i) & (S i) ~= {})"
47444
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  6054
shows "convex hull (Union (S ` I)) = setsum S I"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6055
  (is "?lhs = ?rhs")
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6056
proof-
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6057
{ fix x assume "x : ?lhs"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6058
  from this obtain c xs where x_def: "x=setsum (%i. c i *\<^sub>R xs i) I &
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6059
     (!i:I. c i >= 0) & (setsum c I = 1) & (!i:I. xs i : S i)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6060
     using convex_hull_finite_union[of I S] assms by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6061
  def s == "(%i. c i *\<^sub>R xs i)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6062
  { fix i assume "i:I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6063
    hence "s i : S i" using s_def x_def assms mem_cone[of "S i" "xs i" "c i"] by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6064
  } hence "!i:I. s i : S i" by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6065
  moreover have "x = setsum s I" using x_def s_def by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6066
  ultimately have "x : ?rhs" using set_setsum_alt[of I S] assms by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6067
}
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6068
moreover
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6069
{ fix x assume "x : ?rhs"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6070
  from this obtain s where x_def: "x=setsum s I & (!i:I. s i : S i)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6071
     using set_setsum_alt[of I S] assms by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6072
  def xs == "(%i. of_nat(card I) *\<^sub>R s i)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6073
  hence "x=setsum (%i. ((1 :: real)/of_nat(card I)) *\<^sub>R xs i) I" using x_def assms by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6074
  moreover have "!i:I. xs i : S i" using x_def xs_def assms by (simp add: cone_def)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6075
  moreover have "(!i:I. (1 :: real)/of_nat(card I) >= 0)" by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6076
  moreover have "setsum (%i. (1 :: real)/of_nat(card I)) I = 1" using assms by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6077
  ultimately have "x : ?lhs" apply (subst convex_hull_finite_union[of I S])
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6078
    using assms apply blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6079
    using assms apply blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6080
    apply rule apply (rule_tac x="(%i. (1 :: real)/of_nat(card I))" in exI) by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6081
} ultimately show ?thesis by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6082
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6083
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6084
lemma convex_hull_union_cones_two:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6085
fixes S T :: "('m::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6086
assumes "convex S" "cone S" "S ~= {}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6087
assumes "convex T" "cone T" "T ~= {}"
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  6088
shows "convex hull (S Un T) = S + T"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6089
proof-
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6090
def I == "{(1::nat),2}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6091
def A == "(%i. (if i=(1::nat) then S else T))"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6092
have "Union (A ` I) = S Un T" using A_def I_def by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6093
hence "convex hull (Union (A ` I)) = convex hull (S Un T)" by auto
47444
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  6094
moreover have "convex hull Union (A ` I) = setsum A I"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6095
    apply (subst convex_hull_finite_union_cones[of I A]) using assms A_def I_def by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6096
moreover have
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  6097
  "setsum A I = S + T" using A_def I_def
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6098
     unfolding set_plus_def apply auto unfolding set_plus_def by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6099
ultimately show ?thesis by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6100
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6101
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6102
lemma rel_interior_convex_hull_union:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6103
fixes S :: "'a => ('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6104
assumes "finite I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6105
assumes "!i:I. convex (S i) & (S i) ~= {}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6106
shows "rel_interior (convex hull (Union (S ` I))) =  {setsum (%i. c i *\<^sub>R s i) I
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6107
       |c s. (!i:I. c i > 0) & (setsum c I = 1) & (!i:I. s i : rel_interior(S i))}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6108
(is "?lhs=?rhs")
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6109
proof-
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6110
{ assume "I={}" hence ?thesis using convex_hull_empty rel_interior_empty by auto }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6111
moreover
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6112
{ assume "I ~= {}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6113
  def C0 == "convex hull (Union (S ` I))"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6114
  have "!i:I. C0 >= S i" unfolding C0_def using hull_subset[of "Union (S ` I)"] by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6115
  def K0 == "cone hull ({(1 :: real)} <*> C0)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6116
  def K == "(%i. cone hull ({(1 :: real)} <*> (S i)))"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6117
  have "!i:I. K i ~= {}" unfolding K_def using assms by (simp add: cone_hull_empty_iff[symmetric])
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6118
  { fix i assume "i:I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6119
    hence "convex (K i)" unfolding K_def apply (subst convex_cone_hull) apply (subst convex_direct_sum)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6120
    using assms by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6121
  }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6122
  hence convK: "!i:I. convex (K i)" by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6123
  { fix i assume "i:I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6124
    hence "K0 >= K i" unfolding K0_def K_def apply (subst hull_mono) using `!i:I. C0 >= S i` by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6125
  }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6126
  hence "K0 >= Union (K ` I)" by auto
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  6127
  moreover have "convex K0" unfolding K0_def
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6128
     apply (subst convex_cone_hull) apply (subst convex_direct_sum)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6129
     unfolding C0_def using convex_convex_hull by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6130
  ultimately have geq: "K0 >= convex hull (Union (K ` I))" using hull_minimal[of _ "K0" "convex"] by blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6131
  have "!i:I. K i >= {(1 :: real)} <*> (S i)" using K_def by (simp add: hull_subset)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6132
  hence "Union (K ` I) >= {(1 :: real)} <*> Union (S ` I)" by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6133
  hence "convex hull Union (K ` I) >= convex hull ({(1 :: real)} <*> Union (S ` I))" by (simp add: hull_mono)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6134
  hence "convex hull Union (K ` I) >= {(1 :: real)} <*> C0" unfolding C0_def
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6135
     using convex_hull_direct_sum[of "{(1 :: real)}" "Union (S ` I)"] convex_hull_singleton by auto
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  6136
  moreover have "cone (convex hull(Union (K ` I)))" apply (subst cone_convex_hull)
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6137
     using cone_Union[of "K ` I"] apply auto unfolding K_def using cone_cone_hull by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6138
  ultimately have "convex hull (Union (K ` I)) >= K0"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6139
     unfolding K0_def using hull_minimal[of _ "convex hull (Union (K ` I))" "cone"] by blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6140
  hence "K0 = convex hull (Union (K ` I))" using geq by auto
47444
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  6141
  also have "...=setsum K I"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6142
     apply (subst convex_hull_finite_union_cones[of I K])
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6143
     using assms apply blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6144
     using `I ~= {}` apply blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6145
     unfolding K_def apply rule
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6146
     apply (subst convex_cone_hull) apply (subst convex_direct_sum)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6147
     using assms cone_cone_hull `!i:I. K i ~= {}` K_def by auto
47444
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  6148
  finally have "K0 = setsum K I" by auto
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  6149
  hence *: "rel_interior K0 = setsum (%i. (rel_interior (K i))) I"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6150
     using rel_interior_sum_gen[of I K] convK by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6151
  { fix x assume "x : ?lhs"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6152
    hence "((1::real),x) : rel_interior K0" using K0_def C0_def
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6153
       rel_interior_convex_cone_aux[of C0 "(1::real)" x] convex_convex_hull by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6154
    from this obtain k where k_def: "((1::real),x) = setsum k I & (!i:I. k i : rel_interior (K i))"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6155
      using `finite I` * set_setsum_alt[of I "(%i. rel_interior (K i))"] by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6156
    { fix i assume "i:I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6157
      hence "(convex (S i)) & k i : rel_interior (cone hull {1} <*> S i)" using k_def K_def assms by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6158
      hence "EX ci si. k i = (ci, ci *\<^sub>R si) & 0 < ci & si : rel_interior (S i)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6159
         using rel_interior_convex_cone[of "S i"] by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6160
    }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6161
    from this obtain c s where cs_def: "!i:I. (k i = (c i, c i *\<^sub>R s i) & 0 < c i
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6162
          & s i : rel_interior (S i))" by metis
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6163
    hence "x = (SUM i:I. c i *\<^sub>R s i) & setsum c I = 1" using k_def by (simp add: setsum_prod)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6164
    hence "x : ?rhs" using k_def apply auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6165
       apply (rule_tac x="c" in exI) apply (rule_tac x="s" in exI) using cs_def by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6166
  }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6167
  moreover
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6168
  { fix x assume "x : ?rhs"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6169
    from this obtain c s where cs_def: "x=setsum (%i. c i *\<^sub>R s i) I &
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6170
       (!i:I. c i > 0) & (setsum c I = 1) & (!i:I. s i : rel_interior(S i))" by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6171
    def k == "(%i. (c i, c i *\<^sub>R s i))"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6172
    { fix i assume "i:I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6173
      hence "k i : rel_interior (K i)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6174
         using k_def K_def assms cs_def rel_interior_convex_cone[of "S i"] by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6175
    }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6176
    hence "((1::real),x) : rel_interior K0"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6177
       using K0_def * set_setsum_alt[of I "(%i. rel_interior (K i))"] assms k_def cs_def
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6178
       apply auto apply (rule_tac x="k" in exI) by (simp add: setsum_prod)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6179
    hence "x : ?lhs" using K0_def C0_def
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6180
       rel_interior_convex_cone_aux[of C0 "(1::real)" x] by (auto simp add: convex_convex_hull)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6181
  }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6182
  ultimately have ?thesis by blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6183
} ultimately show ?thesis by blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6184
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6185
50104
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6186
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6187
lemma convex_le_Inf_differential:
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6188
  fixes f :: "real \<Rightarrow> real"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6189
  assumes "convex_on I f"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6190
  assumes "x \<in> interior I" "y \<in> I"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6191
  shows "f y \<ge> f x + Inf ((\<lambda>t. (f x - f t) / (x - t)) ` ({x<..} \<inter> I)) * (y - x)"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6192
    (is "_ \<ge> _ + Inf (?F x) * (y - x)")
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6193
proof (cases rule: linorder_cases)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6194
  assume "x < y"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6195
  moreover
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6196
  have "open (interior I)" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6197
  from openE[OF this `x \<in> interior I`] guess e . note e = this
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6198
  moreover def t \<equiv> "min (x + e / 2) ((x + y) / 2)"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6199
  ultimately have "x < t" "t < y" "t \<in> ball x e"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6200
    by (auto simp: dist_real_def field_simps split: split_min)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6201
  with `x \<in> interior I` e interior_subset[of I] have "t \<in> I" "x \<in> I" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6202
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6203
  have "open (interior I)" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6204
  from openE[OF this `x \<in> interior I`] guess e .
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6205
  moreover def K \<equiv> "x - e / 2"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6206
  with `0 < e` have "K \<in> ball x e" "K < x" by (auto simp: dist_real_def)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6207
  ultimately have "K \<in> I" "K < x" "x \<in> I"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6208
    using interior_subset[of I] `x \<in> interior I` by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6209
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6210
  have "Inf (?F x) \<le> (f x - f y) / (x - y)"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6211
  proof (rule Inf_lower2)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6212
    show "(f x - f t) / (x - t) \<in> ?F x"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6213
      using `t \<in> I` `x < t` by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6214
    show "(f x - f t) / (x - t) \<le> (f x - f y) / (x - y)"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6215
      using `convex_on I f` `x \<in> I` `y \<in> I` `x < t` `t < y` by (rule convex_on_diff)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6216
  next
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6217
    fix y assume "y \<in> ?F x"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6218
    with order_trans[OF convex_on_diff[OF `convex_on I f` `K \<in> I` _ `K < x` _]]
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6219
    show "(f K - f x) / (K - x) \<le> y" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6220
  qed
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6221
  then show ?thesis
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6222
    using `x < y` by (simp add: field_simps)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6223
next
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6224
  assume "y < x"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6225
  moreover
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6226
  have "open (interior I)" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6227
  from openE[OF this `x \<in> interior I`] guess e . note e = this
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6228
  moreover def t \<equiv> "x + e / 2"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6229
  ultimately have "x < t" "t \<in> ball x e"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6230
    by (auto simp: dist_real_def field_simps)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6231
  with `x \<in> interior I` e interior_subset[of I] have "t \<in> I" "x \<in> I" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6232
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6233
  have "(f x - f y) / (x - y) \<le> Inf (?F x)"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6234
  proof (rule Inf_greatest)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6235
    have "(f x - f y) / (x - y) = (f y - f x) / (y - x)"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6236
      using `y < x` by (auto simp: field_simps)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6237
    also
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6238
    fix z  assume "z \<in> ?F x"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6239
    with order_trans[OF convex_on_diff[OF `convex_on I f` `y \<in> I` _ `y < x`]]
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6240
    have "(f y - f x) / (y - x) \<le> z" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6241
    finally show "(f x - f y) / (x - y) \<le> z" .
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6242
  next
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6243
    have "open (interior I)" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6244
    from openE[OF this `x \<in> interior I`] guess e . note e = this
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6245
    then have "x + e / 2 \<in> ball x e" by (auto simp: dist_real_def)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6246
    with e interior_subset[of I] have "x + e / 2 \<in> {x<..} \<inter> I" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6247
    then show "?F x \<noteq> {}" by blast
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6248
  qed
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6249
  then show ?thesis
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6250
    using `y < x` by (simp add: field_simps)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6251
qed simp
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6252
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  6253
end