@@ -32,8 +32,9 @@ open BigOperators Classical Pointwise
32
32
33
33
universe u u'
34
34
35
- variable {R E F ι ι' α : Type *} [LinearOrderedField R] [AddCommGroup E] [AddCommGroup F]
36
- [LinearOrderedAddCommGroup α] [Module R E] [Module R F] [Module R α] [OrderedSMul R α] {s : Set E}
35
+ variable {R R' E F ι ι' α : Type *} [LinearOrderedField R] [LinearOrderedField R'] [AddCommGroup E]
36
+ [AddCommGroup F] [LinearOrderedAddCommGroup α] [Module R E] [Module R F] [Module R α]
37
+ [OrderedSMul R α] {s : Set E}
37
38
38
39
/-- Center of mass of a finite collection of points with prescribed weights.
39
40
Note that we require neither `0 ≤ w i` nor `∑ w = 1`. -/
@@ -69,6 +70,14 @@ theorem Finset.centerMass_singleton (hw : w i ≠ 0) : ({i} : Finset ι).centerM
69
70
rw [centerMass, sum_singleton, sum_singleton, ← mul_smul, inv_mul_cancel hw, one_smul]
70
71
#align finset.center_mass_singleton Finset.centerMass_singleton
71
72
73
+ @[simp] lemma Finset.centerMass_neg_left : t.centerMass (-w) z = t.centerMass w z := by
74
+ simp [centerMass, inv_neg]
75
+
76
+ lemma Finset.centerMass_smul_left {c : R'} [Module R' R] [Module R' E] [SMulCommClass R' R R]
77
+ [IsScalarTower R' R R] [SMulCommClass R R' E] [IsScalarTower R' R E] (hc : c ≠ 0 ) :
78
+ t.centerMass (c • w) z = t.centerMass w z := by
79
+ simp [centerMass, -smul_assoc, smul_assoc c, ←smul_sum, smul_inv₀, smul_smul_smul_comm, hc]
80
+
72
81
theorem Finset.centerMass_eq_of_sum_1 (hw : ∑ i in t, w i = 1 ) :
73
82
t.centerMass w z = ∑ i in t, w i • z i := by
74
83
simp only [Finset.centerMass, hw, inv_one, one_smul]
@@ -148,6 +157,11 @@ end Finset
148
157
149
158
variable {z}
150
159
160
+ lemma Finset.centerMass_of_sum_add_sum_eq_zero {s t : Finset ι}
161
+ (hw : ∑ i in s, w i + ∑ i in t, w i = 0 ) (hz : ∑ i in s, w i • z i + ∑ i in t, w i • z i = 0 ) :
162
+ s.centerMass w z = t.centerMass w z := by
163
+ simp [centerMass, eq_neg_of_add_eq_zero_right hw, eq_neg_of_add_eq_zero_left hz, ←neg_inv]
164
+
151
165
/-- The center of mass of a finite subset of a convex set belongs to the set
152
166
provided that all weights are non-negative, and the total weight is positive. -/
153
167
theorem Convex.centerMass_mem (hs : Convex R s) :
@@ -223,13 +237,25 @@ theorem Finset.centerMass_mem_convexHull (t : Finset ι) {w : ι → R} (hw₀ :
223
237
(convex_convexHull R s).centerMass_mem hw₀ hws fun i hi => subset_convexHull R s <| hz i hi
224
238
#align finset.center_mass_mem_convex_hull Finset.centerMass_mem_convexHull
225
239
240
+ /-- A version of `Finset.centerMass_mem_convexHull` for when the weights are nonpositive. -/
241
+ lemma Finset.centerMass_mem_convexHull_of_nonpos (t : Finset ι) (hw₀ : ∀ i ∈ t, w i ≤ 0 )
242
+ (hws : ∑ i in t, w i < 0 ) (hz : ∀ i ∈ t, z i ∈ s) : t.centerMass w z ∈ convexHull R s := by
243
+ rw [←centerMass_neg_left]
244
+ exact Finset.centerMass_mem_convexHull _ (λ _i hi ↦ neg_nonneg.2 $ hw₀ _ hi) (by simpa) hz
245
+
226
246
/-- A refinement of `Finset.centerMass_mem_convexHull` when the indexed family is a `Finset` of
227
247
the space. -/
228
248
theorem Finset.centerMass_id_mem_convexHull (t : Finset E) {w : E → R} (hw₀ : ∀ i ∈ t, 0 ≤ w i)
229
249
(hws : 0 < ∑ i in t, w i) : t.centerMass w id ∈ convexHull R (t : Set E) :=
230
250
t.centerMass_mem_convexHull hw₀ hws fun _ => mem_coe.2
231
251
#align finset.center_mass_id_mem_convex_hull Finset.centerMass_id_mem_convexHull
232
252
253
+ /-- A version of `Finset.centerMass_mem_convexHull` for when the weights are nonpositive. -/
254
+ lemma Finset.centerMass_id_mem_convexHull_of_nonpos (t : Finset E) {w : E → R}
255
+ (hw₀ : ∀ i ∈ t, w i ≤ 0 ) (hws : ∑ i in t, w i < 0 ) :
256
+ t.centerMass w id ∈ convexHull R (t : Set E) :=
257
+ t.centerMass_mem_convexHull_of_nonpos hw₀ hws fun _ ↦ mem_coe.2
258
+
233
259
theorem affineCombination_eq_centerMass {ι : Type *} {t : Finset ι} {p : ι → E} {w : ι → R}
234
260
(hw₂ : ∑ i in t, w i = 1 ) : t.affineCombination R p w = centerMass t w p := by
235
261
rw [affineCombination_eq_weightedVSubOfPoint_vadd_of_sum_eq_one _ w _ hw₂ (0 : E),
0 commit comments