-
Notifications
You must be signed in to change notification settings - Fork 259
/
Star.lean
477 lines (365 loc) Β· 18.4 KB
/
Star.lean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
/-
Copyright (c) 2021 YaΓ«l Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: YaΓ«l Dillies
-/
import Mathlib.Algebra.Module.LinearMap.Prod
import Mathlib.Algebra.Order.Group.Instances
import Mathlib.Analysis.Convex.Segment
import Mathlib.Tactic.GCongr
#align_import analysis.convex.star from "leanprover-community/mathlib"@"9003f28797c0664a49e4179487267c494477d853"
/-!
# Star-convex sets
This files defines star-convex sets (aka star domains, star-shaped set, radially convex set).
A set is star-convex at `x` if every segment from `x` to a point in the set is contained in the set.
This is the prototypical example of a contractible set in homotopy theory (by scaling every point
towards `x`), but has wider uses.
Note that this has nothing to do with star rings, `Star` and co.
## Main declarations
* `StarConvex π x s`: `s` is star-convex at `x` with scalars `π`.
## Implementation notes
Instead of saying that a set is star-convex, we say a set is star-convex *at a point*. This has the
advantage of allowing us to talk about convexity as being "everywhere star-convexity" and of making
the union of star-convex sets be star-convex.
Incidentally, this choice means we don't need to assume a set is nonempty for it to be star-convex.
Concretely, the empty set is star-convex at every point.
## TODO
Balanced sets are star-convex.
The closure of a star-convex set is star-convex.
Star-convex sets are contractible.
A nonempty open star-convex set in `β^n` is diffeomorphic to the entire space.
-/
open Set
open Convex Pointwise
variable {π E F : Type*}
section OrderedSemiring
variable [OrderedSemiring π]
section AddCommMonoid
variable [AddCommMonoid E] [AddCommMonoid F]
section SMul
variable (π) [SMul π E] [SMul π F] (x : E) (s : Set E)
/-- Star-convexity of sets. `s` is star-convex at `x` if every segment from `x` to a point in `s` is
contained in `s`. -/
def StarConvex : Prop :=
β β¦y : Eβ¦, y β s β β β¦a b : πβ¦, 0 β€ a β 0 β€ b β a + b = 1 β a β’ x + b β’ y β s
#align star_convex StarConvex
variable {π x s} {t : Set E}
theorem starConvex_iff_segment_subset : StarConvex π x s β β β¦yβ¦, y β s β [x -[π] y] β s := by
constructor
Β· rintro h y hy z β¨a, b, ha, hb, hab, rflβ©
exact h hy ha hb hab
Β· rintro h y hy a b ha hb hab
exact h hy β¨a, b, ha, hb, hab, rflβ©
#align star_convex_iff_segment_subset starConvex_iff_segment_subset
theorem StarConvex.segment_subset (h : StarConvex π x s) {y : E} (hy : y β s) : [x -[π] y] β s :=
starConvex_iff_segment_subset.1 h hy
#align star_convex.segment_subset StarConvex.segment_subset
theorem StarConvex.openSegment_subset (h : StarConvex π x s) {y : E} (hy : y β s) :
openSegment π x y β s :=
(openSegment_subset_segment π x y).trans (h.segment_subset hy)
#align star_convex.open_segment_subset StarConvex.openSegment_subset
/-- Alternative definition of star-convexity, in terms of pointwise set operations. -/
theorem starConvex_iff_pointwise_add_subset :
StarConvex π x s β β β¦a b : πβ¦, 0 β€ a β 0 β€ b β a + b = 1 β a β’ {x} + b β’ s β s := by
refine
β¨?_, fun h y hy a b ha hb hab =>
h ha hb hab (add_mem_add (smul_mem_smul_set <| mem_singleton _) β¨_, hy, rflβ©)β©
rintro hA a b ha hb hab w β¨au, β¨u, rfl : u = x, rflβ©, bv, β¨v, hv, rflβ©, rflβ©
exact hA hv ha hb hab
#align star_convex_iff_pointwise_add_subset starConvex_iff_pointwise_add_subset
theorem starConvex_empty (x : E) : StarConvex π x β
:= fun _ hy => hy.elim
#align star_convex_empty starConvex_empty
theorem starConvex_univ (x : E) : StarConvex π x univ := fun _ _ _ _ _ _ _ => trivial
#align star_convex_univ starConvex_univ
theorem StarConvex.inter (hs : StarConvex π x s) (ht : StarConvex π x t) : StarConvex π x (s β© t) :=
fun _ hy _ _ ha hb hab => β¨hs hy.left ha hb hab, ht hy.right ha hb habβ©
#align star_convex.inter StarConvex.inter
theorem starConvex_sInter {S : Set (Set E)} (h : β s β S, StarConvex π x s) :
StarConvex π x (ββ S) := fun _ hy _ _ ha hb hab s hs => h s hs (hy s hs) ha hb hab
#align star_convex_sInter starConvex_sInter
theorem starConvex_iInter {ΞΉ : Sort*} {s : ΞΉ β Set E} (h : β i, StarConvex π x (s i)) :
StarConvex π x (β i, s i) :=
sInter_range s βΈ starConvex_sInter <| forall_mem_range.2 h
#align star_convex_Inter starConvex_iInter
theorem StarConvex.union (hs : StarConvex π x s) (ht : StarConvex π x t) :
StarConvex π x (s βͺ t) := by
rintro y (hy | hy) a b ha hb hab
Β· exact Or.inl (hs hy ha hb hab)
Β· exact Or.inr (ht hy ha hb hab)
#align star_convex.union StarConvex.union
theorem starConvex_iUnion {ΞΉ : Sort*} {s : ΞΉ β Set E} (hs : β i, StarConvex π x (s i)) :
StarConvex π x (β i, s i) := by
rintro y hy a b ha hb hab
rw [mem_iUnion] at hy β’
obtain β¨i, hyβ© := hy
exact β¨i, hs i hy ha hb habβ©
#align star_convex_Union starConvex_iUnion
theorem starConvex_sUnion {S : Set (Set E)} (hS : β s β S, StarConvex π x s) :
StarConvex π x (ββ S) := by
rw [sUnion_eq_iUnion]
exact starConvex_iUnion fun s => hS _ s.2
#align star_convex_sUnion starConvex_sUnion
theorem StarConvex.prod {y : F} {s : Set E} {t : Set F} (hs : StarConvex π x s)
(ht : StarConvex π y t) : StarConvex π (x, y) (s ΓΛ’ t) := fun _ hy _ _ ha hb hab =>
β¨hs hy.1 ha hb hab, ht hy.2 ha hb habβ©
#align star_convex.prod StarConvex.prod
theorem starConvex_pi {ΞΉ : Type*} {E : ΞΉ β Type*} [β i, AddCommMonoid (E i)] [β i, SMul π (E i)]
{x : β i, E i} {s : Set ΞΉ} {t : β i, Set (E i)} (ht : β β¦iβ¦, i β s β StarConvex π (x i) (t i)) :
StarConvex π x (s.pi t) := fun _ hy _ _ ha hb hab i hi => ht hi (hy i hi) ha hb hab
#align star_convex_pi starConvex_pi
end SMul
section Module
variable [Module π E] [Module π F] {x y z : E} {s : Set E}
theorem StarConvex.mem (hs : StarConvex π x s) (h : s.Nonempty) : x β s := by
obtain β¨y, hyβ© := h
convert hs hy zero_le_one le_rfl (add_zero 1)
rw [one_smul, zero_smul, add_zero]
#align star_convex.mem StarConvex.mem
theorem starConvex_iff_forall_pos (hx : x β s) : StarConvex π x s β
β β¦yβ¦, y β s β β β¦a b : πβ¦, 0 < a β 0 < b β a + b = 1 β a β’ x + b β’ y β s := by
refine β¨fun h y hy a b ha hb hab => h hy ha.le hb.le hab, ?_β©
intro h y hy a b ha hb hab
obtain rfl | ha := ha.eq_or_lt
Β· rw [zero_add] at hab
rwa [hab, one_smul, zero_smul, zero_add]
obtain rfl | hb := hb.eq_or_lt
Β· rw [add_zero] at hab
rwa [hab, one_smul, zero_smul, add_zero]
exact h hy ha hb hab
#align star_convex_iff_forall_pos starConvex_iff_forall_pos
theorem starConvex_iff_forall_ne_pos (hx : x β s) :
StarConvex π x s β
β β¦yβ¦, y β s β x β y β β β¦a b : πβ¦, 0 < a β 0 < b β a + b = 1 β a β’ x + b β’ y β s := by
refine β¨fun h y hy _ a b ha hb hab => h hy ha.le hb.le hab, ?_β©
intro h y hy a b ha hb hab
obtain rfl | ha' := ha.eq_or_lt
Β· rw [zero_add] at hab
rwa [hab, zero_smul, one_smul, zero_add]
obtain rfl | hb' := hb.eq_or_lt
Β· rw [add_zero] at hab
rwa [hab, zero_smul, one_smul, add_zero]
obtain rfl | hxy := eq_or_ne x y
Β· rwa [Convex.combo_self hab]
exact h hy hxy ha' hb' hab
#align star_convex_iff_forall_ne_pos starConvex_iff_forall_ne_pos
theorem starConvex_iff_openSegment_subset (hx : x β s) :
StarConvex π x s β β β¦yβ¦, y β s β openSegment π x y β s :=
starConvex_iff_segment_subset.trans <|
forallβ_congr fun _ hy => (openSegment_subset_iff_segment_subset hx hy).symm
#align star_convex_iff_open_segment_subset starConvex_iff_openSegment_subset
theorem starConvex_singleton (x : E) : StarConvex π x {x} := by
rintro y (rfl : y = x) a b _ _ hab
exact Convex.combo_self hab _
#align star_convex_singleton starConvex_singleton
theorem StarConvex.linear_image (hs : StarConvex π x s) (f : E ββ[π] F) :
StarConvex π (f x) (f '' s) := by
rintro _ β¨y, hy, rflβ© a b ha hb hab
exact β¨a β’ x + b β’ y, hs hy ha hb hab, by rw [f.map_add, f.map_smul, f.map_smul]β©
#align star_convex.linear_image StarConvex.linear_image
theorem StarConvex.is_linear_image (hs : StarConvex π x s) {f : E β F} (hf : IsLinearMap π f) :
StarConvex π (f x) (f '' s) :=
hs.linear_image <| hf.mk' f
#align star_convex.is_linear_image StarConvex.is_linear_image
theorem StarConvex.linear_preimage {s : Set F} (f : E ββ[π] F) (hs : StarConvex π (f x) s) :
StarConvex π x (f β»ΒΉ' s) := by
intro y hy a b ha hb hab
rw [mem_preimage, f.map_add, f.map_smul, f.map_smul]
exact hs hy ha hb hab
#align star_convex.linear_preimage StarConvex.linear_preimage
theorem StarConvex.is_linear_preimage {s : Set F} {f : E β F} (hs : StarConvex π (f x) s)
(hf : IsLinearMap π f) : StarConvex π x (preimage f s) :=
hs.linear_preimage <| hf.mk' f
#align star_convex.is_linear_preimage StarConvex.is_linear_preimage
theorem StarConvex.add {t : Set E} (hs : StarConvex π x s) (ht : StarConvex π y t) :
StarConvex π (x + y) (s + t) := by
rw [β add_image_prod]
exact (hs.prod ht).is_linear_image IsLinearMap.isLinearMap_add
#align star_convex.add StarConvex.add
theorem StarConvex.add_left (hs : StarConvex π x s) (z : E) :
StarConvex π (z + x) ((fun x => z + x) '' s) := by
intro y hy a b ha hb hab
obtain β¨y', hy', rflβ© := hy
refine β¨a β’ x + b β’ y', hs hy' ha hb hab, ?_β©
rw [smul_add, smul_add, add_add_add_comm, β add_smul, hab, one_smul]
#align star_convex.add_left StarConvex.add_left
theorem StarConvex.add_right (hs : StarConvex π x s) (z : E) :
StarConvex π (x + z) ((fun x => x + z) '' s) := by
intro y hy a b ha hb hab
obtain β¨y', hy', rflβ© := hy
refine β¨a β’ x + b β’ y', hs hy' ha hb hab, ?_β©
rw [smul_add, smul_add, add_add_add_comm, β add_smul, hab, one_smul]
#align star_convex.add_right StarConvex.add_right
/-- The translation of a star-convex set is also star-convex. -/
theorem StarConvex.preimage_add_right (hs : StarConvex π (z + x) s) :
StarConvex π x ((fun x => z + x) β»ΒΉ' s) := by
intro y hy a b ha hb hab
have h := hs hy ha hb hab
rwa [smul_add, smul_add, add_add_add_comm, β add_smul, hab, one_smul] at h
#align star_convex.preimage_add_right StarConvex.preimage_add_right
/-- The translation of a star-convex set is also star-convex. -/
theorem StarConvex.preimage_add_left (hs : StarConvex π (x + z) s) :
StarConvex π x ((fun x => x + z) β»ΒΉ' s) := by
rw [add_comm] at hs
simpa only [add_comm] using hs.preimage_add_right
#align star_convex.preimage_add_left StarConvex.preimage_add_left
end Module
end AddCommMonoid
section AddCommGroup
variable [AddCommGroup E] [Module π E] {x y : E}
theorem StarConvex.sub' {s : Set (E Γ E)} (hs : StarConvex π (x, y) s) :
StarConvex π (x - y) ((fun x : E Γ E => x.1 - x.2) '' s) :=
hs.is_linear_image IsLinearMap.isLinearMap_sub
#align star_convex.sub' StarConvex.sub'
end AddCommGroup
end OrderedSemiring
section OrderedCommSemiring
variable [OrderedCommSemiring π]
section AddCommMonoid
variable [AddCommMonoid E] [AddCommMonoid F] [Module π E] [Module π F] {x : E} {s : Set E}
theorem StarConvex.smul (hs : StarConvex π x s) (c : π) : StarConvex π (c β’ x) (c β’ s) :=
hs.linear_image <| LinearMap.lsmul _ _ c
#align star_convex.smul StarConvex.smul
theorem StarConvex.preimage_smul {c : π} (hs : StarConvex π (c β’ x) s) :
StarConvex π x ((fun z => c β’ z) β»ΒΉ' s) :=
hs.linear_preimage (LinearMap.lsmul _ _ c)
#align star_convex.preimage_smul StarConvex.preimage_smul
theorem StarConvex.affinity (hs : StarConvex π x s) (z : E) (c : π) :
StarConvex π (z + c β’ x) ((fun x => z + c β’ x) '' s) := by
have h := (hs.smul c).add_left z
rwa [β image_smul, image_image] at h
#align star_convex.affinity StarConvex.affinity
end AddCommMonoid
end OrderedCommSemiring
section OrderedRing
variable [OrderedRing π]
section AddCommMonoid
variable [AddCommMonoid E] [SMulWithZero π E] {s : Set E}
theorem starConvex_zero_iff :
StarConvex π 0 s β β β¦x : Eβ¦, x β s β β β¦a : πβ¦, 0 β€ a β a β€ 1 β a β’ x β s := by
refine
forall_congr' fun x => forall_congr' fun _ => β¨fun h a haβ haβ => ?_, fun h a b ha hb hab => ?_β©
Β· simpa only [sub_add_cancel, eq_self_iff_true, forall_true_left, zero_add, smul_zero] using
h (sub_nonneg_of_le haβ) haβ
Β· rw [smul_zero, zero_add]
exact h hb (by rw [β hab]; exact le_add_of_nonneg_left ha)
#align star_convex_zero_iff starConvex_zero_iff
end AddCommMonoid
section AddCommGroup
variable [AddCommGroup E] [AddCommGroup F] [Module π E] [Module π F] {x y : E} {s t : Set E}
theorem StarConvex.add_smul_mem (hs : StarConvex π x s) (hy : x + y β s) {t : π} (htβ : 0 β€ t)
(htβ : t β€ 1) : x + t β’ y β s := by
have h : x + t β’ y = (1 - t) β’ x + t β’ (x + y) := by
rw [smul_add, β add_assoc, β add_smul, sub_add_cancel, one_smul]
rw [h]
exact hs hy (sub_nonneg_of_le htβ) htβ (sub_add_cancel _ _)
#align star_convex.add_smul_mem StarConvex.add_smul_mem
theorem StarConvex.smul_mem (hs : StarConvex π 0 s) (hx : x β s) {t : π} (htβ : 0 β€ t)
(htβ : t β€ 1) : t β’ x β s := by simpa using hs.add_smul_mem (by simpa using hx) htβ htβ
#align star_convex.smul_mem StarConvex.smul_mem
theorem StarConvex.add_smul_sub_mem (hs : StarConvex π x s) (hy : y β s) {t : π} (htβ : 0 β€ t)
(htβ : t β€ 1) : x + t β’ (y - x) β s := by
apply hs.segment_subset hy
rw [segment_eq_image']
exact mem_image_of_mem _ β¨htβ, htββ©
#align star_convex.add_smul_sub_mem StarConvex.add_smul_sub_mem
/-- The preimage of a star-convex set under an affine map is star-convex. -/
theorem StarConvex.affine_preimage (f : E βα΅[π] F) {s : Set F} (hs : StarConvex π (f x) s) :
StarConvex π x (f β»ΒΉ' s) := by
intro y hy a b ha hb hab
rw [mem_preimage, Convex.combo_affine_apply hab]
exact hs hy ha hb hab
#align star_convex.affine_preimage StarConvex.affine_preimage
/-- The image of a star-convex set under an affine map is star-convex. -/
theorem StarConvex.affine_image (f : E βα΅[π] F) {s : Set E} (hs : StarConvex π x s) :
StarConvex π (f x) (f '' s) := by
rintro y β¨y', β¨hy', hy'fβ©β© a b ha hb hab
refine β¨a β’ x + b β’ y', β¨hs hy' ha hb hab, ?_β©β©
rw [Convex.combo_affine_apply hab, hy'f]
#align star_convex.affine_image StarConvex.affine_image
theorem StarConvex.neg (hs : StarConvex π x s) : StarConvex π (-x) (-s) := by
rw [β image_neg]
exact hs.is_linear_image IsLinearMap.isLinearMap_neg
#align star_convex.neg StarConvex.neg
theorem StarConvex.sub (hs : StarConvex π x s) (ht : StarConvex π y t) :
StarConvex π (x - y) (s - t) := by
simp_rw [sub_eq_add_neg]
exact hs.add ht.neg
#align star_convex.sub StarConvex.sub
end AddCommGroup
section OrderedAddCommGroup
variable [OrderedAddCommGroup E] [Module π E] [OrderedSMul π E] {x y : E}
/-- If `x < y`, then `(Set.Iic x)αΆ` is star convex at `y`. -/
lemma starConvex_compl_Iic (h : x < y) : StarConvex π y (Iic x)αΆ := by
refine (starConvex_iff_forall_pos <| by simp [h.not_le]).mpr fun z hz a b ha hb hab β¦ ?_
rw [mem_compl_iff, mem_Iic] at hz β’
contrapose! hz
refine (lt_of_smul_lt_smul_of_nonneg_left ?_ hb.le).le
calc
b β’ z β€ (a + b) β’ x - a β’ y := by rwa [le_sub_iff_add_le', hab, one_smul]
_ < b β’ x := by
rw [add_smul, sub_lt_iff_lt_add']
gcongr
/-- If `x < y`, then `(Set.Ici y)αΆ` is star convex at `x`. -/
lemma starConvex_compl_Ici (h : x < y) : StarConvex π x (Ici y)αΆ :=
starConvex_compl_Iic (E := Eα΅α΅) h
end OrderedAddCommGroup
end OrderedRing
section LinearOrderedField
variable [LinearOrderedField π]
section AddCommGroup
variable [AddCommGroup E] [Module π E] {x : E} {s : Set E}
/-- Alternative definition of star-convexity, using division. -/
theorem starConvex_iff_div : StarConvex π x s β β β¦yβ¦, y β s β
β β¦a b : πβ¦, 0 β€ a β 0 β€ b β 0 < a + b β (a / (a + b)) β’ x + (b / (a + b)) β’ y β s :=
β¨fun h y hy a b ha hb hab => by
apply h hy
Β· positivity
Β· positivity
Β· rw [β add_div]
exact div_self hab.ne',
fun h y hy a b ha hb hab => by
have h' := h hy ha hb
rw [hab, div_one, div_one] at h'
exact h' zero_lt_oneβ©
#align star_convex_iff_div starConvex_iff_div
theorem StarConvex.mem_smul (hs : StarConvex π 0 s) (hx : x β s) {t : π} (ht : 1 β€ t) :
x β t β’ s := by
rw [mem_smul_set_iff_inv_smul_memβ (zero_lt_one.trans_le ht).ne']
exact hs.smul_mem hx (by positivity) (inv_le_one ht)
#align star_convex.mem_smul StarConvex.mem_smul
end AddCommGroup
end LinearOrderedField
/-!
#### Star-convex sets in an ordered space
Relates `starConvex` and `Set.ordConnected`.
-/
section OrdConnected
/-- If `s` is an order-connected set in an ordered module over an ordered semiring
and all elements of `s` are comparable with `x β s`, then `s` is `StarConvex` at `x`. -/
theorem Set.OrdConnected.starConvex [OrderedSemiring π] [OrderedAddCommMonoid E] [Module π E]
[OrderedSMul π E] {x : E} {s : Set E} (hs : s.OrdConnected) (hx : x β s)
(h : β y β s, x β€ y β¨ y β€ x) : StarConvex π x s := by
intro y hy a b ha hb hab
obtain hxy | hyx := h _ hy
Β· refine hs.out hx hy (mem_Icc.2 β¨?_, ?_β©)
Β· calc
x = a β’ x + b β’ x := (Convex.combo_self hab _).symm
_ β€ a β’ x + b β’ y := by gcongr
calc
a β’ x + b β’ y β€ a β’ y + b β’ y := by gcongr
_ = y := Convex.combo_self hab _
Β· refine hs.out hy hx (mem_Icc.2 β¨?_, ?_β©)
Β· calc
y = a β’ y + b β’ y := (Convex.combo_self hab _).symm
_ β€ a β’ x + b β’ y := by gcongr
calc
a β’ x + b β’ y β€ a β’ x + b β’ x := by gcongr
_ = x := Convex.combo_self hab _
#align set.ord_connected.star_convex Set.OrdConnected.starConvex
theorem starConvex_iff_ordConnected [LinearOrderedField π] {x : π} {s : Set π} (hx : x β s) :
StarConvex π x s β s.OrdConnected := by
simp_rw [ordConnected_iff_uIcc_subset_left hx, starConvex_iff_segment_subset, segment_eq_uIcc]
#align star_convex_iff_ord_connected starConvex_iff_ordConnected
alias β¨StarConvex.ordConnected, _β© := starConvex_iff_ordConnected
#align star_convex.ord_connected StarConvex.ordConnected
end OrdConnected