@@ -20,6 +20,7 @@ while the impact on writing code is minimal as `convex_hull 𝕜 s` is automatic
20
20
-/
21
21
22
22
open set
23
+ open_locale pointwise
23
24
24
25
variables {𝕜 E F : Type *}
25
26
@@ -46,15 +47,24 @@ lemma subset_convex_hull : s ⊆ convex_hull 𝕜 s := (convex_hull 𝕜).le_clo
46
47
47
48
lemma convex_convex_hull : convex 𝕜 (convex_hull 𝕜 s) := closure_operator.closure_mem_mk₃ s
48
49
49
- variables {𝕜 s} {t : set E}
50
+ lemma convex_hull_eq_Inter : convex_hull 𝕜 s = ⋂ (t : set E) (hst : s ⊆ t) (ht : convex 𝕜 t), t :=
51
+ rfl
52
+
53
+ variables {𝕜 s} {t : set E} {x : E}
54
+
55
+ lemma mem_convex_hull_iff : x ∈ convex_hull 𝕜 s ↔ ∀ t, s ⊆ t → convex 𝕜 t → x ∈ t :=
56
+ by simp_rw [convex_hull_eq_Inter, mem_Inter]
50
57
51
58
lemma convex_hull_min (hst : s ⊆ t) (ht : convex 𝕜 t) : convex_hull 𝕜 s ⊆ t :=
52
59
closure_operator.closure_le_mk₃_iff (show s ≤ t, from hst) ht
53
60
61
+ lemma convex.convex_hull_subset_iff (ht : convex 𝕜 t) : convex_hull 𝕜 s ⊆ t ↔ s ⊆ t :=
62
+ ⟨(subset_convex_hull _ _).trans, λ h, convex_hull_min h ht⟩
63
+
54
64
@[mono] lemma convex_hull_mono (hst : s ⊆ t) : convex_hull 𝕜 s ⊆ convex_hull 𝕜 t :=
55
65
(convex_hull 𝕜).monotone hst
56
66
57
- lemma convex.convex_hull_eq {s : set E} (hs : convex 𝕜 s) : convex_hull 𝕜 s = s :=
67
+ lemma convex.convex_hull_eq (hs : convex 𝕜 s) : convex_hull 𝕜 s = s :=
58
68
closure_operator.mem_mk₃_closed hs
59
69
60
70
@[simp] lemma convex_hull_univ : convex_hull 𝕜 (univ : set E) = univ :=
78
88
exact not_congr convex_hull_empty_iff,
79
89
end
80
90
91
+ alias convex_hull_nonempty_iff ↔ _ set.nonempty.convex_hull
92
+
93
+ attribute [protected] set.nonempty.convex_hull
94
+
81
95
@[simp]
82
96
lemma convex_hull_singleton {x : E} : convex_hull 𝕜 ({x} : set E) = {x} :=
83
97
(convex_singleton x).convex_hull_eq
@@ -95,21 +109,6 @@ begin
95
109
by { rintro (rfl : y = x), exact hx hy }⟩),
96
110
end
97
111
98
- lemma is_linear_map.image_convex_hull {f : E → F} (hf : is_linear_map 𝕜 f) :
99
- f '' (convex_hull 𝕜 s) = convex_hull 𝕜 (f '' s) :=
100
- begin
101
- apply set.subset.antisymm ,
102
- { rw set.image_subset_iff,
103
- exact convex_hull_min (set.image_subset_iff.1 $ subset_convex_hull 𝕜 $ f '' s)
104
- ((convex_convex_hull 𝕜 (f '' s)).is_linear_preimage hf) },
105
- { exact convex_hull_min (set.image_subset _ $ subset_convex_hull 𝕜 s)
106
- ((convex_convex_hull 𝕜 s).is_linear_image hf) }
107
- end
108
-
109
- lemma linear_map.image_convex_hull (f : E →ₗ[𝕜] F) :
110
- f '' (convex_hull 𝕜 s) = convex_hull 𝕜 (f '' s) :=
111
- f.is_linear.image_convex_hull
112
-
113
112
lemma is_linear_map.convex_hull_image {f : E → F} (hf : is_linear_map 𝕜 f) (s : set E) :
114
113
convex_hull 𝕜 (f '' s) = f '' convex_hull 𝕜 s :=
115
114
set.subset.antisymm (convex_hull_min (image_subset _ (subset_convex_hull 𝕜 s)) $
@@ -125,14 +124,22 @@ f.is_linear.convex_hull_image s
125
124
end add_comm_monoid
126
125
end ordered_semiring
127
126
127
+ section ordered_comm_semiring
128
+ variables [ordered_comm_semiring 𝕜] [add_comm_monoid E] [module 𝕜 E]
129
+
130
+ lemma convex_hull_smul (a : 𝕜) (s : set E) : convex_hull 𝕜 (a • s) = a • convex_hull 𝕜 s :=
131
+ (linear_map.lsmul _ _ a).convex_hull_image _
132
+
133
+ end ordered_comm_semiring
134
+
128
135
section ordered_ring
129
136
variables [ordered_ring 𝕜]
130
137
131
138
section add_comm_group
132
139
variables [add_comm_group E] [add_comm_group F] [module 𝕜 E] [module 𝕜 F] (s : set E)
133
140
134
141
lemma affine_map.image_convex_hull (f : E →ᵃ[𝕜] F) :
135
- f '' ( convex_hull 𝕜 s) = convex_hull 𝕜 (f '' s) :=
142
+ f '' convex_hull 𝕜 s = convex_hull 𝕜 (f '' s) :=
136
143
begin
137
144
apply set.subset.antisymm,
138
145
{ rw set.image_subset_iff,
@@ -153,6 +160,9 @@ begin
153
160
exact convex_hull_subset_affine_span s,
154
161
end
155
162
163
+ lemma convex_hull_neg (s : set E) : convex_hull 𝕜 (-s) = -convex_hull 𝕜 s :=
164
+ by { simp_rw ←image_neg, exact (affine_map.image_convex_hull _ $ -1 ).symm }
165
+
156
166
end add_comm_group
157
167
end ordered_ring
158
168
end convex_hull
0 commit comments