src/HOL/Multivariate_Analysis/Convex_Euclidean_Space.thy
author wenzelm
Thu, 18 Apr 2013 17:07:01 +0200
changeset 51717 9e7d1c139569
parent 51524 7cb5ac44ca9e
child 53015 a1119cf551e8
permissions -rw-r--r--
simplifier uses proper Proof.context instead of historic type simpset;
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])
51524
7cb5ac44ca9e rename RealVector.thy to Real_Vector_Spaces.thy
hoelzl
parents: 51480
diff changeset
   471
        unfolding  Real_Vector_Spaces.scaleR_right.setsum
49529
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]
51524
7cb5ac44ca9e rename RealVector.thy to Real_Vector_Spaces.thy
hoelzl
parents: 51480
diff changeset
   533
      unfolding scaleR_scaleR[symmetric] Real_Vector_Spaces.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
51480
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1158
lemma connectedD:
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1159
  "connected S \<Longrightarrow> open A \<Longrightarrow> open B \<Longrightarrow> S \<subseteq> A \<union> B \<Longrightarrow> A \<inter> B \<inter> S = {} \<Longrightarrow> A \<inter> S = {} \<or> B \<inter> S = {}"
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1160
  by (metis connected_def)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1161
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1162
lemma convex_connected:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1163
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1164
  assumes "convex s" shows "connected s"
51480
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1165
proof (rule connectedI)
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1166
  fix A B
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1167
  assume "open A" "open B" "A \<inter> B \<inter> s = {}" "s \<subseteq> A \<union> B"
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1168
  moreover
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1169
  assume "A \<inter> s \<noteq> {}" "B \<inter> s \<noteq> {}"
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1170
  then obtain a b where a: "a \<in> A" "a \<in> s" and b: "b \<in> B" "b \<in> s" by auto
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1171
  def f \<equiv> "\<lambda>u. u *\<^sub>R a + (1 - u) *\<^sub>R b"
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1172
  then have "continuous_on {0 .. 1} f"
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1173
    by (auto intro!: continuous_on_intros)
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1174
  then have "connected (f ` {0 .. 1})"
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1175
    by (auto intro!: connected_continuous_image)
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1176
  note connectedD[OF this, of A B]
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1177
  moreover have "a \<in> A \<inter> f ` {0 .. 1}"
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1178
    using a by (auto intro!: image_eqI[of _ _ 1] simp: f_def)
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1179
  moreover have "b \<in> B \<inter> f ` {0 .. 1}"
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1180
    using b by (auto intro!: image_eqI[of _ _ 0] simp: f_def)
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1181
  moreover have "f ` {0 .. 1} \<subseteq> s"
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1182
    using `convex s` a b unfolding convex_def f_def by auto
3793c3a11378 move connected to HOL image; used to show intermediate value theorem
hoelzl
parents: 51475
diff changeset
  1183
  ultimately show False by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1184
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1185
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1186
text {* One rather trivial consequence. *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1187
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  1188
lemma connected_UNIV[intro]: "connected (UNIV :: 'a::real_normed_vector set)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1189
  by(simp add: convex_connected convex_UNIV)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1190
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1191
text {* Balls, being convex, are connected. *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1192
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1193
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
  1194
  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
  1195
  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
  1196
  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
  1197
  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
  1198
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50104
diff changeset
  1199
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
  1200
  by (rule convex_box) (simp add: atLeast_def[symmetric] convex_real_interval)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1201
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1202
lemma convex_local_global_minimum:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1203
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1204
  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
  1205
  shows "\<forall>y\<in>s. f x \<le> f y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1206
proof(rule ccontr)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1207
  have "x\<in>s" using assms(1,3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1208
  assume "\<not> (\<forall>y\<in>s. f x \<le> f y)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1209
  then obtain y where "y\<in>s" and y:"f x > f y" by auto
49530
wenzelm
parents: 49529
diff changeset
  1210
  hence xy:"0 < dist x y" by (auto simp add: dist_nz[symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1211
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1212
  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
  1213
    using real_lbound_gt_zero[of 1 "e / dist x y"]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1214
    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
  1215
  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
  1216
    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
  1217
    by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1218
  moreover
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1219
  have *: "x - ((1 - u) *\<^sub>R x + u *\<^sub>R y) = u *\<^sub>R (x - y)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1220
    by (simp add: algebra_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1221
  have "(1 - u) *\<^sub>R x + u *\<^sub>R y \<in> ball x e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1222
    unfolding mem_ball dist_norm unfolding * and norm_scaleR and abs_of_pos[OF `0<u`]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1223
    unfolding dist_norm[symmetric]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1224
    using u unfolding pos_less_divide_eq[OF xy] by auto
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1225
  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
  1226
  ultimately show False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1227
    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
  1228
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1229
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1230
lemma convex_ball:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1231
  fixes x :: "'a::real_normed_vector"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1232
  shows "convex (ball x e)"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1233
proof (auto simp add: convex_def)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1234
  fix y z
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1235
  assume yz: "dist x y < e" "dist x z < e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1236
  fix u v :: real
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1237
  assume uv: "0 \<le> u" "0 \<le> v" "u + v = 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1238
  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
  1239
    using uv yz
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1240
    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
  1241
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1242
  then show "dist x (u *\<^sub>R y + v *\<^sub>R z) < e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1243
    using convex_bound_lt[OF yz uv] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1244
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1245
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1246
lemma convex_cball:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1247
  fixes x :: "'a::real_normed_vector"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1248
  shows "convex(cball x e)"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1249
proof (auto simp add: convex_def Ball_def)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1250
  fix y z
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1251
  assume yz: "dist x y \<le> e" "dist x z \<le> e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1252
  fix u v :: real
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1253
  assume uv: "0 \<le> u" "0 \<le> v" "u + v = 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1254
  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
  1255
    using uv yz
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1256
    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
  1257
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1258
  then show "dist x (u *\<^sub>R y + v *\<^sub>R z) \<le> e"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1259
    using convex_bound_le[OF yz uv] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1260
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1261
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1262
lemma connected_ball:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1263
  fixes x :: "'a::real_normed_vector"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1264
  shows "connected (ball x e)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1265
  using convex_connected convex_ball by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1266
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1267
lemma connected_cball:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1268
  fixes x :: "'a::real_normed_vector"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1269
  shows "connected(cball x e)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1270
  using convex_connected convex_cball by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1271
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1272
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1273
subsection {* Convex hull *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1274
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1275
lemma convex_convex_hull: "convex(convex hull s)"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1276
  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
  1277
  by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1278
34064
eee04bbbae7e avoid dependency on implicit dest rule predicate1D in proofs
haftmann
parents: 33758
diff changeset
  1279
lemma convex_hull_eq: "convex hull s = s \<longleftrightarrow> convex s"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1280
  by (metis convex_convex_hull hull_same)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1281
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1282
lemma bounded_convex_hull:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1283
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1284
  assumes "bounded s" shows "bounded(convex hull s)"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1285
proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1286
  from assms obtain B where B: "\<forall>x\<in>s. norm x \<le> B"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1287
    unfolding bounded_iff by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1288
  show ?thesis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1289
    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
  1290
    unfolding subset_hull[of convex, OF convex_cball]
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1291
    unfolding subset_eq mem_cball dist_norm using B apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1292
    done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1293
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1294
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1295
lemma finite_imp_bounded_convex_hull:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1296
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1297
  shows "finite s \<Longrightarrow> bounded(convex hull s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1298
  using bounded_convex_hull finite_imp_bounded by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1299
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1300
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1301
subsubsection {* Convex hull is "preserved" by a linear function *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1302
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1303
lemma convex_hull_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1304
  assumes "bounded_linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1305
  shows "f ` (convex hull s) = convex hull (f ` s)"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1306
  apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1307
  unfolding subset_eq ball_simps
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1308
  apply (rule_tac[!] hull_induct, rule hull_inc)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1309
  prefer 3
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1310
  apply (erule imageE)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1311
  apply (rule_tac x=xa in image_eqI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1312
  apply assumption
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1313
  apply (rule hull_subset[unfolded subset_eq, rule_format])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1314
  apply assumption
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1315
proof -
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1316
  interpret f: bounded_linear f by fact
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1317
  show "convex {x. f x \<in> convex hull f ` s}"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1318
    unfolding convex_def
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1319
    by (auto simp add: f.scaleR f.add convex_convex_hull[unfolded convex_def, rule_format])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1320
next
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1321
  interpret f: bounded_linear f by fact
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1322
  show "convex {x. x \<in> f ` (convex hull s)}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1323
    using  convex_convex_hull[unfolded convex_def, of s]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1324
    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
  1325
qed auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1326
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1327
lemma in_convex_hull_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1328
  assumes "bounded_linear f" "x \<in> convex hull s"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1329
  shows "(f x) \<in> convex hull (f ` s)"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1330
  using convex_hull_linear_image[OF assms(1)] assms(2) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1331
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1332
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1333
subsubsection {* Stepping theorems for convex hulls of finite sets *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1334
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1335
lemma convex_hull_empty[simp]: "convex hull {} = {}"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1336
  by (rule hull_unique) auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1337
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1338
lemma convex_hull_singleton[simp]: "convex hull {a} = {a}"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1339
  by (rule hull_unique) auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1340
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1341
lemma convex_hull_insert:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1342
  fixes s :: "'a::real_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1343
  assumes "s \<noteq> {}"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1344
  shows "convex hull (insert a s) =
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1345
    {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
  1346
  (is "?xyz = ?hull")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1347
  apply (rule, rule hull_minimal, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1348
  unfolding insert_iff
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1349
  prefer 3
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1350
  apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1351
proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1352
  fix x
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1353
  assume x: "x = a \<or> x \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1354
  then show "x \<in> ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1355
    apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1356
    unfolding mem_Collect_eq
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1357
    apply (rule_tac x=1 in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1358
    defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1359
    apply (rule_tac x=0 in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1360
    using assms hull_subset[of s convex]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1361
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1362
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1363
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1364
  fix x
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1365
  assume "x \<in> ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1366
  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
  1367
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1368
  have "a \<in> convex hull insert a s" "b\<in>convex hull insert a s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1369
    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
  1370
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1371
  then show "x \<in> convex hull insert a s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1372
    unfolding obt(5)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1373
    using convex_convex_hull[of "insert a s", unfolded convex_def]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1374
    apply (erule_tac x = a in ballE)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1375
    apply (erule_tac x = b in ballE)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1376
    apply (erule_tac x = u in allE)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1377
    using obt apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1378
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1379
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1380
  show "convex ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1381
    unfolding convex_def
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1382
    apply (rule, rule, rule, rule, rule, rule, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1383
  proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1384
    fix x y u v
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1385
    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
  1386
    from as(4) obtain u1 v1 b1
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1387
      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
  1388
    from as(5) obtain u2 v2 b2
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1389
      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
  1390
    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
  1391
      by (auto simp add: algebra_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1392
    have **: "\<exists>b \<in> convex hull s. u *\<^sub>R x + v *\<^sub>R y =
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1393
      (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
  1394
    proof (cases "u * v1 + v * v2 = 0")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1395
      case True
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1396
      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
  1397
        by (auto simp add: algebra_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1398
      from True have ***: "u * v1 = 0" "v * v2 = 0"
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  1399
        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
  1400
      then have "u * u1 + v * u2 = 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1401
        using as(3) obt1(3) obt2(3) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1402
      then show ?thesis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1403
        unfolding obt1(5) obt2(5) *
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1404
        using assms hull_subset[of s convex]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1405
        by (auto simp add: *** scaleR_right_distrib)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1406
    next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1407
      case False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1408
      have "1 - (u * u1 + v * u2) = (u + v) - (u * u1 + v * u2)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1409
        using as(3) obt1(3) obt2(3) by (auto simp add: field_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1410
      also have "\<dots> = u * (v1 + u1 - u1) + v * (v2 + u2 - u2)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1411
        using as(3) obt1(3) obt2(3) by (auto simp add: field_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1412
      also have "\<dots> = u * v1 + v * v2"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1413
        by simp
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1414
      finally have **:"1 - (u * u1 + v * u2) = u * v1 + v * v2" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1415
      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
  1416
        apply (rule add_nonneg_nonneg)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1417
        prefer 4
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1418
        apply (rule add_nonneg_nonneg)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1419
        apply (rule_tac [!] mult_nonneg_nonneg)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1420
        using as(1,2) obt1(1,2) obt2(1,2) apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1421
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1422
      then show ?thesis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1423
        unfolding obt1(5) obt2(5)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1424
        unfolding * and **
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1425
        using False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1426
        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
  1427
        defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1428
        apply (rule convex_convex_hull[of s, unfolded convex_def, rule_format])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1429
        using obt1(4) obt2(4)
49530
wenzelm
parents: 49529
diff changeset
  1430
        unfolding add_divide_distrib[symmetric] and zero_le_divide_iff
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1431
        apply (auto simp add: scaleR_left_distrib scaleR_right_distrib)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1432
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1433
    qed
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1434
    have u1: "u1 \<le> 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1435
      unfolding obt1(3)[symmetric] and not_le using obt1(2) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1436
    have u2: "u2 \<le> 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1437
      unfolding obt2(3)[symmetric] and not_le using obt2(2) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1438
    have "u1 * u + u2 * v \<le> (max u1 u2) * u + (max u1 u2) * v"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1439
      apply (rule add_mono)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1440
      apply (rule_tac [!] mult_right_mono)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1441
      using as(1,2) obt1(1,2) obt2(1,2)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1442
      apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1443
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1444
    also have "\<dots> \<le> 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1445
      unfolding distrib_left[symmetric] and as(3) using u1 u2 by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1446
    finally show "u *\<^sub>R x + v *\<^sub>R y \<in> ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1447
      unfolding mem_Collect_eq
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1448
      apply (rule_tac x="u * u1 + v * u2" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1449
      apply (rule conjI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1450
      defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1451
      apply (rule_tac x="1 - u * u1 - v * u2" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1452
      unfolding Bex_def
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1453
      using as(1,2) obt1(1,2) obt2(1,2) **
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1454
      apply (auto intro!: mult_nonneg_nonneg add_nonneg_nonneg simp add: algebra_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1455
      done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1456
  qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1457
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1458
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1459
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1460
subsubsection {* Explicit expression for convex hull *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1461
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1462
lemma convex_hull_indexed:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1463
  fixes s :: "'a::real_vector set"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1464
  shows "convex hull s =
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1465
    {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
  1466
        (setsum u {1..k} = 1) \<and>
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1467
        (setsum (\<lambda>i. u i *\<^sub>R x i) {1..k} = y)}" (is "?xyz = ?hull")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1468
  apply (rule hull_unique)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1469
  apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1470
  defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1471
  apply (subst convex_def)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1472
  apply (rule, rule, rule, rule, rule, rule, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1473
proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1474
  fix x
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1475
  assume "x\<in>s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1476
  then show "x \<in> ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1477
    unfolding mem_Collect_eq
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1478
    apply (rule_tac x=1 in exI, rule_tac x="\<lambda>x. 1" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1479
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1480
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1481
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1482
  fix t
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1483
  assume as: "s \<subseteq> t" "convex t"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1484
  show "?hull \<subseteq> t"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1485
    apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1486
    unfolding mem_Collect_eq
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1487
    apply (erule exE | erule conjE)+
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1488
  proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1489
    fix x k u y
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1490
    assume assm:
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1491
      "\<forall>i\<in>{1::nat..k}. 0 \<le> u i \<and> y i \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1492
      "setsum u {1..k} = 1" "(\<Sum>i = 1..k. u i *\<^sub>R y i) = x"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1493
    show "x\<in>t"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1494
      unfolding assm(3) [symmetric]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1495
      apply (rule as(2)[unfolded convex, rule_format])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1496
      using assm(1,2) as(1) apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1497
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1498
  qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1499
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1500
  fix x y u v
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1501
  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
  1502
  from xy obtain k1 u1 x1 where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1503
      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
  1504
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1505
  from xy obtain k2 u2 x2 where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1506
      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
  1507
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1508
  have *: "\<And>P (x1::'a) x2 s1 s2 i.
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1509
    (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
  1510
    "{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
  1511
    prefer 3
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1512
    apply (rule, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1513
    unfolding image_iff
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1514
    apply (rule_tac x = "x - k1" in bexI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1515
    apply (auto simp add: not_le)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1516
    done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1517
  have inj: "inj_on (\<lambda>i. i + k1) {1..k2}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1518
    unfolding inj_on_def by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1519
  show "u *\<^sub>R x + v *\<^sub>R y \<in> ?hull"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1520
    apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1521
    apply (rule_tac x="k1 + k2" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1522
    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
  1523
    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
  1524
    apply (rule, rule)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1525
    defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1526
    apply rule
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1527
    unfolding * and setsum_cases[OF finite_atLeastAtMost[of 1 "k1 + k2"]] and
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1528
      setsum_reindex[OF inj] and o_def Collect_mem_eq
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1529
    unfolding scaleR_scaleR[symmetric] scaleR_right.setsum [symmetric] setsum_right_distrib[symmetric]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1530
  proof -
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1531
    fix i
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1532
    assume i: "i \<in> {1..k1+k2}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1533
    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
  1534
      (if i \<in> {1..k1} then x1 i else x2 (i - k1)) \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1535
    proof (cases "i\<in>{1..k1}")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1536
      case True
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1537
      then show ?thesis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1538
        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
  1539
    next
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1540
      case False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1541
      def j \<equiv> "i - k1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1542
      from i False have "j \<in> {1..k2}" unfolding j_def by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1543
      then show ?thesis
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1544
        unfolding j_def[symmetric]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1545
        using False
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1546
        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
  1547
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1548
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1549
    qed
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1550
  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
  1551
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1552
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1553
lemma convex_hull_finite:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1554
  fixes s :: "'a::real_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1555
  assumes "finite s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1556
  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
  1557
    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
  1558
proof (rule hull_unique, auto simp add: convex_def[of ?set])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1559
  fix x
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1560
  assume "x \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1561
  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
  1562
    apply (rule_tac x="\<lambda>y. if x=y then 1 else 0" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1563
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1564
    unfolding setsum_delta'[OF assms] and setsum_delta''[OF assms]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1565
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1566
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1567
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1568
  fix u v :: real
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1569
  assume uv: "0 \<le> u" "0 \<le> v" "u + v = 1"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1570
  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
  1571
  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
  1572
  { fix x
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1573
    assume "x\<in>s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1574
    then have "0 \<le> u * ux x + v * uy x"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1575
      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
  1576
      apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1577
      apply (metis add_nonneg_nonneg mult_nonneg_nonneg uv(1) uv(2))
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1578
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1579
  }
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1580
  moreover
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1581
  have "(\<Sum>x\<in>s. u * ux x + v * uy x) = 1"
49530
wenzelm
parents: 49529
diff changeset
  1582
    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
  1583
  moreover
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1584
  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
  1585
    unfolding scaleR_left_distrib and setsum_addf and scaleR_scaleR[symmetric] and scaleR_right.setsum [symmetric]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1586
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1587
  ultimately
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1588
  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
  1589
      (\<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
  1590
    apply (rule_tac x="\<lambda>x. u * ux x + v * uy x" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1591
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1592
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1593
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1594
  fix t
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1595
  assume t: "s \<subseteq> t" "convex t"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1596
  fix u
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1597
  assume u: "\<forall>x\<in>s. 0 \<le> u x" "setsum u s = (1::real)"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1598
  then show "(\<Sum>x\<in>s. u x *\<^sub>R x) \<in> t"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1599
    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
  1600
    using assms and t(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1601
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1602
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1603
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1604
subsubsection {* Another formulation from Lars Schewe *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1605
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1606
lemma setsum_constant_scaleR:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1607
  fixes y :: "'a::real_vector"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1608
  shows "(\<Sum>x\<in>A. y) = of_nat (card A) *\<^sub>R y"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1609
  apply (cases "finite A")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1610
  apply (induct set: finite)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1611
  apply (simp_all add: algebra_simps)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1612
  done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1613
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1614
lemma convex_hull_explicit:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1615
  fixes p :: "'a::real_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1616
  shows "convex hull p = {y. \<exists>s u. finite s \<and> s \<subseteq> p \<and>
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1617
    (\<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
  1618
proof -
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1619
  { fix x assume "x\<in>?lhs"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1620
    then obtain k u y where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1621
        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
  1622
      unfolding convex_hull_indexed by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1623
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1624
    have fin: "finite {1..k}" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1625
    have fin': "\<And>v. finite {i \<in> {1..k}. y i = v}" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1626
    { fix j
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1627
      assume "j\<in>{1..k}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1628
      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
  1629
        using obt(1)[THEN bspec[where x=j]] and obt(2)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1630
        apply simp
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1631
        apply (rule setsum_nonneg)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1632
        using obt(1)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1633
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1634
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1635
    }
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1636
    moreover
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1637
    have "(\<Sum>v\<in>y ` {1..k}. setsum u {i \<in> {1..k}. y i = v}) = 1"
49530
wenzelm
parents: 49529
diff changeset
  1638
      unfolding setsum_image_gen[OF fin, symmetric] using obt(2) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1639
    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
  1640
      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
  1641
      unfolding scaleR_left.setsum using obt(3) by auto
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1642
    ultimately
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1643
    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
  1644
      apply (rule_tac x="y ` {1..k}" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1645
      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
  1646
      apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1647
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1648
    then have "x\<in>?rhs" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1649
  }
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1650
  moreover
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1651
  { fix y assume "y\<in>?rhs"
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1652
    then obtain s u where
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1653
      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
  1654
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1655
    obtain f where f: "inj_on f {1..card s}" "f ` {1..card s} = s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1656
      using ex_bij_betw_nat_finite_1[OF obt(1)] unfolding bij_betw_def by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1657
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1658
    { fix i :: nat
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1659
      assume "i\<in>{1..card s}"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1660
      then have "f i \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1661
        apply (subst f(2)[symmetric])
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1662
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1663
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1664
      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
  1665
    }
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1666
    moreover have *:"finite {1..card s}" by auto
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1667
    { fix y
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1668
      assume "y\<in>s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1669
      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
  1670
        by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1671
      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
  1672
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1673
        using f(1)[unfolded inj_on_def]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1674
        apply(erule_tac x=x in ballE)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1675
        apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1676
        done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1677
      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
  1678
      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
  1679
          "(\<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
  1680
        by (auto simp add: setsum_constant_scaleR)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1681
    }
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1682
    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
  1683
      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
  1684
      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
  1685
      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
  1686
      unfolding obt(4,5) by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1687
    ultimately
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1688
    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
  1689
        (\<Sum>i::nat = 1..k. u i *\<^sub>R x i) = y"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1690
      apply (rule_tac x="card s" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1691
      apply (rule_tac x="u \<circ> f" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1692
      apply (rule_tac x=f in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1693
      apply fastforce
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1694
      done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1695
    then have "y \<in> ?lhs" unfolding convex_hull_indexed by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1696
  }
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
  1697
  ultimately show ?thesis unfolding set_eq_iff by blast
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1698
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1699
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1700
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1701
subsubsection {* A stepping theorem for that expansion *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1702
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1703
lemma convex_hull_finite_step:
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1704
  fixes s :: "'a::real_vector set"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1705
  assumes "finite s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1706
  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
  1707
     \<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
  1708
proof (rule, case_tac[!] "a\<in>s")
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1709
  assume "a\<in>s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1710
  then have *:" insert a s = s" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1711
  assume ?lhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1712
  then show ?rhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1713
    unfolding *
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1714
    apply (rule_tac x=0 in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1715
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1716
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1717
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1718
  assume ?lhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1719
  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
  1720
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1721
  assume "a \<notin> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1722
  then show ?rhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1723
    apply (rule_tac x="u a" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1724
    using u(1)[THEN bspec[where x=a]]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1725
    apply simp
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1726
    apply (rule_tac x=u in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1727
    using u[unfolded setsum_clauses(2)[OF assms]] and `a\<notin>s`
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1728
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1729
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1730
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1731
  assume "a \<in> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1732
  then have *: "insert a s = s" by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1733
  have fin: "finite (insert a s)" using assms by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1734
  assume ?rhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1735
  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
  1736
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1737
  show ?lhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1738
    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
  1739
    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
  1740
    unfolding setsum_clauses(2)[OF assms]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1741
    using uv and uv(2)[THEN bspec[where x=a]] and `a\<in>s`
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1742
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1743
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1744
next
50804
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1745
  assume ?rhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1746
  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
  1747
    by auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1748
  moreover
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1749
  assume "a \<notin> s"
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1750
  moreover
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1751
  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
  1752
    apply (rule_tac setsum_cong2)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1753
    defer
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1754
    apply (rule_tac setsum_cong2)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1755
    using `a \<notin> s`
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1756
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1757
    done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1758
  ultimately show ?lhs
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1759
    apply (rule_tac x="\<lambda>x. if a = x then v else u x" in exI)
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1760
    unfolding setsum_clauses(2)[OF assms]
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1761
    apply auto
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1762
    done
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1763
qed
4156a45aeb63 tuned proofs;
wenzelm
parents: 50526
diff changeset
  1764
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1765
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1766
subsubsection {* Hence some special cases *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1767
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1768
lemma convex_hull_2:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1769
  "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
  1770
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
  1771
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
  1772
  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
  1773
  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
  1774
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1775
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
  1776
  unfolding convex_hull_2
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1777
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
  1778
  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
  1779
    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
  1780
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1781
lemma convex_hull_3:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1782
  "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
  1783
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1784
  have fin:"finite {a,b,c}" "finite {b,c}" "finite {c}" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1785
  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
  1786
    by (auto simp add: field_simps)
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  1787
  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
  1788
    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
  1789
    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
  1790
    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
  1791
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1792
lemma convex_hull_3_alt:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1793
  "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
  1794
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
  1795
  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
  1796
    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
  1797
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  1798
subsection {* Relations among closure notions and corresponding hulls *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1799
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1800
lemma affine_imp_convex: "affine s \<Longrightarrow> convex s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1801
  unfolding affine_def convex_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1802
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  1803
lemma subspace_imp_convex: "subspace s \<Longrightarrow> convex s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1804
  using subspace_imp_affine affine_imp_convex by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1805
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  1806
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
  1807
by (metis hull_minimal span_inc subspace_imp_affine subspace_span)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1808
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  1809
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
  1810
by (metis hull_minimal span_inc subspace_imp_convex subspace_span)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1811
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1812
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
  1813
by (metis affine_affine_hull affine_imp_convex hull_minimal hull_subset)
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  1814
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1815
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1816
lemma affine_dependent_imp_dependent:
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  1817
  shows "affine_dependent s \<Longrightarrow> dependent s"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1818
  unfolding affine_dependent_def dependent_def
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1819
  using affine_hull_subset_span by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1820
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1821
lemma dependent_imp_affine_dependent:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1822
  assumes "dependent {x - a| x . x \<in> s}" "a \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1823
  shows "affine_dependent (insert a s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1824
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1825
  from assms(1)[unfolded dependent_explicit] obtain S u v
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1826
    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
  1827
  def t \<equiv> "(\<lambda>x. x + a) ` S"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1828
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1829
  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
  1830
  have "0\<notin>S" using obt(2) assms(2) unfolding subset_eq by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1831
  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
  1832
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1833
  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
  1834
  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
  1835
    apply(rule setsum_cong2) using `a\<notin>s` `t\<subseteq>s` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1836
  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
  1837
    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
  1838
  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
  1839
    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
  1840
  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
  1841
    apply(rule setsum_cong2) using `a\<notin>s` `t\<subseteq>s` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1842
  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
  1843
    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
  1844
    using obt(5) by (auto simp add: setsum_addf scaleR_right_distrib)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1845
  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
  1846
    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
  1847
  ultimately show ?thesis unfolding affine_dependent_explicit
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1848
    apply(rule_tac x="insert a t" in exI) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1849
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1850
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1851
lemma convex_cone:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1852
  "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
  1853
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1854
  { fix x y assume "x\<in>s" "y\<in>s" and ?lhs
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1855
    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
  1856
    hence "x + y \<in> s" using `?lhs`[unfolded convex_def, THEN conjunct1]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1857
      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
  1858
      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
  1859
  thus ?thesis unfolding convex_def cone_def by blast
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1860
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1861
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1862
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
  1863
  assumes "finite s" "card s \<ge> DIM('a) + 2"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1864
  shows "affine_dependent s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1865
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1866
  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
  1867
  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
  1868
  have "card {x - a |x. x \<in> s - {a}} = card (s - {a})" unfolding *
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1869
    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
  1870
  also have "\<dots> > DIM('a)" using assms(2)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1871
    unfolding card_Diff_singleton[OF assms(1) `a\<in>s`] by auto
49530
wenzelm
parents: 49529
diff changeset
  1872
  finally show ?thesis apply(subst insert_Diff[OF `a\<in>s`, symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1873
    apply(rule dependent_imp_affine_dependent)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1874
    apply(rule dependent_biggerset) by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1875
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1876
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
  1877
  assumes "finite (s::('a::euclidean_space) set)" "card s \<ge> dim s + 2"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1878
  shows "affine_dependent s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1879
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1880
  from assms(2) have "s \<noteq> {}" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1881
  then obtain a where "a\<in>s" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1882
  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
  1883
  have **:"card {x - a |x. x \<in> s - {a}} = card (s - {a})" unfolding *
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1884
    apply(rule card_image) unfolding inj_on_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1885
  have "dim {x - a |x. x \<in> s - {a}} \<le> dim s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1886
    apply(rule subset_le_dim) unfolding subset_eq
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1887
    using `a\<in>s` by (auto simp add:span_superset span_sub)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1888
  also have "\<dots> < dim s + 1" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1889
  also have "\<dots> \<le> card (s - {a})" using assms
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1890
    using card_Diff_singleton[OF assms(1) `a\<in>s`] by auto
49530
wenzelm
parents: 49529
diff changeset
  1891
  finally show ?thesis apply(subst insert_Diff[OF `a\<in>s`, symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1892
    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
  1893
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1894
subsection {* Caratheodory's theorem. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1895
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1896
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
  1897
  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
  1898
  (\<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
  1899
  unfolding convex_hull_explicit set_eq_iff mem_Collect_eq
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1900
proof(rule,rule)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1901
  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
  1902
  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
  1903
  then obtain N where "?P N" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1904
  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
  1905
  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
  1906
  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
  1907
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  1908
  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
  1909
    assume "DIM('a) + 1 < card s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1910
    hence "affine_dependent s" using affine_dependent_biggerset[OF obt(1)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1911
    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
  1912
      using affine_dependent_explicit_finite[OF obt(1)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1913
    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
  1914
    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
  1915
      assume as:"\<forall>x\<in>s. 0 \<le> w x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1916
      hence "setsum w (s - {v}) \<ge> 0" apply(rule_tac setsum_nonneg) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1917
      hence "setsum w s > 0" unfolding setsum_diff1'[OF obt(1) `v\<in>s`]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1918
        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
  1919
      thus False using wv(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1920
    qed hence "i\<noteq>{}" unfolding i_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1921
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1922
    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
  1923
      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
  1924
    have t:"\<forall>v\<in>s. u v + t * w v \<ge> 0" proof
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1925
      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
  1926
      show"0 \<le> u v + t * w v" proof(cases "w v < 0")
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1927
        case False thus ?thesis apply(rule_tac add_nonneg_nonneg)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1928
          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
  1929
        case True hence "t \<le> u v / (- w v)" using `v\<in>s`
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1930
          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
  1931
        thus ?thesis unfolding real_0_le_add_iff
49530
wenzelm
parents: 49529
diff changeset
  1932
          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
  1933
      qed qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1934
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1935
    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
  1936
      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
  1937
    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
  1938
    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
  1939
      unfolding setsum_diff1'[OF obt(1) `a\<in>s`] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1940
    have "(\<Sum>v\<in>s. u v + t * w v) = 1"
49530
wenzelm
parents: 49529
diff changeset
  1941
      unfolding setsum_addf wv(1) setsum_right_distrib[symmetric] obt(5) by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  1942
    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
  1943
      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
  1944
      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
  1945
    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
  1946
      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
  1947
      by (auto simp add: * scaleR_left_distrib)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1948
    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
  1949
  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
  1950
    \<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
  1951
qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1952
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1953
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
  1954
 "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
  1955
      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
  1956
  unfolding set_eq_iff apply(rule, rule) unfolding mem_Collect_eq proof-
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1957
  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
  1958
  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
  1959
     "\<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
  1960
  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
  1961
    apply(rule_tac x=s in exI) using hull_subset[of s convex]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1962
  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
  1963
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
  1964
  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
  1965
  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
  1966
  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
  1967
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  1968
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1969
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1970
subsection {* Some Properties of Affine Dependent Sets *}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1971
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1972
lemma affine_independent_empty: "~(affine_dependent {})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1973
  by (simp add: affine_dependent_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1974
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1975
lemma affine_independent_sing:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1976
shows "~(affine_dependent {a})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1977
 by (simp add: affine_dependent_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1978
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1979
lemma affine_hull_translation:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1980
"affine hull ((%x. a + x) `  S) = (%x. a + x) ` (affine hull S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1981
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1982
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
  1983
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
  1984
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
  1985
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
  1986
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
  1987
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
  1988
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
  1989
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
  1990
from this show ?thesis using h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1991
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1992
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1993
lemma affine_dependent_translation:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1994
  assumes "affine_dependent S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1995
  shows "affine_dependent ((%x. a + x) ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1996
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1997
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
  1998
have "op + a ` (S - {x}) = op + a ` S - {a + x}" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  1999
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
  2000
moreover have "a+x : (%x. a + x) ` S" using x_def by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2001
ultimately show ?thesis unfolding affine_dependent_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2002
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2003
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2004
lemma affine_dependent_translation_eq:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2005
  "affine_dependent S <-> affine_dependent ((%x. a + x) ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2006
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2007
{ assume "affine_dependent ((%x. a + x) ` S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2008
  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
  2009
} from this show ?thesis using affine_dependent_translation by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2010
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2011
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2012
lemma affine_hull_0_dependent:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2013
  assumes "0 : affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2014
  shows "dependent S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2015
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2016
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
  2017
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
  2018
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
  2019
from this show ?thesis unfolding dependent_explicit[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2020
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2021
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2022
lemma affine_dependent_imp_dependent2:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2023
  assumes "affine_dependent (insert 0 S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2024
  shows "dependent S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2025
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2026
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
  2027
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
  2028
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
  2029
ultimately have "x : span (S - {x})" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2030
hence "(x~=0) ==> dependent S" using x_def dependent_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2031
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2032
{ 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
  2033
               hence "dependent S" using affine_hull_0_dependent by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2034
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2035
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2036
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2037
lemma affine_dependent_iff_dependent:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2038
  assumes "a ~: S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2039
  shows "affine_dependent (insert a S) <-> dependent ((%x. -a + x) ` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2040
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2041
have "(op + (- a) ` S)={x - a| x . x : S}" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2042
from this show ?thesis using affine_dependent_translation_eq[of "(insert a S)" "-a"]
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2043
      affine_dependent_imp_dependent2 assms
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2044
      dependent_imp_affine_dependent[of a S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2045
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2046
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2047
lemma affine_dependent_iff_dependent2:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2048
  assumes "a : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2049
  shows "affine_dependent S <-> dependent ((%x. -a + x) ` (S-{a}))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2050
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2051
have "insert a (S - {a})=S" using assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2052
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
  2053
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2054
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2055
lemma affine_hull_insert_span_gen:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2056
  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
  2057
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2058
have h1: "{x - a |x. x : s}=((%x. -a+x) ` s)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2059
{ 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
  2060
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2061
{ assume a1: "a : s"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2062
  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
  2063
  hence "insert 0 ((%x. -a+x) ` (s - {a}))=(%x. -a+x) ` s" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2064
  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
  2065
    using span_insert_0[of "op + (- a) ` (s - {a})"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2066
  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
  2067
  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
  2068
  ultimately have ?thesis using assms affine_hull_insert_span[of "a" "s-{a}"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2069
}
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2070
ultimately show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2071
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2072
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2073
lemma affine_hull_span2:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2074
  assumes "a : s"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2075
  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
  2076
  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
  2077
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2078
lemma affine_hull_span_gen:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2079
  assumes "a : affine hull s"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2080
  shows "affine hull s = (%x. a+x) ` span ((%x. -a+x) ` s)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2081
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2082
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
  2083
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
  2084
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2085
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2086
lemma affine_hull_span_0:
44361
75ec83d45303 remove unnecessary euclidean_space class constraints
huffman
parents: 44349
diff changeset
  2087
  assumes "0 : affine hull S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2088
  shows "affine hull S = span S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2089
using affine_hull_span_gen[of "0" S] assms by auto
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
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2092
lemma extend_to_affine_basis:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2093
fixes S V :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2094
assumes "~(affine_dependent S)" "S <= V" "S~={}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2095
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
  2096
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2097
obtain a where a_def: "a : S" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2098
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
  2099
from this obtain B
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2100
   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
  2101
   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
  2102
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
  2103
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
  2104
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
  2105
moreover have "T<=V" using T_def B_def a_def assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2106
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
  2107
    by (metis Int_absorb1 Int_absorb2 hull_hull hull_mono)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2108
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
  2109
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
  2110
ultimately show ?thesis using `T<=V` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2111
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2112
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2113
lemma affine_basis_exists:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2114
fixes V :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2115
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
  2116
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2117
{ 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
  2118
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2119
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2120
{ assume nonempt: "V~={}" obtain x where "x:V" using nonempt by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2121
  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
  2122
  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
  2123
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2124
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2125
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2126
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2127
subsection {* Affine Dimension of a Set *}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2128
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2129
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
  2130
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2131
lemma aff_dim_basis_exists:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2132
  fixes V :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2133
  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
  2134
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2135
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
  2136
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
  2137
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2138
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2139
lemma affine_hull_nonempty: "(S ~= {}) <-> affine hull S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2140
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2141
have "(S = {}) ==> affine hull S = {}"using affine_hull_empty by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2142
moreover have "affine hull S = {} ==> S = {}" unfolding hull_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2143
ultimately show "(S ~= {}) <-> affine hull S ~= {}" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2144
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2145
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2146
lemma aff_dim_parallel_subspace_aux:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2147
fixes B :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2148
assumes "~(affine_dependent B)" "a:B"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2149
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
  2150
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2151
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
  2152
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
  2153
{ assume emp: "(%x. -a + x) ` (B - {a}) = {}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2154
  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
  2155
  hence "B={a}" using emp by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2156
  hence ?thesis using assms fin by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2157
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2158
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2159
{ assume "(%x. -a + x) ` (B - {a}) ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2160
  hence "card ((%x. -a + x) ` (B - {a}))>0" using fin by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2161
  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
  2162
     apply (rule card_image) using translate_inj_on by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2163
  ultimately have "card (B-{a})>0" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2164
  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
  2165
  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
  2166
  ultimately have ?thesis using fin h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2167
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2168
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2169
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2170
lemma aff_dim_parallel_subspace:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2171
fixes V L :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2172
assumes "V ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2173
assumes "subspace L" "affine_parallel (affine hull V) L"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2174
shows "aff_dim V=int(dim L)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2175
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2176
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
  2177
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
  2178
from this obtain a where a_def: "a : B" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2179
def Lb == "span ((%x. -a+x) ` (B-{a}))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2180
  moreover have "affine_parallel (affine hull B) Lb"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2181
     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
  2182
  moreover have "subspace Lb" using Lb_def subspace_span by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2183
  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
  2184
  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
  2185
  hence "dim L=dim Lb" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2186
  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
  2187
(*  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
  2188
  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
  2189
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2190
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2191
lemma aff_independent_finite:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2192
fixes B :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2193
assumes "~(affine_dependent B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2194
shows "finite B"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2195
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2196
{ assume "B~={}" from this obtain a where "a:B" by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2197
  hence ?thesis using aff_dim_parallel_subspace_aux assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2198
} from this show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2199
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2200
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2201
lemma independent_finite:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2202
fixes B :: "('n::euclidean_space) set"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2203
assumes "independent B"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2204
shows "finite B"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2205
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
  2206
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2207
lemma subspace_dim_equal:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2208
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
  2209
shows "S=T"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2210
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2211
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
  2212
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
  2213
hence "span B = S" using B_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2214
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
  2215
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
  2216
from this show ?thesis using assms `span B=S` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2217
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2218
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
  2219
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
  2220
  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
  2221
  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
  2222
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
  2223
have "d <= ?B" using d by (auto simp: inner_Basis)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2224
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
  2225
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
  2226
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
  2227
   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
  2228
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
  2229
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
  2230
  subspace_span[of d] by auto
40377
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 basis_to_substdbasis_subspace_isomorphism:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2234
fixes B :: "('a::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2235
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
  2236
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
  2237
       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
  2238
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2239
  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
  2240
  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
  2241
  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
  2242
  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
  2243
  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
  2244
    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
  2245
    apply(rule subspace_span) apply(rule subspace_substandard) defer
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2246
    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
  2247
    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
  2248
    apply(rule span_inc)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2249
    apply(rule independent_substdbasis[OF d]) apply(rule,assumption)
49530
wenzelm
parents: 49529
diff changeset
  2250
    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
  2251
  with t `card B = dim B` d show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2252
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2253
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2254
lemma aff_dim_empty:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2255
fixes S :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2256
shows "S = {} <-> aff_dim S = -1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2257
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2258
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
  2259
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
  2260
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
  2261
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2262
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2263
lemma aff_dim_affine_hull:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2264
shows "aff_dim (affine hull S)=aff_dim S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2265
unfolding aff_dim_def using hull_hull[of _ S] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2266
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2267
lemma aff_dim_affine_hull2:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2268
assumes "affine hull S=affine hull T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2269
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
  2270
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2271
lemma aff_dim_unique:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2272
fixes B V :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2273
assumes "(affine hull B=affine hull V) & ~(affine_dependent B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2274
shows "of_nat(card B) = aff_dim V+1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2275
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2276
{ 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
  2277
  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
  2278
  hence ?thesis using `B={}` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2279
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2280
moreover
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2281
{ 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
  2282
  def Lb == "span ((%x. -a+x) ` (B-{a}))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2283
  have "affine_parallel (affine hull B) Lb"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2284
     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
  2285
     unfolding affine_parallel_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2286
  moreover have "subspace Lb" using Lb_def subspace_span by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2287
  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
  2288
  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
  2289
  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
  2290
  hence ?thesis using aff_dim_affine_hull2 assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2291
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2292
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2293
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2294
lemma aff_dim_affine_independent:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2295
fixes B :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2296
assumes "~(affine_dependent B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2297
shows "of_nat(card B) = aff_dim B+1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2298
  using aff_dim_unique[of B B] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2299
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2300
lemma aff_dim_sing:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2301
fixes a :: "'n::euclidean_space"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2302
shows "aff_dim {a}=0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2303
  using aff_dim_affine_independent[of "{a}"] affine_independent_sing by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2304
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2305
lemma aff_dim_inner_basis_exists:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2306
  fixes V :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2307
  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
  2308
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2309
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
  2310
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
  2311
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2312
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2313
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2314
lemma aff_dim_le_card:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2315
fixes V :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2316
assumes "finite V"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2317
shows "aff_dim V <= of_nat(card V) - 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2318
 proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2319
 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
  2320
 moreover hence "card B <= card V" using assms card_mono by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2321
 ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2322
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2323
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2324
lemma aff_dim_parallel_eq:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2325
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2326
assumes "affine_parallel (affine hull S) (affine hull T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2327
shows "aff_dim S=aff_dim T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2328
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2329
{ assume "T~={}" "S~={}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2330
  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
  2331
       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
  2332
  hence "aff_dim T = int(dim L)" using aff_dim_parallel_subspace `T~={}` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2333
  moreover have "subspace L & affine_parallel (affine hull S) L"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2334
     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
  2335
  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
  2336
  ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2337
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2338
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2339
{ 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
  2340
  hence ?thesis using aff_dim_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2341
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2342
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2343
{ 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
  2344
  hence ?thesis using aff_dim_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2345
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2346
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2347
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2348
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2349
lemma aff_dim_translation_eq:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2350
fixes a :: "'n::euclidean_space"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2351
shows "aff_dim ((%x. a + x) ` S)=aff_dim S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2352
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2353
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
  2354
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
  2355
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2356
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2357
lemma aff_dim_affine:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2358
fixes S L :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2359
assumes "S ~= {}" "affine S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2360
assumes "subspace L" "affine_parallel S L"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2361
shows "aff_dim S=int(dim L)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2362
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2363
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
  2364
hence "affine_parallel (affine hull S) L" using assms by (simp add:1)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2365
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
  2366
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2367
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2368
lemma dim_affine_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2369
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2370
shows "dim (affine hull S)=dim S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2371
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2372
have "dim (affine hull S)>=dim S" using dim_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2373
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
  2374
moreover have "dim(span S)=dim S" using dim_span by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2375
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2376
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2378
lemma aff_dim_subspace:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2379
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2380
assumes "S ~= {}" "subspace S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2381
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
  2382
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2383
lemma aff_dim_zero:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2384
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2385
assumes "0 : affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2386
shows "aff_dim S=int(dim S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2387
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2388
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
  2389
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
  2390
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
  2391
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2392
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2393
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
  2394
  using aff_dim_subspace[of "(UNIV :: ('n::euclidean_space) set)"]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2395
    dim_UNIV[where 'a="'n::euclidean_space"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2396
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2397
lemma aff_dim_geq:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2398
  fixes V :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2399
  shows "aff_dim V >= -1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2400
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2401
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
  2402
from this show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2403
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2404
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2405
lemma independent_card_le_aff_dim:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2406
  assumes "(B::('n::euclidean_space) set) <= V"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2407
  assumes "~(affine_dependent B)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2408
  shows "int(card B) <= aff_dim V+1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2409
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2410
{ assume "B~={}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2411
  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
  2412
  using assms extend_to_affine_basis[of B V] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2413
  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
  2414
  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
  2415
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2416
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2417
{ assume "B={}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2418
  moreover have "-1<= aff_dim V" using aff_dim_geq by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2419
  ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2420
}  ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2421
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2422
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2423
lemma aff_dim_subset:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2424
  fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2425
  assumes "S <= T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2426
  shows "aff_dim S <= aff_dim T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2427
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2428
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
  2429
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
  2430
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2431
qed
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
lemma aff_dim_subset_univ:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2434
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2435
shows "aff_dim S <= int(DIM('n))"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2436
proof -
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2437
  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
  2438
  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
  2439
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2440
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2441
lemma affine_dim_equal:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2442
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
  2443
shows "S=T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2444
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2445
obtain a where "a : S" using assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2446
hence "a : T" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2447
def LS == "{y. ? x : S. (-a)+x=y}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2448
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
  2449
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
  2450
have "T ~= {}" using assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2451
def LT == "{y. ? x : T. (-a)+x=y}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2452
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
  2453
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
  2454
hence "dim LS = dim LT" using h1 assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2455
moreover have "LS <= LT" using LS_def LT_def assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2456
ultimately have "LS=LT" using subspace_dim_equal[of LS LT] ls lt by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2457
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
  2458
moreover have "T = {x. ? y : LT. a+y=x}" using LT_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2459
ultimately show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2460
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2461
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2462
lemma affine_hull_univ:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2463
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2464
assumes "aff_dim S = int(DIM('n))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2465
shows "affine hull S = (UNIV :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2466
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2467
have "S ~= {}" using assms aff_dim_empty[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2468
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
  2469
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
  2470
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
  2471
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
  2472
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
  2473
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
  2474
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2475
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2476
lemma aff_dim_convex_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2477
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2478
shows "aff_dim (convex hull S)=aff_dim S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2479
  using aff_dim_affine_hull[of S] convex_hull_subset_affine_hull[of S]
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2480
  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
  2481
  aff_dim_subset[of "convex hull S" "affine hull S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2482
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2483
lemma aff_dim_cball:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2484
fixes a :: "'n::euclidean_space"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2485
assumes "0<e"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2486
shows "aff_dim (cball a e) = int (DIM('n))"
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
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
  2489
hence "aff_dim (cball (0 :: 'n::euclidean_space) e) <= aff_dim (cball a e)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2490
  using aff_dim_translation_eq[of a "cball 0 e"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2491
        aff_dim_subset[of "op + a ` cball 0 e" "cball a e"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2492
moreover have "aff_dim (cball (0 :: 'n::euclidean_space) e) = int (DIM('n))"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2493
   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
  2494
   by (simp add: dim_cball[of e] aff_dim_zero[of "cball 0 e"])
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2495
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
  2496
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2497
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2498
lemma aff_dim_open:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2499
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2500
assumes "open S" "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2501
shows "aff_dim S = int (DIM('n))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2502
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2503
obtain x where "x:S" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2504
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
  2505
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
  2506
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
  2507
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2508
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2509
lemma low_dim_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2510
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2511
assumes "~(aff_dim S = int (DIM('n)))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2512
shows "interior S = {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2513
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2514
have "aff_dim(interior S) <= aff_dim S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2515
   using interior_subset aff_dim_subset[of "interior S" S] by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2516
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
  2517
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2518
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  2519
subsection {* Relative interior of a set *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2520
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2521
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
  2522
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2523
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
  2524
  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
  2525
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2526
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
  2527
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
  2528
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
  2529
apply (rule_tac x="T Int (affine hull S)" in exI)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2530
using a h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2531
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2532
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2533
lemma mem_rel_interior:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2534
     "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
  2535
     by (auto simp add: rel_interior)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2536
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2537
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
  2538
  apply (simp add: rel_interior, safe)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2539
  apply (force simp add: open_contains_ball)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2540
  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
  2541
  apply simp
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2542
  done
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2543
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2544
lemma rel_interior_ball:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2545
      "rel_interior S = {x : S. ? e. e>0 & ((ball x e) Int (affine hull S)) <= S}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2546
      using mem_rel_interior_ball [of _ S] by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2547
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2548
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
  2549
  apply (simp add: rel_interior, safe)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2550
  apply (force simp add: open_contains_cball)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2551
  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
  2552
  apply (simp add: subset_trans [OF ball_subset_cball])
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2553
  apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2554
  done
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2555
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2556
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
  2557
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2558
lemma rel_interior_empty: "rel_interior {} = {}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2559
   by (auto simp add: rel_interior_def)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2560
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2561
lemma affine_hull_sing: "affine hull {a :: 'n::euclidean_space} = {a}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2562
by (metis affine_hull_eq affine_sing)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2563
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2564
lemma rel_interior_sing: "rel_interior {a :: 'n::euclidean_space} = {a}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2565
   unfolding rel_interior_ball affine_hull_sing apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2566
   apply(rule_tac x="1 :: real" in exI) apply simp
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2567
   done
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2568
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2569
lemma subset_rel_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2570
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2571
assumes "S<=T" "affine hull S=affine hull T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2572
shows "rel_interior S <= rel_interior T"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2573
  using assms by (auto simp add: rel_interior_def)
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2574
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2575
lemma rel_interior_subset: "rel_interior S <= S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2576
   by (auto simp add: rel_interior_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2577
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2578
lemma rel_interior_subset_closure: "rel_interior S <= closure S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2579
   using rel_interior_subset by (auto simp add: closure_def)
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2580
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2581
lemma interior_subset_rel_interior: "interior S <= rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2582
   by (auto simp add: rel_interior interior_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2583
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2584
lemma interior_rel_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2585
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2586
assumes "aff_dim S = int(DIM('n))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2587
shows "rel_interior S = interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2588
proof -
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2589
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
  2590
from this show ?thesis unfolding rel_interior interior_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2591
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2592
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2593
lemma rel_interior_open:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2594
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2595
assumes "open S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2596
shows "rel_interior S = S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2597
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
  2598
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2599
lemma interior_rel_interior_gen:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2600
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2601
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
  2602
by (metis interior_rel_interior low_dim_interior)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2603
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2604
lemma rel_interior_univ:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2605
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2606
shows "rel_interior (affine hull S) = affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2607
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2608
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
  2609
{ fix x assume x_def: "x : affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2610
  obtain e :: real where "e=1" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2611
  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
  2612
  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
  2613
} from this show ?thesis using h1 by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2614
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2615
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2616
lemma rel_interior_univ2: "rel_interior (UNIV :: ('n::euclidean_space) set) = UNIV"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2617
by (metis open_UNIV rel_interior_open)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2618
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2619
lemma rel_interior_convex_shrink:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2620
  fixes S :: "('a::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2621
  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
  2622
  shows "x - e *\<^sub>R (x - c) : rel_interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2623
proof-
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2624
(* 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
  2625
*)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2626
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
  2627
  using assms(2) unfolding  mem_rel_interior_ball by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2628
{   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
  2629
    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
  2630
    have "x : affine hull S" using assms hull_subset[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2631
    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
  2632
       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
  2633
    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
  2634
        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
  2635
    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
  2636
      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
  2637
      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
  2638
    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
  2639
    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
  2640
      by(auto simp add:pos_divide_less_eq[OF `e>0`] mult_commute)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2641
    finally have "y : S" apply(subst *)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2642
apply(rule assms(1)[unfolded convex_alt,rule_format])
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2643
      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
  2644
} 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
  2645
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
  2646
moreover have "c : S" using assms rel_interior_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2647
moreover hence "x - e *\<^sub>R (x - c) : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2648
   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
  2649
ultimately show ?thesis
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2650
  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
  2651
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2652
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2653
lemma interior_real_semiline:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2654
fixes a :: real
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2655
shows "interior {a..} = {a<..}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2656
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2657
{ fix y assume "a<y" hence "y : interior {a..}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2658
  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
  2659
  done }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2660
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2661
{ fix y assume "y : interior {a..}" (*hence "a<=y" using interior_subset by auto*)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2662
  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
  2663
     using mem_interior_cball[of y "{a..}"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2664
  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
  2665
  ultimately have "a<=y-e" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2666
  hence "a<y" using e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2667
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2668
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2669
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2670
lemma rel_interior_real_interval:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2671
  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
  2672
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2673
  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
  2674
  then show ?thesis
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2675
    using interior_rel_interior_gen[of "{a..b}", symmetric]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2676
    by (simp split: split_if_asm add: interior_closed_interval)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2677
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2678
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2679
lemma rel_interior_real_semiline:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2680
  fixes a :: real shows "rel_interior {a..} = {a<..}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2681
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2682
  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
  2683
  then show ?thesis using interior_real_semiline
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2684
     interior_rel_interior_gen[of "{a..}"]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2685
     by (auto split: split_if_asm)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2686
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2687
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  2688
subsubsection {* Relative open sets *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2689
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2690
definition "rel_open S <-> (rel_interior S) = S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2691
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2692
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
  2693
 unfolding rel_open_def rel_interior_def apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2694
 using openin_subopen[of "subtopology euclidean (affine hull S)" S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2695
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2696
lemma opein_rel_interior:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2697
  "openin (subtopology euclidean (affine hull S)) (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2698
  apply (simp add: rel_interior_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2699
  apply (subst openin_subopen) by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2700
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2701
lemma affine_rel_open:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2702
  fixes S :: "('n::euclidean_space) set"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2703
  assumes "affine S" shows "rel_open S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2704
  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
  2705
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2706
lemma affine_closed:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2707
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2708
  assumes "affine S" shows "closed S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2709
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2710
{ assume "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2711
  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
  2712
     using assms affine_parallel_subspace[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2713
  from this obtain "a" where a_def: "S=(op + a ` L)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2714
     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
  2715
  have "closed L" using L_def closed_subspace by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2716
  hence "closed S" using closed_translation a_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2717
} from this show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2718
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2719
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2720
lemma closure_affine_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2721
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2722
  shows "closure S <= affine hull S"
44524
04ad69081646 generalize some lemmas
huffman
parents: 44523
diff changeset
  2723
  by (intro closure_minimal hull_subset affine_closed affine_affine_hull)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2724
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2725
lemma closure_same_affine_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2726
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2727
  shows "affine hull (closure S) = affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2728
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2729
have "affine hull (closure S) <= affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2730
   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
  2731
moreover have "affine hull (closure S) >= affine hull S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2732
   using hull_mono[of "S" "closure S" "affine"] closure_subset by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2733
ultimately show ?thesis by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2734
qed
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2735
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2736
lemma closure_aff_dim:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2737
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2738
  shows "aff_dim (closure S) = aff_dim S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2739
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2740
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
  2741
moreover have "aff_dim (closure S) <= aff_dim (affine hull S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2742
  using aff_dim_subset closure_affine_hull by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2743
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
  2744
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2745
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2746
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2747
lemma rel_interior_closure_convex_shrink:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2748
  fixes S :: "(_::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2749
  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
  2750
  shows "x - e *\<^sub>R (x - c) : rel_interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2751
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2752
(* 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
  2753
*)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2754
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
  2755
  using assms(2) unfolding mem_rel_interior_ball by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2756
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
  2757
    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
  2758
    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
  2759
    show ?thesis proof(cases "e=1")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2760
      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
  2761
        using x[unfolded islimpt_approachable,THEN spec[where x=1]] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2762
      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
  2763
      case False hence "0 < e * d / (1 - e)" and *:"1 - e > 0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2764
        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
  2765
      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
  2766
        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
  2767
      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
  2768
  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
  2769
  def z == "c + ((1 - e) / e) *\<^sub>R (x - y)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2770
  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
  2771
  have zball: "z\<in>ball c d"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2772
    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
  2773
  have "x : affine hull S" using closure_affine_hull assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2774
  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
  2775
  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
  2776
  ultimately have "z : affine hull S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2777
    using z_def affine_affine_hull[of S]
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2778
          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
  2779
          assms by (auto simp add: field_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2780
  hence "z : S" using d zball by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2781
  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
  2782
    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
  2783
  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
  2784
  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
  2785
  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
  2786
  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
  2787
  thus ?thesis using * by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2788
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2789
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  2790
subsubsection{* Relative interior preserves under linear transformations *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2791
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2792
lemma rel_interior_translation_aux:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2793
fixes a :: "'n::euclidean_space"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2794
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
  2795
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2796
{ fix x assume x_def: "x : rel_interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2797
  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
  2798
  from this have "open ((%x. a + x) ` T)" and
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2799
    "(a + x) : (((%x. a + x) ` T) Int ((%x. a + x) ` S))" and
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2800
    "(((%x. a + x) ` T) Int (affine hull ((%x. a + x) ` S))) <= ((%x. a + x) ` S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2801
    using affine_hull_translation[of a S] open_translation[of T a] x_def by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2802
  from this have "(a+x) : rel_interior ((%x. a + x) ` S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2803
    using mem_rel_interior[of "a+x" "((%x. a + x) ` S)"] by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2804
} from this show ?thesis by auto
40377
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 rel_interior_translation:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2808
fixes a :: "'n::euclidean_space"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2809
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
  2810
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2811
have "(%x. (-a) + x) ` rel_interior ((%x. a + x) ` S) <= rel_interior S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2812
   using rel_interior_translation_aux[of "-a" "(%x. a + x) ` S"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2813
         translation_assoc[of "-a" "a"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2814
hence "((%x. a + x) ` rel_interior S) >= rel_interior ((%x. a + x) ` S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2815
   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
  2816
   by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2817
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
  2818
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2819
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2820
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2821
lemma affine_hull_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2822
assumes "bounded_linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2823
shows "f ` (affine hull s) = affine hull f ` s"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2824
(* 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
  2825
*)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2826
  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
  2827
  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
  2828
  apply(rule hull_subset[unfolded subset_eq, rule_format]) apply assumption
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2829
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2830
  interpret f: bounded_linear f by fact
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2831
  show "affine {x. f x : affine hull f ` s}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2832
  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
  2833
  interpret f: bounded_linear f by fact
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2834
  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
  2835
    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
  2836
qed auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2837
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2838
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2839
lemma rel_interior_injective_on_span_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2840
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2841
fixes S :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2842
assumes "bounded_linear f" and "inj_on f (span S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2843
shows "rel_interior (f ` S) = f ` (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2844
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2845
{ fix z assume z_def: "z : rel_interior (f ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2846
  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
  2847
  from this obtain x where x_def: "x : S & (f x = z)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2848
  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
  2849
    using z_def rel_interior_cball[of "f ` S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2850
  obtain K where K_def: "K>0 & (! x. norm (f x) <= norm x * K)"
51524
7cb5ac44ca9e rename RealVector.thy to Real_Vector_Spaces.thy
hoelzl
parents: 51480
diff changeset
  2851
   using assms Real_Vector_Spaces.bounded_linear.pos_bounded[of f] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2852
  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
  2853
   using K_def pos_le_divide_eq[of e1] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2854
  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
  2855
  { fix y assume y_def: "y : cball x e Int affine hull S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2856
    from this have h1: "f y : affine hull (f ` S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2857
      using affine_hull_linear_image[of f S] assms by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2858
    from y_def have "norm (x-y)<=e1 * e2"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2859
      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
  2860
    moreover have "(f x)-(f y)=f (x-y)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2861
       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
  2862
    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
  2863
    ultimately have "e1 * norm ((f x)-(f y)) <= e1 * e2" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2864
    hence "(f y) : (cball z e2)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2865
      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
  2866
    hence "f y : (f ` S)" using y_def e2_def h1 by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2867
    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
  2868
         inj_on_image_mem_iff[of f "span S" S y] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2869
  }
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2870
  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
  2871
}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2872
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2873
{ fix x assume x_def: "x : rel_interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2874
  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
  2875
    using rel_interior_cball[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2876
  have "x : S" using x_def rel_interior_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2877
  hence *: "f x : f ` S" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2878
  have "! x:span S. f x = 0 --> x = 0"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2879
    using assms subspace_span linear_conv_bounded_linear[of f]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2880
          linear_injective_on_subspace_0[of f "span S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2881
  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
  2882
   using assms injective_imp_isometric[of "span S" f]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2883
         subspace_span[of S] closed_subspace[of "span S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2884
  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
  2885
  { fix y assume y_def: "y : cball (f x) e Int affine hull (f ` S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2886
    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
  2887
    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
  2888
    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
  2889
      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
  2890
    moreover have "(f x)-(f xy)=f (x-xy)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2891
       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
  2892
    moreover have "x-xy : span S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2893
       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
  2894
             affine_hull_subset_span[of S] span_inc by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2895
    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
  2896
    ultimately have "e1 * norm (x-xy) <= e1 * e2" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2897
    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
  2898
    hence "y : (f ` S)" using xy_def e2_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2899
  }
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2900
  hence "(f x) : rel_interior (f ` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2901
     using mem_rel_interior_cball[of "(f x)" "(f ` S)"] * `e>0` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2902
}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2903
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2904
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2905
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2906
lemma rel_interior_injective_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2907
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2908
assumes "bounded_linear f" and "inj f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2909
shows "rel_interior (f ` S) = f ` (rel_interior S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  2910
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
  2911
      subset_inj_on[of f "UNIV" "span S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2912
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2913
subsection{* Some Properties of subset of standard basis *}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2914
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
  2915
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
  2916
  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
  2917
  {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
  2918
 (is "affine hull (insert 0 ?A) = ?B")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2919
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
  2920
  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
  2921
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2922
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  2923
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
  2924
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
  2925
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2926
subsection {* Openness and compactness are preserved by convex hull operation. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2927
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  2928
lemma open_convex_hull[intro]:
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2929
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2930
  assumes "open s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2931
  shows "open(convex hull s)"
43969
8adc47768db0 adjusted to tailored version of ball_simps
haftmann
parents: 41959
diff changeset
  2932
  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
  2933
proof(rule, rule) fix a
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2934
  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
  2935
  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
  2936
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2937
  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
  2938
    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
  2939
  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
  2940
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2941
  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
  2942
    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
  2943
  proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2944
    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
  2945
      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
  2946
  next  fix y assume "y \<in> cball a (Min i)"
49530
wenzelm
parents: 49529
diff changeset
  2947
    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
  2948
    { fix x assume "x\<in>t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2949
      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
  2950
      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
  2951
      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
  2952
      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
  2953
    moreover
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2954
    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
  2955
    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
  2956
      unfolding setsum_reindex[OF *] o_def using obt(4) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2957
    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
  2958
      unfolding setsum_reindex[OF *] o_def using obt(4,5)
49530
wenzelm
parents: 49529
diff changeset
  2959
      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
  2960
    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
  2961
      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
  2962
      using obt(1, 3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2963
  qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2964
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2965
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2966
lemma compact_convex_combinations:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2967
  fixes s t :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2968
  assumes "compact s" "compact t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2969
  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
  2970
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2971
  let ?X = "{0..1} \<times> s \<times> t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2972
  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
  2973
  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
  2974
    apply(rule set_eqI) unfolding image_iff mem_Collect_eq
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2975
    apply rule apply auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2976
    apply (rule_tac x=u in rev_bexI, simp)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2977
    apply (erule rev_bexI, erule rev_bexI, simp)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2978
    by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2979
  have "continuous_on ({0..1} \<times> s \<times> t)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2980
     (\<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
  2981
    unfolding continuous_on by (rule ballI) (intro tendsto_intros)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2982
  thus ?thesis unfolding *
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2983
    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
  2984
    apply (intro compact_Times compact_interval assms)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2985
    done
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2986
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  2987
44525
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2988
lemma finite_imp_compact_convex_hull:
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2989
  fixes s :: "('a::real_normed_vector) set"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2990
  assumes "finite s" shows "compact (convex hull s)"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2991
proof (cases "s = {}")
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2992
  case True thus ?thesis by simp
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2993
next
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2994
  case False with assms show ?thesis
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2995
  proof (induct rule: finite_ne_induct)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2996
    case (singleton x) show ?case by simp
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2997
  next
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2998
    case (insert x A)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  2999
    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
  3000
    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
  3001
    have "continuous_on ?T ?f"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3002
      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
  3003
    moreover have "compact ?T"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3004
      by (intro compact_Times compact_interval insert)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3005
    ultimately have "compact (?f ` ?T)"
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3006
      by (rule compact_continuous_image)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3007
    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
  3008
      unfolding convex_hull_insert [OF `A \<noteq> {}`]
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3009
      apply safe
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3010
      apply (rule_tac x=a in exI, simp)
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3011
      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
  3012
      apply fast
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3013
      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
  3014
      done
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3015
    finally show "compact (convex hull (insert x A))" .
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3016
  qed
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3017
qed
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3018
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3019
lemma compact_convex_hull: fixes s::"('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3020
  assumes "compact s"  shows "compact(convex hull s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3021
proof(cases "s={}")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3022
  case True thus ?thesis using compact_empty by simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3023
next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3024
  case False then obtain w where "w\<in>s" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3025
  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
  3026
  proof(induct ("DIM('a) + 1"))
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3027
    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
  3028
      using compact_empty by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3029
    case 0 thus ?case unfolding * by simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3030
  next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3031
    case (Suc n)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3032
    show ?case proof(cases "n=0")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3033
      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
  3034
        unfolding set_eq_iff and mem_Collect_eq proof(rule, rule)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3035
        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
  3036
        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
  3037
        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
  3038
          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
  3039
        next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3040
          case False hence "card t = Suc 0" using t(3) `n=0` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3041
          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
  3042
          thus ?thesis using t(2,4) by simp
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3043
        qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3044
      next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3045
        fix x assume "x\<in>s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3046
        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
  3047
          apply(rule_tac x="{x}" in exI) unfolding convex_hull_singleton by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3048
      qed thus ?thesis using assms by simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3049
    next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3050
      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
  3051
        { (1 - u) *\<^sub>R x + u *\<^sub>R y | x y u.
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3052
        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
  3053
        unfolding set_eq_iff and mem_Collect_eq proof(rule,rule)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3054
        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
  3055
          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
  3056
        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
  3057
          "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
  3058
        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
  3059
          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
  3060
          using obt(7) and hull_mono[of t "insert u t"] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3061
        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
  3062
          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
  3063
      next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3064
        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
  3065
        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
  3066
        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
  3067
          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
  3068
        show ?P proof(cases "card t = Suc n")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3069
          case False hence "card t \<le> n" using t(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3070
          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
  3071
            by(auto intro!: exI[where x=t])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3072
        next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3073
          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
  3074
          show ?P proof(cases "u={}")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3075
            case True hence "x=a" using t(4)[unfolded au] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3076
            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
  3077
              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
  3078
          next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3079
            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
  3080
              using t(4)[unfolded au convex_hull_insert[OF False]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3081
            have *:"1 - vx = ux" using obt(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3082
            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
  3083
              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
  3084
              by(auto intro!: exI[where x=u])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3085
          qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3086
        qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3087
      qed
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3088
      thus ?thesis using compact_convex_combinations[OF assms Suc] by simp
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3089
    qed
36362
06475a1547cb fix lots of looping simp calls and other warnings
huffman
parents: 36341
diff changeset
  3090
  qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3091
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3092
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3093
subsection {* Extremal points of a simplex are some vertices. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3094
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3095
lemma dist_increases_online:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3096
  fixes a b d :: "'a::real_inner"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3097
  assumes "d \<noteq> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3098
  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
  3099
proof(cases "inner a d - inner b d > 0")
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3100
  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
  3101
    apply(rule_tac add_pos_pos) using assms by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3102
  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
  3103
    by (simp add: algebra_simps inner_commute)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3104
next
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3105
  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
  3106
    apply(rule_tac add_pos_nonneg) using assms by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3107
  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
  3108
    by (simp add: algebra_simps inner_commute)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3109
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3110
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3111
lemma norm_increases_online:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3112
  fixes d :: "'a::real_inner"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3113
  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
  3114
  using dist_increases_online[of d a 0] unfolding dist_norm by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3115
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3116
lemma simplex_furthest_lt:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3117
  fixes s::"'a::real_inner set" assumes "finite s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3118
  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
  3119
proof(induct_tac rule: finite_induct[of s])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3120
  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
  3121
  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
  3122
  proof(rule,rule,cases "s = {}")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3123
    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
  3124
    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
  3125
      using y(1)[unfolded convex_hull_insert[OF False]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3126
    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
  3127
    proof(cases "y\<in>convex hull s")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3128
      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
  3129
        using as(3)[THEN bspec[where x=y]] and y(2) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3130
      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
  3131
    next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3132
      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
  3133
        assume "u=0" "v\<noteq>0" hence "y = b" using obt by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3134
        thus ?thesis using False and obt(4) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3135
      next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3136
        assume "u\<noteq>0" "v=0" hence "y = x" using obt by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3137
        thus ?thesis using y(2) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3138
      next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3139
        assume "u\<noteq>0" "v\<noteq>0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3140
        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
  3141
        have "x\<noteq>b" proof(rule ccontr)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3142
          assume "\<not> x\<noteq>b" hence "y=b" unfolding obt(5)
49530
wenzelm
parents: 49529
diff changeset
  3143
            using obt(3) by(auto simp add: scaleR_left_distrib[symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3144
          thus False using obt(4) and False by simp qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3145
        hence *:"w *\<^sub>R (x - b) \<noteq> 0" using w(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3146
        show ?thesis using dist_increases_online[OF *, of a y]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3147
        proof(erule_tac disjE)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3148
          assume "dist a y < dist a (y + w *\<^sub>R (x - b))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3149
          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
  3150
            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
  3151
          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
  3152
            unfolding convex_hull_insert[OF `s\<noteq>{}`] and mem_Collect_eq
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3153
            apply(rule_tac x="u + w" in exI) apply rule defer
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3154
            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
  3155
          ultimately show ?thesis by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3156
        next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3157
          assume "dist a y < dist a (y - w *\<^sub>R (x - b))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3158
          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
  3159
            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
  3160
          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
  3161
            unfolding convex_hull_insert[OF `s\<noteq>{}`] and mem_Collect_eq
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3162
            apply(rule_tac x="u - w" in exI) apply rule defer
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3163
            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
  3164
          ultimately show ?thesis by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3165
        qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3166
      qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3167
    qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3168
  qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3169
qed (auto simp add: assms)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3170
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3171
lemma simplex_furthest_le:
44525
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3172
  fixes s :: "('a::real_inner) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3173
  assumes "finite s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3174
  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
  3175
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3176
  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
  3177
  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
  3178
    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
  3179
    unfolding dist_commute[of a] unfolding dist_norm by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3180
  thus ?thesis proof(cases "x\<in>s")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3181
    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
  3182
      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
  3183
    thus ?thesis using x(2)[THEN bspec[where x=y]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3184
  qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3185
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3186
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3187
lemma simplex_furthest_le_exists:
44525
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3188
  fixes s :: "('a::real_inner) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3189
  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
  3190
  using simplex_furthest_le[of s] by (cases "s={}")auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3191
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3192
lemma simplex_extremal_le:
44525
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3193
  fixes s :: "('a::real_inner) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3194
  assumes "finite s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3195
  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
  3196
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3197
  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
  3198
  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
  3199
    "\<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
  3200
    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
  3201
  thus ?thesis proof(cases "u\<notin>s \<or> v\<notin>s", erule_tac disjE)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3202
    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
  3203
      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
  3204
    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
  3205
  next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3206
    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
  3207
      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
  3208
    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
  3209
      by (auto simp add: norm_minus_commute)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3210
  qed auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3211
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3212
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3213
lemma simplex_extremal_le_exists:
44525
fbb777aec0d4 generalize lemma finite_imp_compact_convex_hull and related lemmas
huffman
parents: 44524
diff changeset
  3214
  fixes s :: "('a::real_inner) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3215
  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
  3216
  \<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
  3217
  using convex_hull_empty simplex_extremal_le[of s] by(cases "s={}")auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3218
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3219
subsection {* Closest point of a convex set is unique, with a continuous projection. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3220
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3221
definition
36337
87b6c83d7ed7 generalize constant closest_point
huffman
parents: 36071
diff changeset
  3222
  closest_point :: "'a::{real_inner,heine_borel} set \<Rightarrow> 'a \<Rightarrow> 'a" where
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3223
 "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
  3224
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3225
lemma closest_point_exists:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3226
  assumes "closed s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3227
  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
  3228
  unfolding closest_point_def apply(rule_tac[!] someI2_ex)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3229
  using distance_attains_inf[OF assms(1,2), of a] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3230
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3231
lemma closest_point_in_set:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3232
  "closed s \<Longrightarrow> s \<noteq> {} \<Longrightarrow> (closest_point s a) \<in> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3233
  by(meson closest_point_exists)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3234
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3235
lemma closest_point_le:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3236
  "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
  3237
  using closest_point_exists[of s] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3238
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3239
lemma closest_point_self:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3240
  assumes "x \<in> s"  shows "closest_point s x = x"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3241
  unfolding closest_point_def apply(rule some1_equality, rule ex1I[of _ x])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3242
  using assms by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3243
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3244
lemma closest_point_refl:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3245
 "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
  3246
  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
  3247
36337
87b6c83d7ed7 generalize constant closest_point
huffman
parents: 36071
diff changeset
  3248
lemma closer_points_lemma:
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3249
  assumes "inner y z > 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3250
  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
  3251
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
  3252
  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
  3253
    fix v assume "0<v" "v \<le> inner y z / inner z z"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3254
    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
  3255
      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
  3256
  qed(rule divide_pos_pos, auto) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3257
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3258
lemma closer_point_lemma:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3259
  assumes "inner (y - x) (z - x) > 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3260
  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
  3261
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
  3262
    using closer_points_lemma[OF assms] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3263
  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
  3264
    unfolding dist_norm by(auto simp add: norm_minus_commute field_simps) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3265
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3266
lemma any_closest_point_dot:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3267
  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
  3268
  shows "inner (a - x) (y - x) \<le> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3269
proof(rule ccontr) assume "\<not> inner (a - x) (y - x) \<le> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3270
  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
  3271
  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
  3272
  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
  3273
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3274
lemma any_closest_point_unique:
36337
87b6c83d7ed7 generalize constant closest_point
huffman
parents: 36071
diff changeset
  3275
  fixes x :: "'a::real_inner"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3276
  assumes "convex s" "closed s" "x \<in> s" "y \<in> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3277
  "\<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
  3278
  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
  3279
  unfolding norm_pths(1) and norm_le_square
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3280
  by (auto simp add: algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3281
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3282
lemma closest_point_unique:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3283
  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
  3284
  shows "x = closest_point s a"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3285
  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
  3286
  using closest_point_exists[OF assms(2)] and assms(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3287
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3288
lemma closest_point_dot:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3289
  assumes "convex s" "closed s" "x \<in> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3290
  shows "inner (a - closest_point s a) (x - closest_point s a) \<le> 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3291
  apply(rule any_closest_point_dot[OF assms(1,2) _ assms(3)])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3292
  using closest_point_exists[OF assms(2)] and assms(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3293
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3294
lemma closest_point_lt:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3295
  assumes "convex s" "closed s" "x \<in> s" "x \<noteq> closest_point s a"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3296
  shows "dist a (closest_point s a) < dist a x"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3297
  apply(rule ccontr) apply(rule_tac notE[OF assms(4)])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3298
  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
  3299
  using closest_point_le[OF assms(2), of _ a] by fastforce
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3300
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3301
lemma closest_point_lipschitz:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3302
  assumes "convex s" "closed s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3303
  shows "dist (closest_point s x) (closest_point s y) \<le> dist x y"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3304
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3305
  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
  3306
       "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
  3307
    apply(rule_tac[!] any_closest_point_dot[OF assms(1-2)])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3308
    using closest_point_exists[OF assms(2-3)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3309
  thus ?thesis unfolding dist_norm and norm_le
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3310
    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
  3311
    by (simp add: inner_add inner_diff inner_commute) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3312
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3313
lemma continuous_at_closest_point:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3314
  assumes "convex s" "closed s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3315
  shows "continuous (at x) (closest_point s)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3316
  unfolding continuous_at_eps_delta
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3317
  using le_less_trans[OF closest_point_lipschitz[OF assms]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3318
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3319
lemma continuous_on_closest_point:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3320
  assumes "convex s" "closed s" "s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3321
  shows "continuous_on t (closest_point s)"
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3322
by(metis continuous_at_imp_continuous_on continuous_at_closest_point[OF assms])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3323
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3324
subsubsection {* Various point-to-set separating/supporting hyperplane theorems. *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3325
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3326
lemma supporting_hyperplane_closed_point:
36337
87b6c83d7ed7 generalize constant closest_point
huffman
parents: 36071
diff changeset
  3327
  fixes z :: "'a::{real_inner,heine_borel}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3328
  assumes "convex s" "closed s" "s \<noteq> {}" "z \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3329
  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
  3330
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3331
  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
  3332
  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
  3333
    apply rule defer apply rule defer apply(rule, rule ccontr) using `y\<in>s` proof-
49530
wenzelm
parents: 49529
diff changeset
  3334
    show "inner (y - z) z < inner (y - z) y" apply(subst diff_less_iff(1)[symmetric])
wenzelm
parents: 49529
diff changeset
  3335
      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
  3336
  next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3337
    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
  3338
      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
  3339
    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
  3340
      "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
  3341
    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
  3342
  qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3343
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3344
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3345
lemma separating_hyperplane_closed_point:
36337
87b6c83d7ed7 generalize constant closest_point
huffman
parents: 36071
diff changeset
  3346
  fixes z :: "'a::{real_inner,heine_borel}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3347
  assumes "convex s" "closed s" "z \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3348
  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
  3349
proof(cases "s={}")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3350
  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
  3351
    using less_le_trans[OF _ inner_ge_zero[of z]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3352
next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3353
  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
  3354
    using distance_attains_inf[OF assms(2) False] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3355
  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
  3356
    apply rule defer apply rule proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3357
    fix x assume "x\<in>s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3358
    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
  3359
      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
  3360
      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
  3361
      thus False using y[THEN bspec[where x="y + u *\<^sub>R (x - y)"]]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3362
        using assms(1)[unfolded convex_alt, THEN bspec[where x=y]]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3363
        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
  3364
    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
  3365
    hence "0 < inner (y - z) (y - z)" unfolding power2_norm_eq_inner by simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3366
    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
  3367
      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
  3368
  qed(insert `y\<in>s` `z\<notin>s`, auto)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3369
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3370
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3371
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
  3372
  assumes "convex (s::('a::euclidean_space) set)" "closed s" "0 \<notin> s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3373
  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
  3374
  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
  3375
  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
  3376
  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
  3377
    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
  3378
  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
  3379
    using True using DIM_positive[where 'a='a] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3380
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
  3381
    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
  3382
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3383
subsubsection {* Now set-to-set for closed/compact sets *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3384
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3385
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
  3386
  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
  3387
  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
  3388
proof(cases "s={}")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3389
  case True
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3390
  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
  3391
  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
  3392
  hence "z\<notin>t" using b(2)[THEN bspec[where x=z]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3393
  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
  3394
    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
  3395
  thus ?thesis using True by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3396
next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3397
  case False then obtain y where "y\<in>s" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3398
  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
  3399
    using separating_hyperplane_closed_point[OF convex_differences[OF assms(1,3)], of 0]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3400
    using closed_compact_differences[OF assms(2,4)] using assms(6) by(auto, blast)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3401
  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
  3402
  def k \<equiv> "Sup ((\<lambda>x. inner a x) ` t)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3403
  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
  3404
    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
  3405
    from ab have "((\<lambda>x. inner a x) ` t) *<= (inner a y - b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3406
      apply(erule_tac x=y in ballE) apply(rule setleI) using `y\<in>s` by auto
51475
ebf9d4fd00ba introduct the conditional_complete_lattice type class; generalize theorems about real Sup and Inf to it
hoelzl
parents: 50979
diff changeset
  3407
    hence k:"isLub UNIV ((\<lambda>x. inner a x) ` t) k" unfolding k_def apply(rule_tac isLub_cSup) using assms(5) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3408
    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
  3409
  next
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3410
    fix x assume "x\<in>s"
51475
ebf9d4fd00ba introduct the conditional_complete_lattice type class; generalize theorems about real Sup and Inf to it
hoelzl
parents: 50979
diff changeset
  3411
    hence "k \<le> inner a x - b" unfolding k_def apply(rule_tac cSup_least) using assms(5)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3412
      using ab[THEN bspec[where x=x]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3413
    thus "k + b / 2 < inner a x" using `0 < b` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3414
  qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3415
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3416
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3417
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
  3418
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3419
  assumes "convex s" "compact s" "s \<noteq> {}" "convex t" "closed t" "s \<inter> t = {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3420
  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
  3421
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
  3422
    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
  3423
  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
  3424
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3425
subsubsection {* General case without assuming closure and getting non-strict separation *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3426
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3427
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
  3428
  assumes "convex s" "(0::'a::euclidean_space) \<notin> s"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3429
  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
  3430
proof- let ?k = "\<lambda>c. {x::'a. 0 \<le> inner c x}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3431
  have "frontier (cball 0 1) \<inter> (\<Inter> (?k ` s)) \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3432
    apply(rule compact_imp_fip) apply(rule compact_frontier[OF compact_cball])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3433
    defer apply(rule,rule,erule conjE) proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3434
    fix f assume as:"f \<subseteq> ?k ` s" "finite f"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3435
    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
  3436
    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
  3437
      using separating_hyperplane_closed_0[OF convex_convex_hull, of c]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3438
      using finite_imp_compact_convex_hull[OF c(3), THEN compact_imp_closed] and assms(2)
49530
wenzelm
parents: 49529
diff changeset
  3439
      using subset_hull[of convex, OF assms(1), symmetric, of c] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3440
    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
  3441
       using hull_subset[of c convex] unfolding subset_eq and inner_scaleR
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3442
       apply- apply rule defer apply rule apply(rule mult_nonneg_nonneg)
44629
1cd782f3458b remove redundant lemma card_enum
huffman
parents: 44531
diff changeset
  3443
       by(auto simp add: inner_commute del: ballE elim!: ballE)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3444
    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
  3445
  qed(insert closed_halfspace_ge, auto)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3446
  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
  3447
  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
  3448
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3449
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
  3450
  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
  3451
  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
  3452
proof- from separating_hyperplane_set_0[OF convex_differences[OF assms(2,1)]]
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3453
  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
  3454
    using assms(3-5) by auto
33270
paulson
parents: 33175
diff changeset
  3455
  hence "\<forall>x\<in>t. \<forall>y\<in>s. inner a y \<le> inner a x"
paulson
parents: 33175
diff changeset
  3456
    by (force simp add: inner_diff)
paulson
parents: 33175
diff changeset
  3457
  thus ?thesis
paulson
parents: 33175
diff changeset
  3458
    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
  3459
    apply auto
51475
ebf9d4fd00ba introduct the conditional_complete_lattice type class; generalize theorems about real Sup and Inf to it
hoelzl
parents: 50979
diff changeset
  3460
    apply (rule isLub_cSup[THEN isLubD2])
33270
paulson
parents: 33175
diff changeset
  3461
    prefer 4
51475
ebf9d4fd00ba introduct the conditional_complete_lattice type class; generalize theorems about real Sup and Inf to it
hoelzl
parents: 50979
diff changeset
  3462
    apply (rule cSup_least)
33270
paulson
parents: 33175
diff changeset
  3463
     using assms(3-5) apply (auto simp add: setle_def)
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3464
    apply metis
33270
paulson
parents: 33175
diff changeset
  3465
    done
paulson
parents: 33175
diff changeset
  3466
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3467
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3468
subsection {* More convexity generalities *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3469
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3470
lemma convex_closure:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3471
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3472
  assumes "convex s" shows "convex(closure s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3473
  unfolding convex_def Ball_def closure_sequential
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3474
  apply(rule,rule,rule,rule,rule,rule,rule,rule,rule) apply(erule_tac exE)+
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3475
  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
  3476
  apply(rule assms[unfolded convex_def, rule_format]) prefer 6
44629
1cd782f3458b remove redundant lemma card_enum
huffman
parents: 44531
diff changeset
  3477
  by (auto del: tendsto_const intro!: tendsto_intros)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3478
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3479
lemma convex_interior:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3480
  fixes s :: "'a::real_normed_vector set"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3481
  assumes "convex s" shows "convex(interior s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3482
  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
  3483
  fix x y u assume u:"0 \<le> u" "u \<le> (1::real)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3484
  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
  3485
  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
  3486
    apply rule unfolding subset_eq defer apply rule proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3487
    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
  3488
    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
  3489
      apply(rule_tac assms[unfolded convex_alt, rule_format])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3490
      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
  3491
    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
  3492
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  3493
lemma convex_hull_eq_empty[simp]: "convex hull s = {} \<longleftrightarrow> s = {}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3494
  using hull_subset[of s convex] convex_hull_empty by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3495
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3496
subsection {* Moving and scaling convex hulls. *}
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3497
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3498
lemma convex_hull_translation_lemma:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3499
  "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
  3500
by (metis convex_convex_hull convex_translation hull_minimal hull_subset image_mono)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3501
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3502
lemma convex_hull_bilemma: fixes neg
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3503
  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
  3504
  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
  3505
  \<Longrightarrow> \<forall>s. (convex hull (up a s)) = up a (convex hull s)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3506
  using assms by(metis subset_antisym)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3507
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3508
lemma convex_hull_translation:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3509
  "convex hull ((\<lambda>x. a + x) ` s) = (\<lambda>x. a + x) ` (convex hull s)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3510
  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
  3511
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3512
lemma convex_hull_scaling_lemma:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3513
 "(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
  3514
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
  3515
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3516
lemma convex_hull_scaling:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3517
  "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
  3518
  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
  3519
  unfolding image_image scaleR_scaleR by(auto simp add:image_constant_conv)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3520
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3521
lemma convex_hull_affinity:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3522
  "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
  3523
by(simp only: image_image[symmetric] convex_hull_scaling convex_hull_translation)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3524
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3525
subsection {* Convexity of cone hulls *}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3526
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3527
lemma convex_cone_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3528
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3529
shows "convex (cone hull S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3530
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3531
{ 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
  3532
  hence "S ~= {}" using cone_hull_empty_iff[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3533
  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
  3534
  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
  3535
     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
  3536
  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
  3537
     using cone_hull_expl[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3538
  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
  3539
     using cone_hull_expl[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3540
  { 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
  3541
    hence "u *\<^sub>R x+ v *\<^sub>R y = 0" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3542
    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
  3543
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3544
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3545
  { assume "cx+cy>0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3546
    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
  3547
      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
  3548
    hence "cx *\<^sub>R xx + cy *\<^sub>R yy : cone hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3549
      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
  3550
      `cx+cy>0` by (auto simp add: scaleR_right_distrib)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3551
    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
  3552
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3553
  moreover have "(cx+cy<=0) | (cx+cy>0)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3554
  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
  3555
} from this show ?thesis unfolding convex_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3556
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3557
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3558
lemma cone_convex_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3559
assumes "cone S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3560
shows "cone (convex hull S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3561
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3562
{ assume "S = {}" hence ?thesis by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3563
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3564
{ 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
  3565
  { fix c assume "(c :: real)>0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3566
    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
  3567
       using convex_hull_scaling[of _ S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3568
    also have "...=convex hull S" using * `c>0` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3569
    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
  3570
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3571
  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
  3572
     using * hull_subset[of S convex] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3573
  hence ?thesis using `S ~= {}` cone_iff[of "convex hull S"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3574
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3575
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3576
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  3577
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3578
subsection {* Convex set as intersection of halfspaces *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3579
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3580
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
  3581
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3582
  assumes "closed s" "convex s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3583
  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
  3584
  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
  3585
  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
  3586
  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
  3587
  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
  3588
    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
  3589
qed auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3590
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3591
subsection {* Radon's theorem (from Lars Schewe) *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3592
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3593
lemma radon_ex_lemma:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3594
  assumes "finite c" "affine_dependent c"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3595
  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
  3596
proof- from assms(2)[unfolded affine_dependent_explicit] guess s .. then guess u ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3597
  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
  3598
    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
  3599
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3600
lemma radon_s_lemma:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3601
  assumes "finite s" "setsum f s = (0::real)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3602
  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
  3603
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
  3604
  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
  3605
    using assms(2) by assumption qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3606
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3607
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
  3608
  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
  3609
  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
  3610
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3611
  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
  3612
  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
  3613
    using assms(2) by assumption qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3614
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3615
lemma radon_partition:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3616
  assumes "finite c" "affine_dependent c"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3617
  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
  3618
  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
  3619
  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
  3620
  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
  3621
  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
  3622
    case False hence "u v < 0" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3623
    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
  3624
      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
  3625
    next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3626
      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
  3627
      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
  3628
  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
  3629
36778
739a9379e29b avoid using real-specific versions of generic lemmas
huffman
parents: 36725
diff changeset
  3630
  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
  3631
  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
  3632
    "(\<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
  3633
    using assms(1) apply(rule_tac[!] setsum_mono_zero_left) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3634
  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
  3635
   "(\<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
  3636
    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
  3637
  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
  3638
    apply (rule) apply (rule mult_nonneg_nonneg) using * by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3639
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3640
  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
  3641
    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
  3642
    using assms(1) unfolding scaleR_scaleR[symmetric] scaleR_right.setsum [symmetric] and z_def
wenzelm
parents: 49529
diff changeset
  3643
    by(auto simp add: setsum_negf setsum_right_distrib[symmetric])
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3644
  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
  3645
    apply (rule) apply (rule mult_nonneg_nonneg) using * by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3646
  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
  3647
    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
  3648
    using assms(1) unfolding scaleR_scaleR[symmetric] scaleR_right.setsum [symmetric] and z_def using *
wenzelm
parents: 49529
diff changeset
  3649
    by(auto simp add: setsum_negf setsum_right_distrib[symmetric])
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3650
  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
  3651
qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3652
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3653
lemma radon: assumes "affine_dependent c"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3654
  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
  3655
proof- from assms[unfolded affine_dependent_explicit] guess s .. then guess u ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3656
  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
  3657
  from radon_partition[OF *] guess m .. then guess p ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3658
  thus ?thesis apply(rule_tac that[of p m]) using s by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3659
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3660
subsection {* Helly's theorem *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3661
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3662
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
  3663
  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
  3664
  "\<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
  3665
  shows "\<Inter> f \<noteq> {}"
33715
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3666
using assms proof(induct n arbitrary: f)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3667
case (Suc n)
33715
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3668
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
  3669
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
  3670
  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
  3671
  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
  3672
    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
  3673
    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
  3674
  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
  3675
  show ?thesis proof(cases "inj_on X f")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3676
    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
  3677
    hence *:"\<Inter> f = \<Inter> (f - {s}) \<inter> \<Inter> (f - {t})" by auto
49530
wenzelm
parents: 49529
diff changeset
  3678
    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
  3679
      apply(rule, rule X[rule_format]) using X st by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3680
  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
  3681
      using radon_partition[of "X ` f"] and affine_dependent_biggerset[of "X ` f"]
33715
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3682
      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
  3683
    have "m \<subseteq> X ` f" "p \<subseteq> X ` f" using mp(2) by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3684
    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
  3685
    hence "f \<union> (g \<union> h) = f" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3686
    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
  3687
      unfolding mp(2)[unfolded image_Un[symmetric] gh] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3688
    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
  3689
    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
  3690
      apply(rule_tac [!] hull_minimal) using Suc gh(3-4)  unfolding subset_eq
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3691
      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
  3692
      fix x assume "x\<in>X ` g" then guess y unfolding image_iff ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3693
      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
  3694
      fix x assume "x\<in>X ` h" then guess y unfolding image_iff ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3695
      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
  3696
    qed(auto)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3697
    thus ?thesis unfolding f using mp(3)[unfolded gh] by blast qed
37647
a5400b94d2dd minimize dependencies on Numeral_Type
huffman
parents: 37489
diff changeset
  3698
qed(auto) qed(auto)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3699
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3700
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
  3701
  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
  3702
          "\<forall>t\<subseteq>f. card t = DIM('a) + 1 \<longrightarrow> \<Inter> t \<noteq> {}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3703
  shows "\<Inter> f \<noteq>{}"
33715
8cce3a34c122 removed hassize predicate
hoelzl
parents: 33714
diff changeset
  3704
  apply(rule helly_induct) using assms by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3705
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3706
subsection {* Homeomorphism of all convex compact sets with nonempty interior *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3707
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3708
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
  3709
  fixes s :: "('a::euclidean_space) set"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3710
  assumes "compact s" "0 \<in> s" "x \<noteq> 0"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3711
  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
  3712
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3713
  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
  3714
  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
  3715
  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
  3716
    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
  3717
  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
  3718
  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
  3719
    apply(rule, intro continuous_intros)
e4de7750cdeb modernize lemmas about 'continuous' and 'continuous_on';
huffman
parents: 44629
diff changeset
  3720
    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
  3721
  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
  3722
    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
  3723
  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
  3724
    "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
  3725
49530
wenzelm
parents: 49529
diff changeset
  3726
  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
  3727
  { fix v assume as:"v > u" "v *\<^sub>R x \<in> s"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3728
    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
  3729
      using `u\<ge>0` unfolding pos_le_divide_eq[OF `norm x > 0`] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3730
    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
  3731
      apply(rule as(2)) unfolding mem_Collect_eq apply(rule_tac x=v in exI)
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3732
      using as(1) `u\<ge>0` by(auto simp add:field_simps)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3733
    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
  3734
  } note u_max = this
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3735
49530
wenzelm
parents: 49529
diff changeset
  3736
  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
  3737
    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
  3738
    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
  3739
    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
  3740
    thus False using u_max[OF _ as] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3741
  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
  3742
  thus ?thesis by(metis that[of u] u_max obt(1))
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3743
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3744
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3745
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
  3746
  assumes "compact s" "cball (0::'a::euclidean_space) 1 \<subseteq> s "
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3747
  "\<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
  3748
  shows "s homeomorphic (cball (0::'a::euclidean_space) 1)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3749
proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3750
  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
  3751
  def pi \<equiv> "\<lambda>x::'a. inverse (norm x) *\<^sub>R x"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3752
  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
  3753
    using assms(2)[unfolded subset_eq Ball_def mem_cball] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3754
  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
  3755
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3756
  have contpi:"continuous_on (UNIV - {0}) pi" apply(rule continuous_at_imp_continuous_on)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3757
    apply rule unfolding pi_def
44647
e4de7750cdeb modernize lemmas about 'continuous' and 'continuous_on';
huffman
parents: 44629
diff changeset
  3758
    apply (intro continuous_intros)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3759
    apply simp
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3760
    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
  3761
  def sphere \<equiv> "{x::'a. norm x = 1}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3762
  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
  3763
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3764
  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
  3765
  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
  3766
    fix x u assume x:"x\<in>frontier s" and "(0::real)\<le>u"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3767
    hence "x\<noteq>0" using `0\<notin>frontier s` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3768
    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
  3769
      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
  3770
    have "v=1" apply(rule ccontr) unfolding neq_iff apply(erule disjE) proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3771
      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
  3772
      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
  3773
        using v and x and fs unfolding inverse_less_1_iff by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3774
    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
  3775
      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
  3776
        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
  3777
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3778
  have "\<exists>surf. homeomorphism (frontier s) sphere pi surf"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3779
    apply(rule homeomorphism_compact) apply(rule compact_frontier[OF assms(1)])
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3780
    apply(rule continuous_on_subset[OF contpi]) defer apply(rule set_eqI,rule)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3781
    unfolding inj_on_def prefer 3 apply(rule,rule,rule)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3782
  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
  3783
    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
  3784
  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
  3785
    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
  3786
      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
  3787
    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
  3788
  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
  3789
    hence xys:"x\<in>s" "y\<in>s" using fs by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3790
    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
  3791
    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
  3792
    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
  3793
    have "0 \<le> norm y * inverse (norm x)" "0 \<le> norm x * inverse (norm y)"
49530
wenzelm
parents: 49529
diff changeset
  3794
      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
  3795
    hence "norm x = norm y" apply(rule_tac ccontr) unfolding neq_iff
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3796
      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
  3797
      using front_smul[THEN bspec, OF as(2), THEN spec[where x="norm x * (inverse (norm y))"]]
49530
wenzelm
parents: 49529
diff changeset
  3798
      using xys nor by(auto simp add:field_simps divide_le_eq_1 divide_inverse[symmetric])
wenzelm
parents: 49529
diff changeset
  3799
    thus "x = y" apply(subst injpi[symmetric]) using as(3) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3800
  qed(insert `0 \<notin> frontier s`, auto)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3801
  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
  3802
    "\<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
  3803
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3804
  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
  3805
    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
  3806
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3807
  { fix x assume as:"x \<in> cball (0::'a) 1"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3808
    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
  3809
      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
  3810
      thus ?thesis apply(rule_tac assms(3)[rule_format, THEN DiffD1])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3811
        apply(rule_tac fs[unfolded subset_eq, rule_format])
49530
wenzelm
parents: 49529
diff changeset
  3812
        unfolding surf(5)[symmetric] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3813
    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
  3814
        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
  3815
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3816
  { fix x assume "x\<in>s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3817
    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
  3818
      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
  3819
    next let ?a = "inverse (norm (surf (pi x)))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3820
      case False hence invn:"inverse (norm x) \<noteq> 0" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3821
      from False have pix:"pi x\<in>sphere" using pi(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3822
      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
  3823
      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
  3824
      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
  3825
        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
  3826
      have "norm (surf (pi x)) \<noteq> 0" using ** False by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3827
      hence "norm x = norm ((?a * norm x) *\<^sub>R surf (pi x))"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3828
        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
  3829
      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
  3830
        unfolding pi(2)[OF *] surf(4)[rule_format, OF pix] ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3831
      moreover have "surf (pi x) \<in> frontier s" using surf(5) pix by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3832
      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
  3833
        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
  3834
        using False `x\<in>s` by(auto simp add:field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3835
      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
  3836
        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
  3837
        unfolding pi(2)[OF `?a > 0`] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3838
    qed } note hom2 = this
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3839
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3840
  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
  3841
    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
  3842
    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
  3843
    fix x::"'a" assume as:"x \<in> cball 0 1"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3844
    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
  3845
      case False thus ?thesis apply (intro continuous_intros)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3846
        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
  3847
    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
  3848
      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
  3849
        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
  3850
        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
  3851
        by (auto simp: SOME_Basis)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3852
      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
  3853
        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
  3854
        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
  3855
        fix e and x::"'a" assume as:"norm x < e / B" "0 < norm x" "0<e"
49530
wenzelm
parents: 49529
diff changeset
  3856
        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
  3857
        hence "norm (surf (pi x)) \<le> B" using B fs by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3858
        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
  3859
        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
  3860
        also have "\<dots> = e" using `B>0` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3861
        finally show "norm x * norm (surf (pi x)) < e" by assumption
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3862
      qed(insert `B>0`, auto) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3863
  next { fix x assume as:"surf (pi x) = 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3864
      have "x = 0" proof(rule ccontr)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3865
        assume "x\<noteq>0" hence "pi x \<in> sphere" using pi(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3866
        hence "surf (pi x) \<in> frontier s" using surf(5) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3867
        thus False using `0\<notin>frontier s` unfolding as by simp qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3868
    } note surf_0 = this
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3869
    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
  3870
      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
  3871
      thus "x=y" proof(cases "x=0 \<or> y=0")
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3872
        case True thus ?thesis using as by(auto elim: surf_0) next
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3873
        case False
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3874
        hence "pi (surf (pi x)) = pi (surf (pi y))" using as(3)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3875
          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
  3876
        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
  3877
        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
  3878
        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
  3879
        ultimately show ?thesis using injpi by auto qed qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3880
  qed auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3881
44519
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3882
lemma homeomorphic_convex_compact_lemma:
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3883
  fixes s :: "('a::euclidean_space) set"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3884
  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
  3885
  shows "s homeomorphic (cball (0::'a) 1)"
44519
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3886
proof (rule starlike_compact_projective[OF assms(2-3)], clarify)
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3887
  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
  3888
  have "open (ball (u *\<^sub>R x) (1 - u))" by (rule open_ball)
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3889
  moreover have "u *\<^sub>R x \<in> ball (u *\<^sub>R x) (1 - u)"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3890
    unfolding centre_in_ball using `u < 1` by simp
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3891
  moreover have "ball (u *\<^sub>R x) (1 - u) \<subseteq> s"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3892
  proof
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3893
    fix y assume "y \<in> ball (u *\<^sub>R x) (1 - u)"
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3894
    hence "dist (u *\<^sub>R x) y < 1 - u" unfolding mem_ball .
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3895
    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
  3896
      by (simp add: dist_norm inverse_eq_divide norm_minus_commute)
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3897
    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
  3898
    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
  3899
      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
  3900
    thus "y \<in> s" using `u < 1` by simp
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3901
  qed
ea85d78a994e simplify definition of 'interior';
huffman
parents: 44467
diff changeset
  3902
  ultimately have "u *\<^sub>R x \<in> interior s" ..
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3903
  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
  3904
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3905
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
  3906
  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
  3907
  shows "s homeomorphic (cball (b::'a) e)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3908
proof- obtain a where "a\<in>interior s" using assms(3) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3909
  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
  3910
  let ?d = "inverse d" and ?n = "0::'a"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3911
  have "cball ?n 1 \<subseteq> (\<lambda>x. inverse d *\<^sub>R (x - a)) ` s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3912
    apply(rule, rule_tac x="d *\<^sub>R x + a" in image_eqI) defer
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3913
    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
  3914
    by(auto simp add: mult_right_le_one_le)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3915
  hence "(\<lambda>x. inverse d *\<^sub>R (x - a)) ` s homeomorphic cball ?n 1"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3916
    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
  3917
    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
  3918
  thus ?thesis apply(rule_tac homeomorphic_trans[OF _ homeomorphic_balls(2)[of 1 _ ?n]])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3919
    apply(rule homeomorphic_trans[OF homeomorphic_affinity[of "?d" s "?d *\<^sub>R -a"]])
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3920
    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
  3921
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  3922
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
  3923
  assumes "convex s" "compact s" "interior s \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3924
          "convex t" "compact t" "interior t \<noteq> {}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3925
  shows "s homeomorphic t"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3926
  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
  3927
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3928
subsection {* Epigraphs of convex functions *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3929
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3930
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
  3931
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3932
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
  3933
34964
4e8be3c04d37 Replaced vec1 and dest_vec1 by abbreviation.
hoelzl
parents: 34915
diff changeset
  3934
(** This might break sooner or later. In fact it did already once. **)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  3935
lemma convex_epigraph:
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3936
  "convex(epigraph s f) \<longleftrightarrow> convex_on s f \<and> convex s"
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3937
  unfolding convex_def convex_on_def
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3938
  unfolding Ball_def split_paired_All epigraph_def
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3939
  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
  3940
  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
  3941
  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
  3942
  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
  3943
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3944
lemma convex_epigraphI:
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3945
  "convex_on s f \<Longrightarrow> convex s \<Longrightarrow> convex(epigraph s f)"
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3946
unfolding convex_epigraph by auto
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3947
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3948
lemma convex_epigraph_convex:
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3949
  "convex s \<Longrightarrow> convex_on s f \<longleftrightarrow> convex(epigraph s f)"
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  3950
by(simp add: convex_epigraph)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3951
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3952
subsubsection {* Use this to derive general bound property of convex function *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3953
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3954
lemma convex_on:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3955
  assumes "convex s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3956
  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
  3957
   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
  3958
  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
  3959
  unfolding fst_setsum snd_setsum fst_scaleR snd_scaleR
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3960
  apply safe
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3961
  apply (drule_tac x=k in spec)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3962
  apply (drule_tac x=u in spec)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3963
  apply (drule_tac x="\<lambda>i. (x i, f (x i))" in spec)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3964
  apply simp
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3965
  using assms[unfolded convex] apply simp
36778
739a9379e29b avoid using real-specific versions of generic lemmas
huffman
parents: 36725
diff changeset
  3966
  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
  3967
  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
  3968
  apply(rule mult_left_mono)using assms[unfolded convex] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3969
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  3970
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  3971
subsection {* Convexity of general and special intervals *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3972
37732
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  3973
lemma convexI: (* TODO: move to Library/Convex.thy *)
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  3974
  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
  3975
  shows "convex s"
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  3976
using assms unfolding convex_def by fast
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  3977
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3978
lemma is_interval_convex:
37732
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  3979
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3980
  assumes "is_interval s" shows "convex s"
37732
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  3981
proof (rule convexI)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3982
  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
  3983
  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
  3984
  { fix a b assume "\<not> b \<le> u * a + v * b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3985
    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
  3986
    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
  3987
    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
  3988
  } moreover
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3989
  { fix a b assume "\<not> u * a + v * b \<le> a"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3990
    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
  3991
    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
  3992
    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
  3993
  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
  3994
    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
  3995
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3996
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3997
lemma is_interval_connected:
37732
6432bf0d7191 generalize type of is_interval to class euclidean_space
huffman
parents: 37673
diff changeset
  3998
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  3999
  shows "is_interval s \<Longrightarrow> connected s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4000
  using is_interval_convex convex_connected by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4001
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4002
lemma convex_interval: "convex {a .. b}" "convex {a<..<b::'a::ordered_euclidean_space}"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4003
  apply(rule_tac[!] is_interval_convex) using is_interval_interval by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4004
36431
340755027840 move definitions and theorems for type real^1 to separate theory file
huffman
parents: 36365
diff changeset
  4005
(* FIXME: rewrite these lemmas without using vec1
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4006
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
  4007
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4008
lemma is_interval_1:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4009
  "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
  4010
  unfolding is_interval_def forall_1 by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4011
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4012
lemma is_interval_connected_1: "is_interval s \<longleftrightarrow> connected (s::(real^1) set)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4013
  apply(rule, rule is_interval_connected, assumption) unfolding is_interval_1
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4014
  apply(rule,rule,rule,rule,erule conjE,rule ccontr) proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4015
  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
  4016
  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
  4017
  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
  4018
  { 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
  4019
    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
  4020
  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
  4021
  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
  4022
  ultimately show False apply(rule_tac notE[OF as(1)[unfolded connected_def]])
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4023
    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
  4024
    apply(rule, rule open_halfspace_lt, rule, rule open_halfspace_gt)
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4025
    by(auto simp add: field_simps) qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4026
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4027
lemma is_interval_convex_1:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4028
  "is_interval s \<longleftrightarrow> convex (s::(real^1) set)"
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4029
by(metis is_interval_convex convex_connected is_interval_connected_1)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4030
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4031
lemma convex_connected_1:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4032
  "connected s \<longleftrightarrow> convex (s::(real^1) set)"
36071
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4033
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
  4034
*)
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4035
subsection {* Another intermediate value theorem formulation *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4036
37673
f69f4b079275 generalize more lemmas from ordered_euclidean_space to euclidean_space
huffman
parents: 37647
diff changeset
  4037
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
  4038
  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
  4039
  shows "\<exists>x\<in>{a..b}. (f x)\<bullet>k = y"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4040
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
  4041
    using assms(1) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4042
  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
  4043
    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
  4044
    using assms by(auto intro!: imageI) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4045
37673
f69f4b079275 generalize more lemmas from ordered_euclidean_space to euclidean_space
huffman
parents: 37647
diff changeset
  4046
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
  4047
  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
  4048
   \<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
  4049
by(rule ivt_increasing_component_on_1)
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4050
  (auto simp add: continuous_at_imp_continuous_on)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4051
37673
f69f4b079275 generalize more lemmas from ordered_euclidean_space to euclidean_space
huffman
parents: 37647
diff changeset
  4052
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
  4053
  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
  4054
  shows "\<exists>x\<in>{a..b}. (f x)\<bullet>k = y"
49530
wenzelm
parents: 49529
diff changeset
  4055
  apply(subst neg_equal_iff_equal[symmetric])
44531
1d477a2b1572 replace some continuous_on lemmas with more general versions
huffman
parents: 44525
diff changeset
  4056
  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
  4057
  using assms using continuous_on_minus by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4058
37673
f69f4b079275 generalize more lemmas from ordered_euclidean_space to euclidean_space
huffman
parents: 37647
diff changeset
  4059
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
  4060
  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
  4061
    \<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
  4062
by(rule ivt_decreasing_component_on_1)
c8ae8e56d42e tuned many proofs a bit
nipkow
parents: 35577
diff changeset
  4063
  (auto simp: continuous_at_imp_continuous_on)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4064
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4065
subsection {* A bound within a convex hull, and so an interval *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4066
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4067
lemma convex_on_convex_hull_bound:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4068
  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
  4069
  shows "\<forall>x\<in> convex hull s. f x \<le> b" proof
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4070
  fix x assume "x\<in>convex hull s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4071
  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
  4072
    unfolding convex_hull_indexed mem_Collect_eq by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4073
  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
  4074
    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
  4075
    using assms(2) obt(1) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4076
  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
  4077
    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
  4078
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
  4079
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
  4080
  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
  4081
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4082
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
  4083
  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
  4084
  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
  4085
    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
  4086
  (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
  4087
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
  4088
  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
  4089
    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
  4090
  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
  4091
    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
  4092
  { 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
  4093
  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
  4094
    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
  4095
    thus "x\<in>convex hull ?points" using 01 by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4096
  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
  4097
    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
  4098
      case True hence "x = 0" apply(subst euclidean_eq_iff) by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4099
      thus "x\<in>convex hull ?points" using 01 by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4100
    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
  4101
      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
  4102
      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
  4103
      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
  4104
      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
  4105
        unfolding i'(1) xi_def apply(rule_tac Min_le) unfolding image_iff
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4106
        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
  4107
      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
  4108
        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
  4109
      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
  4110
        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
  4111
        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
  4112
          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
  4113
            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
  4114
          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
  4115
          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
  4116
          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
  4117
        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
  4118
          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
  4119
      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
  4120
        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
  4121
        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
  4122
        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
  4123
          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
  4124
        { 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
  4125
          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
  4126
            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
  4127
            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
  4128
            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
  4129
          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
  4130
        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
  4131
          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
  4132
        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
  4133
        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
  4134
          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
  4135
        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
  4136
          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
  4137
        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
  4138
          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
  4139
          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
  4140
          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
  4141
          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
  4142
          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
  4143
          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
  4144
          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
  4145
          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
  4146
      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
  4147
    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
  4148
  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
  4149
  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
  4150
    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
  4151
    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
  4152
    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
  4153
    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
  4154
    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
  4155
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4156
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4157
text {* And this is a finite set of vertices. *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4158
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
  4159
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
  4160
  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
  4161
  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
  4162
  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
  4163
  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
  4164
  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
  4165
  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
  4166
    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
  4167
    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
  4168
qed auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4169
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4170
text {* Hence any cube (could do any nonempty interval). *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4171
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4172
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
  4173
  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
  4174
  "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
  4175
  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
  4176
  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
  4177
    unfolding image_iff defer apply(erule bexE) proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4178
    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
  4179
    { 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
  4180
        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
  4181
        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
  4182
      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
  4183
        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
  4184
        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
  4185
      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
  4186
            "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
  4187
    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
  4188
      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
  4189
    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
  4190
      using assms by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4191
  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
  4192
    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
  4193
    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
  4194
      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
  4195
      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
  4196
      using assms by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4197
    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
  4198
      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
  4199
  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
  4200
  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
  4201
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4202
subsection {* Bounded convex function on open set is continuous *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4203
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4204
lemma convex_on_bounded_continuous:
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4205
  fixes s :: "('a::real_normed_vector) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4206
  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
  4207
  shows "continuous_on s f"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4208
  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
  4209
  fix x e assume "x\<in>s" "(0::real) < e"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4210
  def B \<equiv> "abs b + 1"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4211
  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
  4212
    unfolding B_def defer apply(drule assms(3)[rule_format]) by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4213
  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
  4214
  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
  4215
    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
  4216
    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
  4217
    show "\<bar>f y - f x\<bar> < e" proof(cases "y=x")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4218
      case False def t \<equiv> "k / norm (y - x)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4219
      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
  4220
      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
  4221
        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
  4222
      { def w \<equiv> "x + t *\<^sub>R (y - x)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4223
        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
  4224
          unfolding t_def using `k>0` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4225
        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
  4226
        also have "\<dots> = 0"  using `t>0` by(auto simp add:field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4227
        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
  4228
        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
  4229
        hence "(f w - f x) / t < e"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4230
          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
  4231
        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
  4232
          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
  4233
          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
  4234
      moreover
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4235
      { def w \<equiv> "x - t *\<^sub>R (y - x)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4236
        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
  4237
          unfolding t_def using `k>0` by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4238
        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
  4239
        also have "\<dots>=x" using `t>0` by (auto simp add:field_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4240
        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
  4241
        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
  4242
        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
  4243
        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
  4244
          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
  4245
          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
  4246
        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
  4247
        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
  4248
        finally have "f x - f y < e" by auto }
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4249
      ultimately show ?thesis by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4250
    qed(insert `0<e`, auto)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4251
  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
  4252
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4253
subsection {* Upper bound on a ball implies upper and lower bounds *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4254
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4255
lemma convex_bounds_lemma:
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4256
  fixes x :: "'a::real_normed_vector"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4257
  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
  4258
  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
  4259
  apply(rule) proof(cases "0 \<le> e") case True
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4260
  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
  4261
  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
  4262
  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
  4263
  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
  4264
  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
  4265
    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
  4266
next case False fix y assume "y\<in>cball x e"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4267
  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
  4268
  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
  4269
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4270
subsubsection {* Hence a convex function on an open set is continuous *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4271
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
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
  4273
  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
  4274
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4275
lemma convex_on_continuous:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4276
  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
  4277
  (* FIXME: generalize to euclidean_space *)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4278
  shows "continuous_on s f"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4279
  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
  4280
  note dimge1 = DIM_positive[where 'a='a]
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4281
  fix x assume "x\<in>s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4282
  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
  4283
  def d \<equiv> "e / real DIM('a)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4284
  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
  4285
  let ?d = "(\<Sum>i\<in>Basis. d *\<^sub>R i)::'a"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4286
  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
  4287
  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
  4288
  hence "c\<noteq>{}" using c by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4289
  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
  4290
  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
  4291
    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
  4292
    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
  4293
    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
  4294
  proof
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4295
    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
  4296
    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
  4297
      unfolding real_eq_of_nat by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4298
    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
  4299
      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
  4300
  qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4301
  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
  4302
    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
  4303
  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
  4304
    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
  4305
    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
  4306
    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
  4307
    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
  4308
    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
  4309
    done
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4310
  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
  4311
  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
  4312
  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
  4313
    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
  4314
    { 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
  4315
        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
  4316
    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
  4317
      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
  4318
  qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4319
  hence "continuous_on (ball x d) f" apply(rule_tac convex_on_bounded_continuous)
33270
paulson
parents: 33175
diff changeset
  4320
    apply(rule open_ball, rule convex_on_subset[OF conv], rule ball_subset_cball)
paulson
parents: 33175
diff changeset
  4321
    apply force
paulson
parents: 33175
diff changeset
  4322
    done
paulson
parents: 33175
diff changeset
  4323
  thus "continuous (at x) f" unfolding continuous_on_eq_continuous_at[OF open_ball]
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4324
    using `d>0` by auto
33270
paulson
parents: 33175
diff changeset
  4325
qed
paulson
parents: 33175
diff changeset
  4326
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4327
subsection {* Line segments, Starlike Sets, etc. *}
33270
paulson
parents: 33175
diff changeset
  4328
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4329
(* Use the same overloading tricks as for intervals, so that
33270
paulson
parents: 33175
diff changeset
  4330
   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
  4331
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4332
definition
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4333
  midpoint :: "'a::real_vector \<Rightarrow> 'a \<Rightarrow> 'a" where
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4334
  "midpoint a b = (inverse (2::real)) *\<^sub>R (a + b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4335
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4336
definition
36341
2623a1987e1d generalize more constants and lemmas
huffman
parents: 36340
diff changeset
  4337
  open_segment :: "'a::real_vector \<Rightarrow> 'a \<Rightarrow> 'a set" where
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4338
  "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
  4339
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4340
definition
36341
2623a1987e1d generalize more constants and lemmas
huffman
parents: 36340
diff changeset
  4341
  closed_segment :: "'a::real_vector \<Rightarrow> 'a \<Rightarrow> 'a set" where
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4342
  "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
  4343
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  4344
definition "between = (\<lambda> (a,b) x. x \<in> closed_segment a b)"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4345
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4346
lemmas segment = open_segment_def closed_segment_def
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4347
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4348
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
  4349
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4350
lemma midpoint_refl: "midpoint x x = x"
49530
wenzelm
parents: 49529
diff changeset
  4351
  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
  4352
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4353
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
  4354
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4355
lemma midpoint_eq_iff: "midpoint a b = c \<longleftrightarrow> a + b = c + c"
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4356
proof -
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4357
  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
  4358
    by simp
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4359
  thus ?thesis
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4360
    unfolding midpoint_def scaleR_2 [symmetric] by simp
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4361
qed
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4362
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4363
lemma dist_midpoint:
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4364
  fixes a b :: "'a::real_normed_vector" shows
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4365
  "dist a (midpoint a b) = (dist a b) / 2" (is ?t1)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4366
  "dist b (midpoint a b) = (dist a b) / 2" (is ?t2)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4367
  "dist (midpoint a b) a = (dist a b) / 2" (is ?t3)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4368
  "dist (midpoint a b) b = (dist a b) / 2" (is ?t4)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4369
proof-
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4370
  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
  4371
  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
  4372
  note scaleR_right_distrib [simp]
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4373
  show ?t1 unfolding midpoint_def dist_norm apply (rule **)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4374
    by (simp add: scaleR_right_diff_distrib, simp add: scaleR_2)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4375
  show ?t2 unfolding midpoint_def dist_norm apply (rule *)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4376
    by (simp add: scaleR_right_diff_distrib, simp add: scaleR_2)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4377
  show ?t3 unfolding midpoint_def dist_norm apply (rule *)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4378
    by (simp add: scaleR_right_diff_distrib, simp add: scaleR_2)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4379
  show ?t4 unfolding midpoint_def dist_norm apply (rule **)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4380
    by (simp add: scaleR_right_diff_distrib, simp add: scaleR_2)
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4381
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4382
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4383
lemma midpoint_eq_endpoint:
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4384
  "midpoint a b = a \<longleftrightarrow> a = b"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4385
  "midpoint a b = b \<longleftrightarrow> a = b"
36338
7808fbc9c3b4 generalize more constants and lemmas
huffman
parents: 36337
diff changeset
  4386
  unfolding midpoint_eq_iff by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4387
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4388
lemma convex_contains_segment:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4389
  "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
  4390
  unfolding convex_alt closed_segment_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4391
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4392
lemma convex_imp_starlike:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4393
  "convex s \<Longrightarrow> s \<noteq> {} \<Longrightarrow> starlike s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4394
  unfolding convex_contains_segment starlike_def by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4395
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4396
lemma segment_convex_hull:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4397
 "closed_segment a b = convex hull {a,b}" proof-
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4398
  have *:"\<And>x. {x} \<noteq> {}" by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4399
  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
  4400
  show ?thesis unfolding segment convex_hull_insert[OF *] convex_hull_singleton apply(rule set_eqI)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4401
    unfolding mem_Collect_eq apply(rule,erule exE)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4402
    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
  4403
    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
  4404
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4405
lemma convex_segment: "convex (closed_segment a b)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4406
  unfolding segment_convex_hull by(rule convex_convex_hull)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4407
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4408
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
  4409
  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
  4410
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4411
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
  4412
  fixes a b x y :: "'a::euclidean_space"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4413
  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
  4414
  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
  4415
    using assms[unfolded segment_convex_hull] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4416
  thus ?thesis by(auto simp add:norm_minus_commute) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4417
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4418
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
  4419
  fixes x a b :: "'a::euclidean_space"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4420
  assumes "x \<in> closed_segment a b"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4421
  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
  4422
  using segment_furthest_le[OF assms, of a]
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4423
  using segment_furthest_le[OF assms, of b]
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4424
  by (auto simp add:norm_minus_commute)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4425
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4426
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
  4427
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4428
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
  4429
  unfolding between_def by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4430
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4431
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
  4432
proof(cases "a = b")
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  4433
  case True thus ?thesis unfolding between_def split_conv
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4434
    by(auto simp add:segment_refl dist_commute) next
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4435
  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
  4436
  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
  4437
  show ?thesis unfolding between_def split_conv closed_segment_def mem_Collect_eq
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4438
    apply rule apply(erule exE, (erule conjE)+) apply(subst dist_triangle_eq) proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4439
      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
  4440
      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
  4441
        unfolding as(1) by(auto simp add:algebra_simps)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4442
      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
  4443
        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
  4444
        by(auto simp add: field_simps)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4445
    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
  4446
      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
  4447
        unfolding as[unfolded dist_norm] norm_ge_zero by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4448
      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
  4449
        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
  4450
      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
  4451
          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
  4452
            ((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
  4453
            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
  4454
          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
  4455
            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
  4456
            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
  4457
          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
  4458
            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
  4459
        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
  4460
qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4461
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4462
lemma between_midpoint: fixes a::"'a::euclidean_space" shows
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4463
  "between (a,b) (midpoint a b)" (is ?t1)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4464
  "between (b,a) (midpoint a b)" (is ?t2)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4465
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
  4466
  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
  4467
    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
  4468
    by(auto simp add:field_simps inner_simps) 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 between_mem_convex_hull:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4471
  "between (a,b) x \<longleftrightarrow> x \<in> convex hull {a,b}"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4472
  unfolding between_mem_segment segment_convex_hull ..
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4473
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4474
subsection {* Shrinking towards the interior of a convex set *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4475
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4476
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
  4477
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4478
  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
  4479
  shows "x - e *\<^sub>R (x - c) \<in> interior s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4480
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
  4481
  show ?thesis unfolding mem_interior apply(rule_tac x="e*d" in exI)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4482
    apply(rule) defer unfolding subset_eq Ball_def mem_ball proof(rule,rule)
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4483
    fix y assume as:"dist (x - e *\<^sub>R (x - c)) y < e * d"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4484
    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
  4485
    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
  4486
      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
  4487
      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
  4488
    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
  4489
    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
  4490
      by(auto simp add:pos_divide_less_eq[OF `e>0`] mult_commute)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4491
    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
  4492
      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
  4493
  qed(rule mult_pos_pos, insert `e>0` `d>0`, auto) qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4494
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4495
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
  4496
  fixes s :: "('a::euclidean_space) set"
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4497
  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
  4498
  shows "x - e *\<^sub>R (x - c) \<in> interior s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4499
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
  4500
  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
  4501
    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
  4502
    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
  4503
    show ?thesis proof(cases "e=1")
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4504
      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
  4505
        using x[unfolded islimpt_approachable,THEN spec[where x=1]] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4506
      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
  4507
      case False hence "0 < e * d / (1 - e)" and *:"1 - e > 0"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4508
        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
  4509
      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
  4510
        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
  4511
      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
  4512
  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
  4513
  def z \<equiv> "c + ((1 - e) / e) *\<^sub>R (x - y)"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4514
  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
  4515
  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
  4516
    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
  4517
    by(auto simp add:field_simps norm_minus_commute)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4518
  thus ?thesis unfolding * apply - apply(rule mem_interior_convex_shrink)
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4519
    using assms(1,4-5) `y\<in>s` by auto qed
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4520
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4521
subsection {* Some obvious but surprisingly hard simplex lemmas *}
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4522
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4523
lemma simplex:
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4524
  assumes "finite s" "0 \<notin> s"
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4525
  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
  4526
  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
  4527
  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
  4528
  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
  4529
  unfolding if_smult and setsum_delta_notmem[OF assms(2)] by auto
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4530
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
  4531
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
  4532
  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
  4533
  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
  4534
  (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
  4535
proof- let ?D = d
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4536
  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
  4537
  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
  4538
  show ?thesis unfolding simplex[OF `finite d` `0 ~: ?p`]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4539
    apply(rule set_eqI) unfolding mem_Collect_eq apply rule
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4540
    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
  4541
    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
  4542
      "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
  4543
    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
  4544
      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
  4545
    hence **:"setsum u ?D = setsum (op \<bullet> x) ?D"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4546
      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
  4547
    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
  4548
      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
  4549
      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
  4550
         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
  4551
      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
  4552
        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
  4553
      ultimately show "0 \<le> x\<bullet>i" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4554
    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
  4555
    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
  4556
      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
  4557
  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
  4558
      "(\<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
  4559
    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
  4560
      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
  4561
      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
  4562
  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
  4563
qed
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4564
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4565
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
  4566
  "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
  4567
        {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
  4568
  using substd_simplex[of Basis] by auto
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4569
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4570
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
  4571
  "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
  4572
  {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
  4573
  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
  4574
  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
  4575
  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
  4576
  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
  4577
    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
  4578
      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
  4579
      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
  4580
  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
  4581
      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
  4582
    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
  4583
      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
  4584
    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
  4585
      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
  4586
    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
  4587
      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
  4588
    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
  4589
    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
  4590
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
  4591
  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
  4592
  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
  4593
  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
  4594
  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
  4595
  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
  4596
    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
  4597
    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
  4598
    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
  4599
      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
  4600
        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
  4601
        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
  4602
      thus "y \<bullet> i \<le> x \<bullet> i + ?d" by auto qed
44629
1cd782f3458b remove redundant lemma card_enum
huffman
parents: 44531
diff changeset
  4603
    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
  4604
    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
  4605
    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
  4606
      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
  4607
        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
  4608
      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
  4609
        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
  4610
    qed qed auto qed
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4611
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36844
diff changeset
  4612
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
  4613
  "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
  4614
  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
  4615
  { 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
  4616
      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
  4617
         (simp_all add: setsum_cases i) }
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  4618
  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
  4619
  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
  4620
    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
  4621
  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
  4622
    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
  4623
    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
  4624
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
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
  4626
  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
  4627
  {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
  4628
  (is "rel_interior (convex hull (insert 0 ?p)) = ?s")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4629
(* 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
  4630
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4631
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
  4632
{ 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
  4633
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4634
{ 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
  4635
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
  4636
   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
  4637
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
  4638
  by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4639
{ 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
  4640
  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
  4641
       "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
  4642
       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
  4643
  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
  4644
    (!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
  4645
    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
  4646
  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
  4647
    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
  4648
  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
  4649
  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
  4650
    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
  4651
    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
  4652
      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
  4653
    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
  4654
    by (auto simp: inner_simps inner_Basis)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4655
  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
  4656
    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
  4657
      using  `e>0` norm_Basis[of a] d
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4658
      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
  4659
    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
  4660
      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
  4661
    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
  4662
      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
  4663
    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
  4664
    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
  4665
      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
  4666
    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
  4667
      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
  4668
    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
  4669
    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
  4670
  qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4671
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4672
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4673
{
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4674
  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
  4675
  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
  4676
  moreover have "!i. (i:d) | (i ~: d)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4677
  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
  4678
  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
  4679
  hence h2: "x : convex hull (insert 0 ?p)" using as assms
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4680
    unfolding substd_simplex[OF assms] by fastforce
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4681
  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
  4682
  let ?d = "(1 - setsum (op \<bullet> x) d) / real (card d)"
44466
0e5c27f07529 remove unnecessary lemma card_ge1
huffman
parents: 44465
diff changeset
  4683
  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
  4684
  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
  4685
  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
  4686
  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
  4687
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4688
  have "x : rel_interior (convex hull (insert 0 ?p))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4689
    unfolding rel_interior_ball mem_Collect_eq h0 apply(rule,rule h2)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4690
    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
  4691
    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
  4692
  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
  4693
    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
  4694
    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
  4695
    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
  4696
      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
  4697
      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
  4698
      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
  4699
        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
  4700
        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
  4701
      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
  4702
    qed
44629
1cd782f3458b remove redundant lemma card_enum
huffman
parents: 44531
diff changeset
  4703
    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
  4704
      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
  4705
    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
  4706
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" thus "0 \<le> y\<bullet>i"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4708
    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
  4709
      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
  4710
        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
  4711
        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
  4712
      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
  4713
        by (auto simp: inner_simps)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4714
    qed(insert y2, auto)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4715
  qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4716
} 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
  4717
    "\<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
  4718
    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
  4719
from this have ?thesis by (rule set_eqI)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4720
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4721
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4722
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
  4723
lemma rel_interior_substd_simplex_nonempty: assumes "d ~={}" "d\<subseteq>Basis"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4724
  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
  4725
  "a : rel_interior(convex hull (insert 0 d))" proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4726
(* 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
  4727
  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
  4728
  have "finite d" apply(rule finite_subset) using assms(2) by auto
44466
0e5c27f07529 remove unnecessary lemma card_ge1
huffman
parents: 44465
diff changeset
  4729
  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
  4730
  { 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
  4731
    have "?a \<bullet> i = inverse (2 * real (card d))"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4732
      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
  4733
      unfolding inner_setsum_left
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4734
      apply(rule setsum_cong2)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4735
      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
  4736
      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
  4737
  note ** = this
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4738
  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
  4739
  proof safe fix i assume "i:d"
44466
0e5c27f07529 remove unnecessary lemma card_ge1
huffman
parents: 44465
diff changeset
  4740
    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
  4741
    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
  4742
    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
  4743
  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
  4744
      by(rule setsum_cong2, rule **)
49530
wenzelm
parents: 49529
diff changeset
  4745
    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
  4746
      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
  4747
    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
  4748
  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
  4749
    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
  4750
      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
  4751
      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
  4752
      apply blast
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4753
    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
  4754
      { 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
  4755
        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
  4756
          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
  4757
        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
  4758
          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
  4759
      } 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
  4760
    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
  4761
    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
  4762
  qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4763
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4764
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  4765
subsection {* Relative interior of convex set *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4766
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4767
lemma rel_interior_convex_nonempty_aux:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4768
fixes S :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4769
assumes "convex S" and "0 : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4770
shows "rel_interior S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4771
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4772
{ assume "S = {0}" hence ?thesis using rel_interior_sing by auto }
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4773
moreover {
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4774
assume "S ~= {0}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4775
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
  4776
hence "B~={}" using B_def assms `S ~= {0}` span_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4777
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
  4778
hence "span (insert 0 B) <= span B"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4779
    using span_span[of B] span_mono[of "insert 0 B" "span B"] by blast
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4780
hence "convex hull insert 0 B <= span B"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4781
    using convex_hull_subset_span[of "insert 0 B"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4782
hence "span (convex hull insert 0 B) <= span B"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4783
    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
  4784
hence *: "span (convex hull insert 0 B) = span B"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4785
    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
  4786
hence "span (convex hull insert 0 B) = span S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4787
    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
  4788
moreover have "0 : affine hull (convex hull insert 0 B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4789
    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
  4790
ultimately have **: "affine hull (convex hull insert 0 B) = affine hull S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4791
    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
  4792
    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
  4793
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
  4794
       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
  4795
    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
  4796
hence "bounded_linear f" using linear_conv_bounded_linear by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4797
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
  4798
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
  4799
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
  4800
   using convex_hull_linear_image[of f "(insert 0 d)"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4801
   convex_hull_linear_image[of f "(insert 0 B)"] `bounded_linear f` by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4802
moreover have "rel_interior (f ` (convex hull insert 0 B)) =
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4803
   f ` rel_interior (convex hull insert 0 B)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4804
   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
  4805
   using `bounded_linear f` fd * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4806
ultimately have "rel_interior (convex hull insert 0 B) ~= {}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4807
   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
  4808
moreover have "convex hull (insert 0 B) <= S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4809
   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
  4810
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
  4811
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4812
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4813
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4814
lemma rel_interior_convex_nonempty:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4815
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4816
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4817
shows "rel_interior S = {} <-> S = {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4818
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4819
{ assume "S ~= {}" from this obtain a where "a : S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4820
  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
  4821
  hence "rel_interior (op + (-a) ` S) ~= {}"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4822
    using rel_interior_convex_nonempty_aux[of "op + (-a) ` S"]
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4823
          convex_translation[of S "-a"] assms by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4824
  hence "rel_interior S ~= {}" using rel_interior_translation by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4825
} from this show ?thesis using rel_interior_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4826
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4827
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4828
lemma convex_rel_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4829
fixes S :: "(_::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4830
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4831
shows "convex (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4832
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4833
{ fix "x" "y" "u"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4834
  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
  4835
  hence "x:S" using rel_interior_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4836
  have "x - u *\<^sub>R (x-y) : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4837
  proof(cases "0=u")
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4838
     case False hence "0<u" using assm by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4839
        thus ?thesis
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4840
        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
  4841
     next
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4842
     case True thus ?thesis using assm by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4843
  qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4844
  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
  4845
} from this show ?thesis unfolding convex_alt by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4846
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4847
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4848
lemma convex_closure_rel_interior:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4849
fixes S :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4850
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4851
shows "closure(rel_interior S) = closure S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4852
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4853
have h1: "closure(rel_interior S) <= closure S"
44522
2f7e9d890efe rename subset_{interior,closure} to {interior,closure}_mono;
huffman
parents: 44519
diff changeset
  4854
   using closure_mono[of "rel_interior S" S] rel_interior_subset[of S] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4855
{ 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
  4856
    using rel_interior_convex_nonempty assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4857
  { fix x assume x_def: "x : closure S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4858
    { 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
  4859
    moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4860
    { assume "x ~= a"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4861
       { fix e :: real assume e_def: "e>0"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4862
         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
  4863
            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
  4864
         hence *: "x - e1 *\<^sub>R (x - a) : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4865
            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
  4866
         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
  4867
            apply (rule_tac x="x - e1 *\<^sub>R (x - a)" in exI)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4868
            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
  4869
      } hence "x islimpt rel_interior S" unfolding islimpt_approachable_le by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4870
      hence "x : closure(rel_interior S)" unfolding closure_def by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4871
    } ultimately have "x : closure(rel_interior S)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4872
  } hence ?thesis using h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4873
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4874
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4875
{ assume "S = {}" hence "rel_interior S = {}" using rel_interior_empty by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4876
  hence "closure(rel_interior S) = {}" using closure_empty by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4877
  hence ?thesis using `S={}` by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4878
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4879
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4880
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4881
lemma rel_interior_same_affine_hull:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4882
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4883
  assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4884
  shows "affine hull (rel_interior S) = affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4885
by (metis assms closure_same_affine_hull convex_closure_rel_interior)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4886
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4887
lemma rel_interior_aff_dim:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4888
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4889
  assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4890
  shows "aff_dim (rel_interior S) = aff_dim S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4891
by (metis aff_dim_affine_hull2 assms rel_interior_same_affine_hull)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4892
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4893
lemma rel_interior_rel_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4894
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4895
  assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4896
  shows "rel_interior (rel_interior S) = rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4897
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4898
have "openin (subtopology euclidean (affine hull (rel_interior S))) (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4899
  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
  4900
from this show ?thesis using rel_interior_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4901
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4902
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4903
lemma rel_interior_rel_open:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4904
  fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4905
  assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4906
  shows "rel_open (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4907
unfolding rel_open_def using rel_interior_rel_interior assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4908
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4909
lemma convex_rel_interior_closure_aux:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4910
  fixes x y z :: "_::euclidean_space"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4911
  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
  4912
  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
  4913
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4914
def e == "a/(a+b)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4915
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
  4916
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
  4917
   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
  4918
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
  4919
   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
  4920
finally have "z = y - e *\<^sub>R (y-x)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4921
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
  4922
moreover have "e<=1" using e_def assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4923
ultimately show ?thesis using that[of e] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4924
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4925
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4926
lemma convex_rel_interior_closure:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4927
  fixes S :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4928
  assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4929
  shows "rel_interior (closure S) = rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4930
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4931
{ assume "S={}" hence ?thesis using assms rel_interior_convex_nonempty by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4932
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4933
{ assume "S ~= {}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4934
  have "rel_interior (closure S) >= rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4935
    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
  4936
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4937
  { fix z assume z_def: "z : rel_interior (closure S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4938
    obtain x where x_def: "x : rel_interior S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4939
      using `S ~= {}` assms rel_interior_convex_nonempty by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4940
    { 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
  4941
    moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4942
    { assume "x ~= z"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4943
      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
  4944
        using z_def rel_interior_cball[of "closure S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4945
      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
  4946
      def y == "z + (e/norm(z-x)) *\<^sub>R (z-x)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4947
      have yball: "y : cball z e"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4948
        using mem_cball y_def dist_norm[of z y] e_def by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4949
      have "x : affine hull closure S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4950
        using x_def rel_interior_subset_closure hull_inc[of x "closure S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4951
      moreover have "z : affine hull closure S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4952
        using z_def rel_interior_subset hull_subset[of "closure S"] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4953
      ultimately have "y : affine hull closure S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4954
        using y_def affine_affine_hull[of "closure S"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4955
          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
  4956
      hence "y : closure S" using e_def yball by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4957
      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
  4958
        using y_def by (simp add: algebra_simps)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4959
      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
  4960
        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
  4961
          by (auto simp add: algebra_simps)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4962
      hence "z : rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4963
        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
  4964
    } ultimately have "z : rel_interior S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4965
  } ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4966
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4967
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4968
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4969
lemma convex_interior_closure:
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4970
fixes S :: "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4971
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4972
shows "interior (closure S) = interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4973
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
  4974
      convex_rel_interior_closure[of S] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4975
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4976
lemma closure_eq_rel_interior_eq:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4977
fixes S1 S2 ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4978
assumes "convex S1" "convex S2"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4979
shows "(closure S1 = closure S2) <-> (rel_interior S1 = rel_interior S2)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4980
 by (metis convex_rel_interior_closure convex_closure_rel_interior assms)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4981
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4982
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4983
lemma closure_eq_between:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4984
fixes S1 S2 ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4985
assumes "convex S1" "convex S2"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4986
shows "(closure S1 = closure S2) <->
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4987
      ((rel_interior S1 <= S2) & (S2 <= closure S1))" (is "?A <-> ?B")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4988
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4989
have "?A --> ?B" by (metis assms closure_subset convex_rel_interior_closure rel_interior_subset)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4990
moreover have "?B --> (closure S1 <= closure S2)"
44522
2f7e9d890efe rename subset_{interior,closure} to {interior,closure}_mono;
huffman
parents: 44519
diff changeset
  4991
     by (metis assms(1) convex_closure_rel_interior closure_mono)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4992
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
  4993
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4994
qed
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 open_inter_closure_rel_interior:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  4997
fixes S A ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4998
assumes "convex S" "open A"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  4999
shows "((A Int closure S) = {}) <-> ((A Int rel_interior S) = {})"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5000
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
  5001
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5002
definition "rel_frontier S = closure S - rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5003
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5004
lemma closed_affine_hull: "closed (affine hull ((S :: ('n::euclidean_space) set)))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5005
by (metis affine_affine_hull affine_closed)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5006
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5007
lemma closed_rel_frontier: "closed(rel_frontier (S :: ('n::euclidean_space) set))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5008
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5009
have *: "closedin (subtopology euclidean (affine hull S)) (closure S - rel_interior S)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5010
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
  5011
  closure_affine_hull[of S] opein_rel_interior[of S] by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5012
show ?thesis apply (rule closedin_closed_trans[of "affine hull S" "rel_frontier S"])
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5013
  unfolding rel_frontier_def using * closed_affine_hull by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5014
qed
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5015
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5016
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5017
lemma convex_rel_frontier_aff_dim:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5018
fixes S1 S2 ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5019
assumes "convex S1" "convex S2" "S2 ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5020
assumes "S1 <= rel_frontier S2"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5021
shows "aff_dim S1 < aff_dim S2"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5022
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5023
have "S1 <= closure S2" using assms unfolding rel_frontier_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5024
hence *: "affine hull S1 <= affine hull S2"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5025
   using hull_mono[of "S1" "closure S2"] closure_same_affine_hull[of S2] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5026
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
  5027
    aff_dim_subset[of "affine hull S1" "affine hull S2"] 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 eq: "aff_dim S1 = aff_dim S2"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5030
  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
  5031
  have **: "affine hull S1 = affine hull S2"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5032
     apply (rule affine_dim_equal) using * affine_affine_hull apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5033
     using `S1 ~= {}` hull_subset[of S1] apply auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5034
     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
  5035
  obtain a where a_def: "a : rel_interior S1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5036
     using  `S1 ~= {}` rel_interior_convex_nonempty assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5037
  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
  5038
     using mem_rel_interior[of a S1] a_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5039
  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
  5040
  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
  5041
     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
  5042
  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
  5043
  hence "b : S1" using T_def b_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5044
  hence False using b_def assms unfolding rel_frontier_def by auto
44821
a92f65e174cf avoid using legacy theorem names
huffman
parents: 44647
diff changeset
  5045
} ultimately show ?thesis using less_le by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5046
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5047
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5048
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5049
lemma convex_rel_interior_if:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5050
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5051
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5052
assumes "z : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5053
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
  5054
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5055
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
  5056
    using mem_rel_interior_cball[of z S] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5057
{ fix x assume x_def: "x:affine hull S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5058
  { assume "x ~= z"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5059
    def m == "1+e1/norm(x-z)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5060
    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
  5061
    { fix e assume e_def: "e>1 & e<=m"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5062
      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
  5063
      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
  5064
         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
  5065
      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
  5066
      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
  5067
      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
  5068
      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
  5069
      also have "...=e1" using `x ~= z` e1_def by simp
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5070
      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
  5071
      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
  5072
         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
  5073
      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
  5074
    } 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
  5075
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5076
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5077
  { 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
  5078
    { fix e assume e_def: "e>1 & e<=m"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5079
      hence "(1-e)*\<^sub>R x+ e *\<^sub>R z : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5080
        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
  5081
      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
  5082
    } 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
  5083
  } 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
  5084
} from this show ?thesis by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5085
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5086
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5087
lemma convex_rel_interior_if2:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5088
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5089
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5090
assumes "z : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5091
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
  5092
using convex_rel_interior_if[of S z] assms by auto
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 convex_rel_interior_only_if:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5095
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5096
assumes "convex S" "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5097
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
  5098
shows "z : rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5099
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5100
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
  5101
hence "x:S" using rel_interior_subset by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5102
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
  5103
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
  5104
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
  5105
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
  5106
from this show ?thesis
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5107
    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
  5108
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5109
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5110
lemma convex_rel_interior_iff:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5111
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5112
assumes "convex S" "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5113
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
  5114
using assms hull_subset[of S "affine"]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5115
      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
  5116
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5117
lemma convex_rel_interior_iff2:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5118
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5119
assumes "convex S" "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5120
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
  5121
using assms hull_subset[of S]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5122
      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
  5123
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5124
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5125
lemma convex_interior_iff:
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5126
fixes S ::  "('n::euclidean_space) set"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5127
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5128
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
  5129
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5130
{ assume a: "~(aff_dim S = int DIM('n))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5131
  { assume "z : interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5132
    hence False using a interior_rel_interior_gen[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5133
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5134
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5135
  { 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
  5136
    { 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
  5137
      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
  5138
      def x1 == "z+ e1 *\<^sub>R (x-z)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5139
         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
  5140
      def x2 == "z+ e2 *\<^sub>R (z-x)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5141
         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
  5142
      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
  5143
      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
  5144
         using x1_def x2_def apply (auto simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5145
         using scaleR_left_distrib[of "e1/(e1+e2)" "e2/(e1+e2)" z] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5146
      hence z: "z : affine hull S"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5147
         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
  5148
         x1 x2 affine_affine_hull[of S] * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5149
      have "x1-x2 = (e1+e2) *\<^sub>R (x-z)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5150
         using x1_def x2_def by (auto simp add: algebra_simps)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5151
      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
  5152
      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
  5153
          x1 x2 z affine_affine_hull[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5154
    } hence "affine hull S = UNIV" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5155
    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
  5156
    hence False using a by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5157
  } ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5158
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5159
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5160
{ assume a: "aff_dim S = int DIM('n)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5161
  hence "S ~= {}" using aff_dim_empty[of S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5162
  have *: "affine hull S=UNIV" using a affine_hull_univ by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5163
  { assume "z : interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5164
    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
  5165
    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
  5166
      using convex_rel_interior_iff2[of S z] assms `S~={}` * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5167
    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
  5168
      using **[rule_format, of "z-x"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5169
    def e == "e1 - 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5170
    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
  5171
    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
  5172
    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
  5173
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5174
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5175
  { 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
  5176
    { 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
  5177
         using r[rule_format, of "z-x"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5178
      def e == "e1 + 1"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5179
      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
  5180
      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
  5181
      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
  5182
    }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5183
    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
  5184
    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
  5185
  } ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5186
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5187
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5188
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  5189
subsubsection {* Relative interior and closure under common operations *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5190
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5191
lemma rel_interior_inter_aux: "Inter {rel_interior S |S. S : I} <= Inter I"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5192
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5193
{ fix y assume "y : Inter {rel_interior S |S. S : I}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5194
  hence y_def: "!S : I. y : rel_interior S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5195
  { 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
  5196
  hence "y : Inter I" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5197
} thus ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5198
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5199
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5200
lemma closure_inter: "closure (Inter I) <= Inter {closure S |S. S : I}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5201
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5202
{ 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
  5203
  { 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
  5204
  hence "y : Inter {closure S |S. S : I}" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5205
} 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
  5206
moreover have "closed (Inter {closure S |S. S : I})"
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  5207
  unfolding closed_Inter closed_closure by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5208
ultimately show ?thesis using closure_hull[of "Inter I"]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5209
  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
  5210
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5211
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5212
lemma convex_closure_rel_interior_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5213
assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5214
assumes "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5215
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
  5216
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5217
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
  5218
{ 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
  5219
  { assume "y = x"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5220
    hence "y : closure (Inter {rel_interior S |S. S : I})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5221
       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
  5222
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5223
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5224
  { assume "y ~= x"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5225
    { fix e :: real assume e_def: "0 < e"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5226
      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
  5227
        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
  5228
      def z == "y - e1 *\<^sub>R (y - x)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5229
      { fix S assume "S : I"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5230
        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
  5231
           assms x_def y_def e1_def z_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5232
      } hence *: "z : Inter {rel_interior S |S. S : I}" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5233
      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
  5234
           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
  5235
    } 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
  5236
    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
  5237
  } 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
  5238
} from this show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5239
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5240
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5241
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5242
lemma convex_closure_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5243
assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5244
assumes "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5245
shows "closure (Inter I) = Inter {closure S |S. S : I}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5246
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5247
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
  5248
  using convex_closure_rel_interior_inter assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5249
moreover have "closure (Inter {rel_interior S |S. S : I}) <= closure (Inter I)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5250
    using rel_interior_inter_aux
44522
2f7e9d890efe rename subset_{interior,closure} to {interior,closure}_mono;
huffman
parents: 44519
diff changeset
  5251
          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
  5252
ultimately show ?thesis using closure_inter[of I] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5253
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5254
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5255
lemma convex_inter_rel_interior_same_closure:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5256
assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5257
assumes "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5258
shows "closure (Inter {rel_interior S |S. S : I}) = closure (Inter I)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5259
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5260
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
  5261
  using convex_closure_rel_interior_inter assms by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5262
moreover have "closure (Inter {rel_interior S |S. S : I}) <= closure (Inter I)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5263
    using rel_interior_inter_aux
44522
2f7e9d890efe rename subset_{interior,closure} to {interior,closure}_mono;
huffman
parents: 44519
diff changeset
  5264
          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
  5265
ultimately show ?thesis using closure_inter[of I] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5266
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5267
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5268
lemma convex_rel_interior_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5269
assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5270
assumes "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5271
shows "rel_interior (Inter I) <= Inter {rel_interior S |S. S : I}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5272
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5273
have "convex(Inter I)" using assms convex_Inter by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5274
moreover have "convex(Inter {rel_interior S |S. S : I})" apply (rule convex_Inter)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5275
   using assms convex_rel_interior by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5276
ultimately have "rel_interior (Inter {rel_interior S |S. S : I}) = rel_interior (Inter I)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5277
   using convex_inter_rel_interior_same_closure assms
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5278
   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
  5279
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
  5280
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5281
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5282
lemma convex_rel_interior_finite_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5283
assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5284
assumes "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5285
assumes "finite I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5286
shows "rel_interior (Inter I) = Inter {rel_interior S |S. S : I}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5287
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5288
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
  5289
have "convex (Inter I)" using convex_Inter assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5290
{ assume "I={}" hence ?thesis using Inter_empty rel_interior_univ2 by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5291
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5292
{ assume "I ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5293
{ 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
  5294
  { fix x assume x_def: "x : Inter I"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5295
    { 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
  5296
      (*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
  5297
      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
  5298
         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
  5299
    } 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
  5300
         (!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
  5301
    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
  5302
    have "e : (mS ` I)" using e_def assms `I ~= {}` by simp
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5303
    hence "e>(1 :: real)" using mS_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5304
    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
  5305
    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
  5306
  } 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
  5307
       `Inter I ~= {}` `convex (Inter I)` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5308
} 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
  5309
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5310
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5311
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5312
lemma convex_closure_inter_two:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5313
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5314
assumes "convex S" "convex T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5315
assumes "(rel_interior S) Int (rel_interior T) ~= {}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5316
shows "closure (S Int T) = (closure S) Int (closure T)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5317
using convex_closure_inter[of "{S,T}"] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5318
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5319
lemma convex_rel_interior_inter_two:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5320
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5321
assumes "convex S" "convex T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5322
assumes "(rel_interior S) Int (rel_interior T) ~= {}"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5323
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
  5324
using convex_rel_interior_finite_inter[of "{S,T}"] assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5325
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5326
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5327
lemma convex_affine_closure_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5328
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5329
assumes "convex S" "affine T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5330
assumes "(rel_interior S) Int T ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5331
shows "closure (S Int T) = (closure S) Int T"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5332
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5333
have "affine hull T = T" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5334
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
  5335
moreover have "closure T = T" using assms affine_closed[of T] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5336
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
  5337
qed
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5338
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5339
lemma convex_affine_rel_interior_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5340
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5341
assumes "convex S" "affine T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5342
assumes "(rel_interior S) Int T ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5343
shows "rel_interior (S Int T) = (rel_interior S) Int T"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5344
proof-
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5345
have "affine hull T = T" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5346
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
  5347
moreover have "closure T = T" using assms affine_closed[of T] by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5348
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
  5349
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5350
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5351
lemma subset_rel_interior_convex:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5352
fixes S T :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5353
assumes "convex S" "convex T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5354
assumes "S <= closure T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5355
assumes "~(S <= rel_frontier T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5356
shows "rel_interior S <= rel_interior T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5357
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5358
have *: "S Int closure T = S" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5359
have "~(rel_interior S <= rel_frontier T)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5360
     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
  5361
     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
  5362
hence "(rel_interior S) Int (rel_interior (closure T)) ~= {}"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5363
     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
  5364
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
  5365
     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
  5366
also have "...=rel_interior (S)" using * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5367
finally show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5368
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5369
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5370
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5371
lemma rel_interior_convex_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5372
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5373
assumes "linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5374
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5375
shows "f ` (rel_interior S) = rel_interior (f ` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5376
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5377
{ 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
  5378
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5379
{ assume "S ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5380
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
  5381
have "f ` S <= f ` (closure S)" unfolding image_mono using closure_subset by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5382
also have "... = f ` (closure (rel_interior S))" using convex_closure_rel_interior assms by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5383
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
  5384
finally have "closure (f ` S) = closure (f ` rel_interior S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5385
   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
  5386
         closure_mono[of "f ` rel_interior S" "f ` S"] * by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5387
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
  5388
   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
  5389
   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
  5390
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
  5391
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5392
{ fix z assume z_def: "z : f ` rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5393
  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
  5394
  { fix x assume "x : f ` S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5395
    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
  5396
    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
  5397
       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
  5398
    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
  5399
        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
  5400
    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
  5401
        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
  5402
    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
  5403
  } 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
  5404
       `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
  5405
} ultimately have ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5406
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5407
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5408
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5409
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5410
lemma convex_linear_preimage:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5411
  assumes c:"convex S" and l:"bounded_linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5412
  shows "convex(f -` S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5413
proof(auto simp add: convex_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5414
  interpret f: bounded_linear f by fact
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5415
  fix x y assume xy:"f x : S" "f y : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5416
  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
  5417
  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
  5418
    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
  5419
      c[unfolded convex_def] xy uv by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5420
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5421
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5422
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5423
lemma rel_interior_convex_linear_preimage:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5424
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5425
assumes "linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5426
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5427
assumes "f -` (rel_interior S) ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5428
shows "rel_interior (f -` S) = f -` (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5429
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5430
have "S ~= {}" using assms rel_interior_empty by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5431
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
  5432
hence "S Int (range f) ~= {}" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5433
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
  5434
hence "convex (S Int (range f))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5435
  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
  5436
{ fix z assume "z : f -` (rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5437
  hence z_def: "f z : rel_interior S" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5438
  { 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
  5439
    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
  5440
      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
  5441
    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
  5442
      using `linear f` by (simp add: linear_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5443
    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
  5444
  } hence "z : rel_interior (f -` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5445
       using convex_rel_interior_iff[of "f -` S" z] conv nonemp by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5446
}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5447
moreover
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5448
{ fix z assume z_def: "z : rel_interior (f -` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5449
  { fix x assume x_def: "x: S Int (range f)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5450
    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
  5451
    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
  5452
      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
  5453
    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
  5454
      using `linear f` y_def by (simp add: linear_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5455
    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
  5456
      using e_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5457
  } 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
  5458
    `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
  5459
  moreover have "affine (range f)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5460
    by (metis assms(1) subspace_UNIV subspace_imp_affine subspace_linear_image)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5461
  ultimately have "f z : rel_interior S"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5462
    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
  5463
  hence "z : f -` (rel_interior S)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5464
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5465
ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5466
qed
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5467
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5468
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5469
lemma convex_direct_sum:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5470
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5471
fixes T :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5472
assumes "convex S" "convex T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5473
shows "convex (S <*> T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5474
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5475
{
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5476
fix x assume "x : S <*> T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5477
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
  5478
fix y assume "y : S <*> T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5479
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
  5480
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
  5481
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
  5482
moreover have "u *\<^sub>R xs + v *\<^sub>R ys : S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5483
   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
  5484
moreover have "u *\<^sub>R xt + v *\<^sub>R yt : T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5485
   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
  5486
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
  5487
} from this show ?thesis unfolding convex_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5488
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5489
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5490
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5491
lemma convex_hull_direct_sum:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5492
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5493
fixes T :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5494
shows "convex hull (S <*> T) = (convex hull S) <*> (convex hull T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5495
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5496
{ fix x assume "x : (convex hull S) <*> (convex hull T)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5497
  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
  5498
  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
  5499
     & (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
  5500
  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
  5501
     & (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
  5502
  def I == "(sI <*> tI)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5503
  def u == "(%i. (su (fst i))*(tu(snd i)))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5504
  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
  5505
     (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
  5506
     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
  5507
     by (simp add: split_def scaleR_prod_def setsum_cartesian_product)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5508
  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
  5509
     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
  5510
     by (simp add: mult_commute scaleR_right.setsum)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5511
  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
  5512
  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
  5513
  also have "...=xs" using t by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5514
  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
  5515
  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
  5516
     (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
  5517
     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
  5518
     by (simp add: split_def scaleR_prod_def setsum_cartesian_product)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5519
  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
  5520
     by (simp add: mult_commute scaleR_right.setsum)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5521
  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
  5522
  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
  5523
  also have "...=xt" using s by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5524
  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
  5525
  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
  5526
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5527
  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
  5528
  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
  5529
  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
  5530
     s t setsum_product[of su sI tu tI] by (auto simp add: split_def)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5531
  ultimately have "x : convex hull (S <*> T)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5532
     apply (subst convex_hull_explicit[of "S <*> T"]) apply rule
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5533
     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
  5534
     using I_def u_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5535
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5536
hence "convex hull (S <*> T) >= (convex hull S) <*> (convex hull T)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5537
moreover have "convex ((convex hull S) <*> (convex hull T))"
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  5538
   by (simp add: convex_direct_sum convex_convex_hull)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5539
ultimately show ?thesis
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5540
   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
  5541
         hull_subset[of S convex] hull_subset[of T convex] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5542
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5543
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5544
lemma rel_interior_direct_sum:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5545
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5546
fixes T :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5547
assumes "convex S" "convex T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5548
shows "rel_interior (S <*> T) = rel_interior S <*> rel_interior T"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5549
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5550
{ assume "S={}" hence ?thesis apply auto using rel_interior_empty by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5551
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5552
{ assume "T={}" hence ?thesis apply auto using rel_interior_empty by auto }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5553
moreover {
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5554
assume "S ~={}" "T ~={}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5555
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
  5556
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
  5557
hence "rel_interior ((fst :: 'n * 'm => 'n) -` S) = fst -` rel_interior S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5558
  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
  5559
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
  5560
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
  5561
hence "rel_interior ((snd :: 'n * 'm => 'm) -` T) = snd -` rel_interior T"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5562
  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
  5563
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
  5564
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
  5565
  = rel_interior S <*> rel_interior T" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5566
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
  5567
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
  5568
also have "...=rel_interior (S <*> (UNIV :: 'm set)) Int rel_interior ((UNIV :: 'n set) <*> T)"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5569
   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
  5570
   using * ri assms convex_direct_sum by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5571
finally have ?thesis using * by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5572
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5573
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5574
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5575
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5576
lemma rel_interior_scaleR:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5577
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5578
assumes "c ~= 0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5579
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
  5580
using rel_interior_injective_linear_image[of "(op *\<^sub>R c)" S]
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5581
      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
  5582
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5583
lemma rel_interior_convex_scaleR:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5584
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5585
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5586
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
  5587
by (metis assms linear_scaleR rel_interior_convex_linear_image)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5588
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5589
lemma convex_rel_open_scaleR:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5590
fixes S :: "('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5591
assumes "convex S" "rel_open S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5592
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
  5593
by (metis assms convex_scaling rel_interior_convex_scaleR rel_open_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5594
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5595
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5596
lemma convex_rel_open_finite_inter:
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5597
assumes "!S : I. (convex (S :: ('n::euclidean_space) set) & rel_open S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5598
assumes "finite I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5599
shows "convex (Inter I) & rel_open (Inter I)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5600
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5601
{ assume "Inter {rel_interior S |S. S : I} = {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5602
  hence "Inter I = {}" using assms unfolding rel_open_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5603
  hence ?thesis unfolding rel_open_def using rel_interior_empty by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5604
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5605
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5606
{ assume "Inter {rel_interior S |S. S : I} ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5607
  hence "rel_open (Inter I)" using assms unfolding rel_open_def
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5608
    using convex_rel_interior_finite_inter[of I] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5609
  hence ?thesis using convex_Inter assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5610
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5611
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5612
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5613
lemma convex_rel_open_linear_image:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5614
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5615
assumes "linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5616
assumes "convex S" "rel_open S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5617
shows "convex (f ` S) & rel_open (f ` S)"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5618
by (metis assms convex_linear_image rel_interior_convex_linear_image
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5619
   linear_conv_bounded_linear rel_open_def)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5620
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5621
lemma convex_rel_open_linear_preimage:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5622
fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5623
assumes "linear f"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5624
assumes "convex S" "rel_open S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5625
shows "convex (f -` S) & rel_open (f -` S)"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5626
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5627
{ assume "f -` (rel_interior S) = {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5628
  hence "f -` S = {}" using assms unfolding rel_open_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5629
  hence ?thesis unfolding rel_open_def using rel_interior_empty by auto
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
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5632
{ assume "f -` (rel_interior S) ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5633
  hence "rel_open (f -` S)" using assms unfolding rel_open_def
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5634
    using rel_interior_convex_linear_preimage[of f S] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5635
  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
  5636
} ultimately show ?thesis by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5637
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5638
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5639
lemma rel_interior_projection:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5640
fixes S :: "('m::euclidean_space*'n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5641
fixes f :: "'m::euclidean_space => ('n::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5642
assumes "convex S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5643
assumes "f = (%y. {z. (y,z) : S})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5644
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
  5645
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5646
{ 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
  5647
  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
  5648
  from this obtain x where "x : S & y = fst x" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5649
  hence "y : fst ` S" unfolding image_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5650
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5651
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
  5652
hence h1: "fst ` rel_interior S = rel_interior {y. (f y ~= {})}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5653
   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
  5654
{ fix y assume "y : rel_interior {y. (f y ~= {})}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5655
  hence "y : fst ` rel_interior S" using h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5656
  hence *: "rel_interior S Int fst -` {y} ~= {}" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5657
  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
  5658
  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
  5659
    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
  5660
  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
  5661
  { fix x assume "x : f y"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5662
    hence "(y,x) : S Int (fst -` {y})" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5663
    moreover have "x = snd (y,x)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5664
    ultimately have "x : snd ` (S Int fst -` {y})" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5665
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5666
  hence "snd ` (S Int fst -` {y}) = f y" using assms by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5667
  hence ***: "rel_interior (f y) = snd ` rel_interior (S Int fst -` {y})"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5668
    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
  5669
  { fix z assume "z : rel_interior (f y)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5670
    hence "z : snd ` rel_interior (S Int fst -` {y})" using *** by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5671
    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
  5672
    ultimately have "(y,z) : rel_interior (S Int fst -` {y})" by force
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5673
    hence "(y,z) : rel_interior S" using ** by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5674
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5675
  moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5676
  { fix z assume "(y,z) : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5677
    hence "(y,z) : rel_interior (S Int fst -` {y})" using ** by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5678
    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
  5679
    hence "z : rel_interior (f y)" using *** by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5680
  }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5681
  ultimately have "!!z. (y,z) : rel_interior S <-> z : rel_interior (f y)" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5682
}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5683
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
  5684
  by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5685
{ fix y z assume asm: "(y, z) : rel_interior S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5686
  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
  5687
  hence "y : rel_interior {t. f t ~= {}}" using h1 by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5688
  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
  5689
} from this show ?thesis using h2 by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5690
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5691
44467
13e72da170fc change some subsection headings to subsubsection
huffman
parents: 44466
diff changeset
  5692
subsubsection {* Relative interior of convex cone *}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5693
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5694
lemma cone_rel_interior:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5695
fixes S :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5696
assumes "cone S"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5697
shows "cone ({0} Un (rel_interior S))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5698
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5699
{ assume "S = {}" hence ?thesis by (simp add: rel_interior_empty cone_0) }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5700
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5701
{ 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
  5702
  hence *: "0:({0} Un (rel_interior S)) &
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5703
           (!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
  5704
           by (auto simp add: rel_interior_scaleR)
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5705
  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
  5706
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5707
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5708
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5709
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5710
lemma rel_interior_convex_cone_aux:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5711
fixes S :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5712
assumes "convex S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5713
shows "(c,x) : rel_interior (cone hull ({(1 :: real)} <*> S)) <->
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5714
       c>0 & x : ((op *\<^sub>R c) ` (rel_interior S))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5715
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5716
{ 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
  5717
moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5718
{ assume "S ~= {}" from this obtain s where "s : S" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5719
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
  5720
   assms convex_singleton[of "1 :: real"] by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5721
def f == "(%y. {z. (y,z) : cone hull ({(1 :: real)} <*> S)})"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5722
hence *: "(c, x) : rel_interior (cone hull ({(1 :: real)} <*> S)) =
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5723
      (c : rel_interior {y. f y ~= {}} & x : rel_interior (f c))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5724
  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
  5725
  using convex_cone_hull[of "{(1 :: real)} <*> S"] conv by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5726
{ fix y assume "(y :: real)>=0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5727
  hence "y *\<^sub>R (1,s) : cone hull ({(1 :: real)} <*> S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5728
     using cone_hull_expl[of "{(1 :: real)} <*> S"] `s:S` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5729
  hence "f y ~= {}" using f_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5730
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5731
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
  5732
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
  5733
{ fix c assume "c>(0 :: real)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5734
  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
  5735
  hence "rel_interior (f c)= (op *\<^sub>R c ` rel_interior S)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5736
     using rel_interior_convex_scaleR[of S c] assms 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 ?thesis using * ** by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5739
} ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5740
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5741
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5742
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5743
lemma rel_interior_convex_cone:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5744
fixes S :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5745
assumes "convex S"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5746
shows "rel_interior (cone hull ({(1 :: real)} <*> S)) =
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5747
       {(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
  5748
(is "?lhs=?rhs")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5749
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5750
{ fix z assume "z:?lhs"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5751
  have *: "z=(fst z,snd z)" by auto
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5752
  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
  5753
     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
  5754
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5755
moreover
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5756
{ fix z assume "z:?rhs" hence "z:?lhs"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5757
  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
  5758
}
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5759
ultimately show ?thesis by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5760
qed
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
lemma convex_hull_finite_union:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5763
assumes "finite I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5764
assumes "!i:I. (convex (S i) & (S i) ~= {})"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5765
shows "convex hull (Union (S ` I)) =
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5766
       {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
  5767
  (is "?lhs = ?rhs")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5768
proof-
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5769
{ fix x assume "x : ?rhs"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5770
  from this obtain c s
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5771
    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
  5772
     "(!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
  5773
  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
  5774
  hence "x : ?lhs" unfolding *(1)[symmetric]
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5775
     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
  5776
     using * assms convex_convex_hull by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5777
} hence "?lhs >= ?rhs" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5778
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5779
{ fix i assume "i:I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5780
    from this assms have "EX p. p : S i" by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5781
}
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5782
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
  5783
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5784
{ fix i assume "i:I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5785
  { fix x assume "x : S i"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5786
    def c == "(%j. if (j=i) then (1::real) else 0)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5787
    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
  5788
    def s == "(%j. if (j=i) then x else p j)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5789
    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
  5790
    hence "x = setsum (%i. c i *\<^sub>R s i) I"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5791
       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
  5792
    hence "x : ?rhs" apply auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5793
      apply (rule_tac x="c" in exI)
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5794
      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
  5795
  } hence "?rhs >= S i" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5796
} hence *: "?rhs >= Union (S ` I)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5797
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5798
{ 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
  5799
  fix x y assume xy: "(x : ?rhs) & (y : ?rhs)"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5800
  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
  5801
     (!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
  5802
  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
  5803
     (!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
  5804
  def e == "(%i. u * (c i)+v * (d i))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5805
  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
  5806
  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
  5807
  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
  5808
  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
  5809
  def q == "(%i. if (e i = 0) then (p i)
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5810
                 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
  5811
  { fix i assume "i:I"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5812
    { 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
  5813
    moreover
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5814
    { assume "e i ~= 0"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5815
      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
  5816
         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
  5817
         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
  5818
    } ultimately have "q i : S i" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5819
  } hence qs: "!i:I. q i : S i" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5820
  { fix i assume "i:I"
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5821
    { assume "e i = 0"
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5822
      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
  5823
      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
  5824
      ultimately have "u * (c i) = 0 & v * (d i) = 0" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5825
      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
  5826
         using `e i = 0` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5827
    }
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5828
    moreover
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5829
    { assume "e i ~= 0"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5830
      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
  5831
         using q_def by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5832
      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
  5833
             = (e i) *\<^sub>R (q i)" by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5834
      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
  5835
         using `e i ~= 0` by (simp add: algebra_simps)
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5836
    } ultimately have
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5837
      "(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
  5838
  } hence *: "!i:I.
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5839
    (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
  5840
  have "u *\<^sub>R x + v *\<^sub>R y =
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5841
       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
  5842
          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
  5843
  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
  5844
  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
  5845
  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
  5846
} hence "convex ?rhs" unfolding convex_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5847
from this show ?thesis using `?lhs >= ?rhs` *
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5848
   hull_minimal[of "Union (S ` I)" "?rhs" "convex"] by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5849
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5850
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5851
lemma convex_hull_union_two:
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5852
fixes S T :: "('m::euclidean_space) set"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5853
assumes "convex S" "S ~= {}" "convex T" "T ~= {}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5854
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
  5855
  (is "?lhs = ?rhs")
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5856
proof-
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5857
def I == "{(1::nat),2}"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5858
def s == "(%i. (if i=(1::nat) then S else T))"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5859
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
  5860
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
  5861
moreover have "convex hull Union (s ` I) =
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5862
    {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
  5863
    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
  5864
moreover have
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5865
  "{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
  5866
  ?rhs"
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5867
  using s_def I_def by auto
49531
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5868
ultimately have "?lhs<=?rhs" by auto
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5869
{ fix x assume "x : ?rhs"
8d68162b7826 tuned whitespace;
wenzelm
parents: 49530
diff changeset
  5870
  from this obtain u v s t
40377
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5871
    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
  5872
  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
  5873
  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
  5874
} hence "?lhs >= ?rhs" by blast
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5875
from this show ?thesis using `?lhs<=?rhs` by auto
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5876
qed
0e5d48096f58 Extend convex analysis by Bogdan Grechuk
hoelzl
parents: 39302
diff changeset
  5877
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5878
subsection {* Convexity on direct sums *}
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5879
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5880
lemma closure_sum:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5881
  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
  5882
  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
  5883
proof-
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5884
  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
  5885
    by (simp add: set_plus_image)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5886
  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
  5887
    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
  5888
  also have "... \<subseteq> closure (S + T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5889
    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
  5890
    by (auto simp: set_plus_image)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5891
  finally show ?thesis
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5892
    by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5893
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5894
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5895
lemma convex_oplus:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5896
fixes S T :: "('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5897
assumes "convex S" "convex T"
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5898
shows "convex (S + T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5899
proof-
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5900
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
  5901
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
  5902
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5903
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5904
lemma convex_hull_sum:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5905
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
  5906
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
  5907
proof-
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5908
have "(convex hull S) + (convex hull T) =
40897
1eb1b2f9d062 adapt proofs to changed set_plus_image (cf. ee8d0548c148);
hoelzl
parents: 40887
diff changeset
  5909
      (%(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
  5910
   by (simp add: set_plus_image)
40897
1eb1b2f9d062 adapt proofs to changed set_plus_image (cf. ee8d0548c148);
hoelzl
parents: 40887
diff changeset
  5911
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
  5912
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
  5913
   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
  5914
finally show ?thesis by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5915
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5916
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5917
lemma rel_interior_sum:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5918
fixes S T :: "('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5919
assumes "convex S" "convex T"
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5920
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
  5921
proof-
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  5922
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
  5923
   by (simp add: set_plus_image)
40897
1eb1b2f9d062 adapt proofs to changed set_plus_image (cf. ee8d0548c148);
hoelzl
parents: 40887
diff changeset
  5924
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
  5925
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
  5926
   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
  5927
finally show ?thesis by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5928
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5929
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5930
lemma convex_sum_gen:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5931
  fixes S :: "'a \<Rightarrow> 'n::euclidean_space set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5932
  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
  5933
  shows "convex (setsum S I)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5934
proof cases
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5935
  assume "finite I" from this assms show ?thesis
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5936
    by induct (auto simp: convex_oplus)
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5937
qed auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5938
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5939
lemma convex_hull_sum_gen:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5940
fixes S :: "'a => ('n::euclidean_space) set"
47444
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  5941
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
  5942
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
  5943
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5944
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5945
lemma rel_interior_sum_gen:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5946
fixes S :: "'a => ('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5947
assumes "!i:I. (convex (S i))"
47444
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  5948
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
  5949
apply (subst setsum_set_cond_linear[of convex])
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5950
  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
  5951
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5952
lemma convex_rel_open_direct_sum:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5953
fixes S T :: "('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5954
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
  5955
shows "convex (S <*> T) & rel_open (S <*> T)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5956
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
  5957
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5958
lemma convex_rel_open_sum:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5959
fixes S T :: "('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5960
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
  5961
shows "convex (S + T) & rel_open (S + T)"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5962
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
  5963
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5964
lemma convex_hull_finite_union_cones:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5965
assumes "finite I" "I ~= {}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5966
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
  5967
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
  5968
  (is "?lhs = ?rhs")
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5969
proof-
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5970
{ fix x assume "x : ?lhs"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5971
  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
  5972
     (!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
  5973
     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
  5974
  def s == "(%i. c i *\<^sub>R xs i)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5975
  { fix i assume "i:I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5976
    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
  5977
  } hence "!i:I. s i : S i" by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5978
  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
  5979
  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
  5980
}
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5981
moreover
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5982
{ fix x assume "x : ?rhs"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5983
  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
  5984
     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
  5985
  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
  5986
  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
  5987
  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
  5988
  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
  5989
  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
  5990
  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
  5991
    using assms apply blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5992
    using assms apply blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5993
    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
  5994
} ultimately show ?thesis by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5995
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5996
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5997
lemma convex_hull_union_cones_two:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5998
fixes S T :: "('m::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  5999
assumes "convex S" "cone S" "S ~= {}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6000
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
  6001
shows "convex hull (S Un T) = S + T"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6002
proof-
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6003
def I == "{(1::nat),2}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6004
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
  6005
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
  6006
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
  6007
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
  6008
    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
  6009
moreover have
47445
69e96e5500df Set_Algebras: removed syntax \<oplus> and \<otimes>, in favour of plain + and *
krauss
parents: 47444
diff changeset
  6010
  "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
  6011
     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
  6012
ultimately show ?thesis by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6013
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6014
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6015
lemma rel_interior_convex_hull_union:
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6016
fixes S :: "'a => ('n::euclidean_space) set"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6017
assumes "finite I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6018
assumes "!i:I. convex (S i) & (S i) ~= {}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6019
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
  6020
       |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
  6021
(is "?lhs=?rhs")
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6022
proof-
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6023
{ 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
  6024
moreover
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6025
{ assume "I ~= {}"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6026
  def C0 == "convex hull (Union (S ` I))"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6027
  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
  6028
  def K0 == "cone hull ({(1 :: real)} <*> C0)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6029
  def K == "(%i. cone hull ({(1 :: real)} <*> (S i)))"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6030
  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
  6031
  { fix i assume "i:I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6032
    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
  6033
    using assms by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6034
  }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6035
  hence convK: "!i:I. convex (K i)" by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6036
  { fix i assume "i:I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6037
    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
  6038
  }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6039
  hence "K0 >= Union (K ` I)" by auto
44170
510ac30f44c0 make Multivariate_Analysis work with separate set type
huffman
parents: 44142
diff changeset
  6040
  moreover have "convex K0" unfolding K0_def
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6041
     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
  6042
     unfolding C0_def using convex_convex_hull by auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6043
  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
  6044
  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
  6045
  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
  6046
  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
  6047
  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
  6048
     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
  6049
  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
  6050
     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
  6051
  ultimately have "convex hull (Union (K ` I)) >= K0"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6052
     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
  6053
  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
  6054
  also have "...=setsum K I"
40887
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6055
     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
  6056
     using assms apply blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6057
     using `I ~= {}` apply blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6058
     unfolding K_def apply rule
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6059
     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
  6060
     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
  6061
  finally have "K0 = setsum K I" by auto
d21c95af2df7 removed "setsum_set", now subsumed by generic setsum
krauss
parents: 47108
diff changeset
  6062
  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
  6063
     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
  6064
  { fix x assume "x : ?lhs"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6065
    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
  6066
       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
  6067
    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
  6068
      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
  6069
    { fix i assume "i:I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6070
      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
  6071
      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
  6072
         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
  6073
    }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6074
    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
  6075
          & s i : rel_interior (S i))" by metis
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6076
    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
  6077
    hence "x : ?rhs" using k_def apply auto
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6078
       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
  6079
  }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6080
  moreover
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6081
  { fix x assume "x : ?rhs"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6082
    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
  6083
       (!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
  6084
    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
  6085
    { fix i assume "i:I"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6086
      hence "k i : rel_interior (K i)"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6087
         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
  6088
    }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6089
    hence "((1::real),x) : rel_interior K0"
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6090
       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
  6091
       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
  6092
    hence "x : ?lhs" using K0_def C0_def
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6093
       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
  6094
  }
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6095
  ultimately have ?thesis by blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6096
} ultimately show ?thesis by blast
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6097
qed
ee8d0548c148 Prove rel_interior_convex_hull_union (by Grechuck Bogdan).
hoelzl
parents: 40719
diff changeset
  6098
50104
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6099
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6100
lemma convex_le_Inf_differential:
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6101
  fixes f :: "real \<Rightarrow> real"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6102
  assumes "convex_on I f"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6103
  assumes "x \<in> interior I" "y \<in> I"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6104
  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
  6105
    (is "_ \<ge> _ + Inf (?F x) * (y - x)")
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6106
proof (cases rule: linorder_cases)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6107
  assume "x < y"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6108
  moreover
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6109
  have "open (interior I)" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6110
  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
  6111
  moreover def t \<equiv> "min (x + e / 2) ((x + y) / 2)"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6112
  ultimately have "x < t" "t < y" "t \<in> ball x e"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6113
    by (auto simp: dist_real_def field_simps split: split_min)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6114
  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
  6115
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6116
  have "open (interior I)" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6117
  from openE[OF this `x \<in> interior I`] guess e .
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6118
  moreover def K \<equiv> "x - e / 2"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6119
  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
  6120
  ultimately have "K \<in> I" "K < x" "x \<in> I"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6121
    using interior_subset[of I] `x \<in> interior I` by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6122
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6123
  have "Inf (?F x) \<le> (f x - f y) / (x - y)"
51475
ebf9d4fd00ba introduct the conditional_complete_lattice type class; generalize theorems about real Sup and Inf to it
hoelzl
parents: 50979
diff changeset
  6124
  proof (rule cInf_lower2)
50104
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6125
    show "(f x - f t) / (x - t) \<in> ?F x"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6126
      using `t \<in> I` `x < t` by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6127
    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
  6128
      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
  6129
  next
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6130
    fix y assume "y \<in> ?F x"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6131
    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
  6132
    show "(f K - f x) / (K - x) \<le> y" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6133
  qed
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6134
  then show ?thesis
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6135
    using `x < y` by (simp add: field_simps)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6136
next
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6137
  assume "y < x"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6138
  moreover
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6139
  have "open (interior I)" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6140
  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
  6141
  moreover def t \<equiv> "x + e / 2"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6142
  ultimately have "x < t" "t \<in> ball x e"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6143
    by (auto simp: dist_real_def field_simps)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6144
  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
  6145
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6146
  have "(f x - f y) / (x - y) \<le> Inf (?F x)"
51475
ebf9d4fd00ba introduct the conditional_complete_lattice type class; generalize theorems about real Sup and Inf to it
hoelzl
parents: 50979
diff changeset
  6147
  proof (rule cInf_greatest)
50104
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6148
    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
  6149
      using `y < x` by (auto simp: field_simps)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6150
    also
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6151
    fix z  assume "z \<in> ?F x"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6152
    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
  6153
    have "(f y - f x) / (y - x) \<le> z" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6154
    finally show "(f x - f y) / (x - y) \<le> z" .
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6155
  next
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6156
    have "open (interior I)" by auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6157
    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
  6158
    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
  6159
    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
  6160
    then show "?F x \<noteq> {}" by blast
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6161
  qed
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6162
  then show ?thesis
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6163
    using `y < x` by (simp add: field_simps)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6164
qed simp
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49962
diff changeset
  6165
33175
2083bde13ce1 distinguished session for multivariate analysis
himmelma
parents:
diff changeset
  6166
end