Skip to content

Commit 35529d0

Browse files
committed
feat: e-seminormed monoid (#27385)
Most lemmas about these do not require the enorm to be positive definite (i.e., work fine if a nontrivial element has zero enorm), or can be rephrased easily. A handful of lemmas do require this condition. Add a new class `ESeminormed(Add)(Comm)Monoid`, which only asks that zero have enorm, and generalise most lemmas to this class. The motivating example behind this is `eLpNorm`, which is an enormed commutative (additive) monoid
1 parent b17d871 commit 35529d0

File tree

14 files changed

+181
-118
lines changed

14 files changed

+181
-118
lines changed

Mathlib/Analysis/Normed/Group/Basic.lean

Lines changed: 61 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -96,33 +96,67 @@ end ENorm
9696
/-- A type `E` equipped with a continuous map `‖·‖ₑ : E → ℝ≥0∞`
9797
9898
NB. We do not demand that the topology is somehow defined by the enorm:
99-
for ℝ≥0∞ (the motivating example behind this definition), this is not true. -/
99+
for `ℝ≥0∞` (the motivating example behind this definition), this is not true. -/
100100
class ContinuousENorm (E : Type*) [TopologicalSpace E] extends ENorm E where
101101
continuous_enorm : Continuous enorm
102102

103-
/-- An enormed monoid is an additive monoid endowed with a continuous enorm. -/
104-
class ENormedAddMonoid (E : Type*) [TopologicalSpace E] extends ContinuousENorm E, AddMonoid E where
105-
enorm_eq_zero : ∀ x : E, ‖x‖ₑ = 0 ↔ x = 0
103+
/-- An e-seminormed monoid is an additive monoid endowed with a continuous enorm.
104+
Note that we do not ask for the enorm to be positive definite:
105+
non-trivial elements may have enorm zero. -/
106+
class ESeminormedAddMonoid (E : Type*) [TopologicalSpace E]
107+
extends ContinuousENorm E, AddMonoid E where
108+
enorm_zero : ‖(0 : E)‖ₑ = 0
106109
protected enorm_add_le : ∀ x y : E, ‖x + y‖ₑ ≤ ‖x‖ₑ + ‖y‖ₑ
107110

108-
/-- An enormed monoid is a monoid endowed with a continuous enorm. -/
111+
/-- An enormed monoid is an additive monoid endowed with a continuous enorm,
112+
which is positive definite: in other words, this is an `ESeminormedAddMonoid` with a positive
113+
definiteness condition added. -/
114+
class ENormedAddMonoid (E : Type*) [TopologicalSpace E]
115+
extends ESeminormedAddMonoid E where
116+
enorm_eq_zero : ∀ x : E, ‖x‖ₑ = 0 ↔ x = 0
117+
118+
/-- An e-seminormed monoid is a monoid endowed with a continuous enorm.
119+
Note that we only ask for the enorm to be a semi-norm: non-trivial elements may have enorm zero. -/
109120
@[to_additive]
110-
class ENormedMonoid (E : Type*) [TopologicalSpace E] extends ContinuousENorm E, Monoid E where
111-
enorm_eq_zero : ∀ x : E, ‖x‖ₑ = 0 ↔ x = 1
121+
class ESeminormedMonoid (E : Type*) [TopologicalSpace E] extends ContinuousENorm E, Monoid E where
122+
enorm_zero : ‖(1 : E)‖ₑ = 0
112123
enorm_mul_le : ∀ x y : E, ‖x * y‖ₑ ≤ ‖x‖ₑ + ‖y‖ₑ
113124

125+
/-- An enormed monoid is a monoid endowed with a continuous enorm,
126+
which is positive definite: in other words, this is an `ESeminormedMonoid` with a positive
127+
definiteness condition added. -/
128+
@[to_additive]
129+
class ENormedMonoid (E : Type*) [TopologicalSpace E] extends ESeminormedMonoid E where
130+
enorm_eq_zero : ∀ x : E, ‖x‖ₑ = 0 ↔ x = 1
131+
132+
/-- An e-seminormed commutative monoid is an additive commutative monoid endowed with a continuous
133+
enorm.
134+
135+
We don't have `ESeminormedAddCommMonoid` extend `EMetricSpace`, since the canonical instance `ℝ≥0∞`
136+
is not an `EMetricSpace`. This is because `ℝ≥0∞` carries the order topology, which is distinct from
137+
the topology coming from `edist`. -/
138+
class ESeminormedAddCommMonoid (E : Type*) [TopologicalSpace E]
139+
extends ESeminormedAddMonoid E, AddCommMonoid E where
140+
114141
/-- An enormed commutative monoid is an additive commutative monoid
115-
endowed with a continuous enorm.
142+
endowed with a continuous enorm which is positive definite.
116143
117144
We don't have `ENormedAddCommMonoid` extend `EMetricSpace`, since the canonical instance `ℝ≥0∞`
118145
is not an `EMetricSpace`. This is because `ℝ≥0∞` carries the order topology, which is distinct from
119146
the topology coming from `edist`. -/
120147
class ENormedAddCommMonoid (E : Type*) [TopologicalSpace E]
121-
extends ENormedAddMonoid E, AddCommMonoid E where
148+
extends ESeminormedAddCommMonoid E, ENormedAddMonoid E where
149+
150+
/-- An e-seminormed commutative monoid is a commutative monoid endowed with a continuous enorm. -/
151+
@[to_additive]
152+
class ESeminormedCommMonoid (E : Type*) [TopologicalSpace E]
153+
extends ESeminormedMonoid E, CommMonoid E where
122154

123-
/-- An enormed commutative monoid is a commutative monoid endowed with a continuous enorm. -/
155+
/-- An enormed commutative monoid is a commutative monoid endowed with a continuous enorm
156+
which is positive definite. -/
124157
@[to_additive]
125-
class ENormedCommMonoid (E : Type*) [TopologicalSpace E] extends ENormedMonoid E, CommMonoid E where
158+
class ENormedCommMonoid (E : Type*) [TopologicalSpace E]
159+
extends ESeminormedCommMonoid E, ENormedMonoid E where
126160

127161
/-- A seminormed group is an additive group endowed with a norm for which `dist x y = ‖x - y‖`
128162
defines a pseudometric space structure. -/
@@ -868,11 +902,11 @@ end NNNorm
868902
section ENorm
869903

870904
@[to_additive (attr := simp) enorm_zero]
871-
lemma enorm_one' {E : Type*} [TopologicalSpace E] [ENormedMonoid E] : ‖(1 : E)‖ₑ = 0 := by
872-
rw [ENormedMonoid.enorm_eq_zero]
905+
lemma enorm_one' {E : Type*} [TopologicalSpace E] [ESeminormedMonoid E] : ‖(1 : E)‖ₑ = 0 := by
906+
rw [ESeminormedMonoid.enorm_zero]
873907

874908
@[to_additive exists_enorm_lt]
875-
lemma exists_enorm_lt' (E : Type*) [TopologicalSpace E] [ENormedMonoid E]
909+
lemma exists_enorm_lt' (E : Type*) [TopologicalSpace E] [ESeminormedMonoid E]
876910
[hbot : NeBot (𝓝[≠] (1 : E))] {c : ℝ≥0∞} (hc : c ≠ 0) : ∃ x ≠ (1 : E), ‖x‖ₑ < c :=
877911
frequently_iff_neBot.mpr hbot |>.and_eventually
878912
(ContinuousENorm.continuous_enorm.tendsto' 1 0 (by simp) |>.eventually_lt_const hc.bot_lt)
@@ -929,12 +963,18 @@ lemma ContinuousOn.enorm (h : ContinuousOn f s) : ContinuousOn (‖f ·‖ₑ) s
929963

930964
end ContinuousENorm
931965

932-
section ENormedMonoid
966+
section ESeminormedMonoid
933967

934-
variable {E : Type*} [TopologicalSpace E] [ENormedMonoid E]
968+
variable {E : Type*} [TopologicalSpace E] [ESeminormedMonoid E]
935969

936970
@[to_additive enorm_add_le]
937-
lemma enorm_mul_le' (a b : E) : ‖a * b‖ₑ ≤ ‖a‖ₑ + ‖b‖ₑ := ENormedMonoid.enorm_mul_le a b
971+
lemma enorm_mul_le' (a b : E) : ‖a * b‖ₑ ≤ ‖a‖ₑ + ‖b‖ₑ := ESeminormedMonoid.enorm_mul_le a b
972+
973+
end ESeminormedMonoid
974+
975+
section ENormedMonoid
976+
977+
variable {E : Type*} [TopologicalSpace E] [ENormedMonoid E]
938978

939979
@[to_additive (attr := simp) enorm_eq_zero]
940980
lemma enorm_eq_zero' {a : E} : ‖a‖ₑ = 0 ↔ a = 1 := by
@@ -952,6 +992,7 @@ end ENormedMonoid
952992

953993
instance : ENormedAddCommMonoid ℝ≥0where
954994
continuous_enorm := continuous_id
995+
enorm_zero := by simp
955996
enorm_eq_zero := by simp
956997
enorm_add_le := by simp
957998

@@ -1100,7 +1141,7 @@ end NNReal
11001141
section SeminormedCommGroup
11011142

11021143
variable [SeminormedCommGroup E] [SeminormedCommGroup F] {a b : E} {r : ℝ}
1103-
variable {ε : Type*} [TopologicalSpace ε] [ENormedCommMonoid ε]
1144+
variable {ε : Type*} [TopologicalSpace ε] [ESeminormedCommMonoid ε]
11041145

11051146
@[to_additive]
11061147
theorem dist_inv (x y : E) : dist x⁻¹ y = dist x y⁻¹ := by
@@ -1117,8 +1158,9 @@ theorem norm_multiset_prod_le (m : Multiset E) : ‖m.prod‖ ≤ (m.map fun x =
11171158
· simp only [comp_apply, norm_one', ofAdd_zero]
11181159
· exact norm_mul_le' x y
11191160

1161+
variable {ε : Type*} [TopologicalSpace ε] [ESeminormedAddCommMonoid ε] in
11201162
@[bound]
1121-
theorem enorm_sum_le {ε} [TopologicalSpace ε] [ENormedAddCommMonoid ε] (s : Finset ι) (f : ι → ε) :
1163+
theorem enorm_sum_le (s : Finset ι) (f : ι → ε) :
11221164
‖∑ i ∈ s, f i‖ₑ ≤ ∑ i ∈ s, ‖f i‖ₑ :=
11231165
s.le_sum_of_subadditive enorm enorm_zero enorm_add_le f
11241166

Mathlib/Analysis/Normed/Group/Continuity.lean

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,14 @@ instance SeminormedGroup.toContinuousENorm [SeminormedGroup E] : ContinuousENorm
9797

9898
@[to_additive]
9999
instance NormedGroup.toENormedMonoid {F : Type*} [NormedGroup F] : ENormedMonoid F where
100+
enorm_zero := by simp [enorm_eq_nnnorm]
100101
enorm_eq_zero := by simp [enorm_eq_nnnorm]
101102
enorm_mul_le := by simp [enorm_eq_nnnorm, ← coe_add, nnnorm_mul_le']
102103

103104
@[to_additive]
104105
instance NormedCommGroup.toENormedCommMonoid [NormedCommGroup E] : ENormedCommMonoid E where
105-
mul_comm := by simp [mul_comm]
106+
__ := NormedGroup.toENormedMonoid
107+
__ := ‹NormedCommGroup E›
106108

107109
end Instances
108110

Mathlib/Analysis/Normed/Group/InfiniteSum.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ open Topology ENNReal NNReal
3636
open Finset Filter Metric
3737

3838
variable {ι α E F ε : Type*} [SeminormedAddCommGroup E] [SeminormedAddCommGroup F]
39-
[TopologicalSpace ε] [ENormedAddCommMonoid ε]
39+
[TopologicalSpace ε] [ESeminormedAddCommMonoid ε]
4040

4141
theorem cauchySeq_finset_iff_vanishing_norm {f : ι → E} :
4242
(CauchySeq fun s : Finset ι => ∑ i ∈ s, f i) ↔

Mathlib/Analysis/NormedSpace/IndicatorFunction.lean

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ indicator, norm
1818

1919
open Set
2020

21-
section ENormedAddMonoid
21+
section ESeminormedAddMonoid
2222

23-
variable {α ε : Type*} [TopologicalSpace ε] [ENormedAddMonoid ε] {s t : Set α} (f : α → ε) (a : α)
23+
variable {α ε : Type*} [TopologicalSpace ε] [ESeminormedAddMonoid ε]
24+
{s t : Set α} (f : α → ε) (a : α)
2425

2526
lemma enorm_indicator_eq_indicator_enorm :
2627
‖indicator s f a‖ₑ = indicator s (fun a => ‖f a‖ₑ) a :=
@@ -38,7 +39,7 @@ theorem enorm_indicator_le_enorm_self : ‖indicator s f a‖ₑ ≤ ‖f a‖
3839
rw [enorm_indicator_eq_indicator_enorm]
3940
apply indicator_enorm_le_enorm_self
4041

41-
end ENormedAddMonoid
42+
end ESeminormedAddMonoid
4243

4344
section SeminormedAddGroup
4445

Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ noncomputable def mapLMonoidHom : (Π i, E i →L[𝕜] E i) →* ((⨂[𝕜] i,
390390

391391
@[simp]
392392
protected theorem mapL_pow (f : Π i, E i →L[𝕜] E i) (n : ℕ) :
393-
mapL (f ^ n) = mapL f ^ n := MonoidHom.map_pow mapLMonoidHom _ _
393+
mapL (f ^ n) = mapL f ^ n := MonoidHom.map_pow mapLMonoidHom f n
394394

395395
-- We redeclare `ι` here, and later dependent arguments,
396396
-- to avoid the `[Fintype ι]` assumption present throughout the rest of the file.

Mathlib/MeasureTheory/Function/L1Space/AEEqFun.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ open EMetric ENNReal Filter MeasureTheory NNReal Set
3131

3232
variable {α β ε ε' : Type*} {m : MeasurableSpace α} {μ ν : Measure α}
3333
variable [NormedAddCommGroup β] [TopologicalSpace ε] [ContinuousENorm ε]
34-
[TopologicalSpace ε'] [ENormedAddMonoid ε']
34+
[TopologicalSpace ε'] [ESeminormedAddMonoid ε']
3535

3636
namespace MeasureTheory
3737

Mathlib/MeasureTheory/Function/L1Space/HasFiniteIntegral.lean

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ open Set Filter TopologicalSpace ENNReal EMetric MeasureTheory
3333

3434
variable {α β γ ε ε' ε'' : Type*} {m : MeasurableSpace α} {μ ν : Measure α}
3535
variable [NormedAddCommGroup β] [NormedAddCommGroup γ] [ENorm ε] [ENorm ε']
36-
[TopologicalSpace ε''] [ENormedAddMonoid ε'']
36+
[TopologicalSpace ε''] [ESeminormedAddMonoid ε'']
3737

3838
namespace MeasureTheory
3939

@@ -240,7 +240,7 @@ theorem hasFiniteIntegral_zero_measure {m : MeasurableSpace α} (f : α → ε)
240240

241241
variable (α μ) in
242242
@[fun_prop, simp]
243-
theorem hasFiniteIntegral_zero {ε : Type*} [TopologicalSpace ε] [ENormedAddMonoid ε] :
243+
theorem hasFiniteIntegral_zero {ε : Type*} [TopologicalSpace ε] [ESeminormedAddMonoid ε] :
244244
HasFiniteIntegral (fun _ : α => (0 : ε)) μ := by
245245
simp [hasFiniteIntegral_iff_enorm]
246246

@@ -278,7 +278,7 @@ theorem HasFiniteIntegral.of_isEmpty [IsEmpty α] {f : α → β} :
278278

279279
@[simp]
280280
theorem HasFiniteIntegral.of_subsingleton_codomain
281-
{ε : Type*} [TopologicalSpace ε] [ENormedAddMonoid ε] [Subsingleton ε] {f : α → ε} :
281+
{ε : Type*} [TopologicalSpace ε] [ESeminormedAddMonoid ε] [Subsingleton ε] {f : α → ε} :
282282
HasFiniteIntegral f μ :=
283283
hasFiniteIntegral_zero _ _ |>.congr <| .of_forall fun _ ↦ Subsingleton.elim _ _
284284

@@ -307,7 +307,7 @@ theorem isFiniteMeasure_withDensity_ofReal {f : α → ℝ} (hfi : HasFiniteInte
307307
section DominatedConvergence
308308

309309
variable {F : ℕ → α → β} {f : α → β} {bound : α → ℝ}
310-
{ε : Type*} [TopologicalSpace ε] [ENormedAddMonoid ε]
310+
{ε : Type*} [TopologicalSpace ε] [ESeminormedAddMonoid ε]
311311
{F' : ℕ → α → ε} {f' : α → ε} {bound' : α → ℝ≥0∞}
312312

313313
theorem all_ae_ofReal_F_le_bound (h : ∀ n, ∀ᵐ a ∂μ, ‖F n a‖ ≤ bound a) :

Mathlib/MeasureTheory/Function/L1Space/Integrable.lean

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ lemma integrable_norm_rpow_iff {f : α → β} {p : ℝ≥0∞}
218218
theorem Integrable.mono_measure {f : α → ε} (h : Integrable f ν) (hμ : μ ≤ ν) : Integrable f μ :=
219219
⟨h.aestronglyMeasurable.mono_measure hμ, h.hasFiniteIntegral.mono_measure hμ⟩
220220

221-
theorem Integrable.of_measure_le_smul {ε} [TopologicalSpace ε] [ENormedAddMonoid ε]
221+
theorem Integrable.of_measure_le_smul {ε} [TopologicalSpace ε] [ESeminormedAddMonoid ε]
222222
{μ' : Measure α} {c : ℝ≥0∞} (hc : c ≠ ∞) (hμ'_le : μ' ≤ c • μ)
223223
{f : α → ε} (hf : Integrable f μ) : Integrable f μ' := by
224224
rw [← memLp_one_iff_integrable] at hf ⊢
@@ -276,7 +276,7 @@ theorem integrable_finset_sum_measure [PseudoMetrizableSpace ε]
276276

277277
section
278278

279-
variable {ε : Type*} [TopologicalSpace ε] [ENormedAddMonoid ε]
279+
variable {ε : Type*} [TopologicalSpace ε] [ESeminormedAddMonoid ε]
280280

281281
@[fun_prop]
282282
theorem Integrable.smul_measure {f : α → ε} (h : Integrable f μ) {c : ℝ≥0∞} (hc : c ≠ ∞) :
@@ -363,9 +363,9 @@ theorem lintegral_edist_lt_top {f g : α → β} (hf : Integrable f μ) (hg : In
363363
simp_rw [Pi.zero_apply, ← hasFiniteIntegral_iff_edist]
364364
exact ⟨hf.hasFiniteIntegral, hg.hasFiniteIntegral⟩)
365365

366-
section ENormedAddMonoid
366+
section ESeminormedAddMonoid
367367

368-
variable {ε' : Type*} [TopologicalSpace ε'] [ENormedAddMonoid ε']
368+
variable {ε' : Type*} [TopologicalSpace ε'] [ESeminormedAddMonoid ε']
369369

370370
variable (α ε') in
371371
@[simp]
@@ -395,11 +395,11 @@ lemma Integrable.of_subsingleton_codomain [Subsingleton ε'] {f : α → ε'} :
395395
Integrable f μ :=
396396
integrable_zero _ _ _ |>.congr <| .of_forall fun _ ↦ Subsingleton.elim _ _
397397

398-
end ENormedAddMonoid
398+
end ESeminormedAddMonoid
399399

400-
section ENormedAddCommMonoid
400+
section ESeminormedAddCommMonoid
401401

402-
variable {ε' : Type*} [TopologicalSpace ε'] [ENormedAddCommMonoid ε'] [ContinuousAdd ε']
402+
variable {ε' : Type*} [TopologicalSpace ε'] [ESeminormedAddCommMonoid ε'] [ContinuousAdd ε']
403403

404404
@[fun_prop]
405405
theorem integrable_finset_sum' {ι} (s : Finset ι) {f : ι → α → ε'}
@@ -412,7 +412,7 @@ theorem integrable_finset_sum {ι} (s : Finset ι) {f : ι → α → ε'}
412412
(hf : ∀ i ∈ s, Integrable (f i) μ) : Integrable (fun a => ∑ i ∈ s, f i a) μ := by
413413
simpa only [← Finset.sum_apply] using integrable_finset_sum' s hf
414414

415-
end ENormedAddCommMonoid
415+
end ESeminormedAddCommMonoid
416416

417417
/-- If `f` is integrable, then so is `-f`.
418418
See `Integrable.neg'` for the same statement, but formulated with `x ↦ - f x` instead of `-f`. -/
@@ -947,7 +947,7 @@ end PosPart
947947
section IsBoundedSMul
948948

949949
variable {𝕜 : Type*}
950-
{ε : Type*} [TopologicalSpace ε] [ENormedAddMonoid ε]
950+
{ε : Type*} [TopologicalSpace ε] [ESeminormedAddMonoid ε]
951951

952952
@[fun_prop]
953953
theorem Integrable.smul [NormedAddCommGroup 𝕜] [SMulZeroClass 𝕜 β] [IsBoundedSMul 𝕜 β] (c : 𝕜)

Mathlib/MeasureTheory/Function/LocallyIntegrable.lean

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ open scoped Topology Interval ENNReal
2929
variable {X Y ε ε' ε'' E F R : Type*} [MeasurableSpace X] [TopologicalSpace X]
3030
variable [MeasurableSpace Y] [TopologicalSpace Y]
3131
variable [TopologicalSpace ε] [ContinuousENorm ε] [TopologicalSpace ε'] [ContinuousENorm ε']
32-
[TopologicalSpace ε''] [ENormedAddMonoid ε'']
32+
[TopologicalSpace ε''] [ESeminormedAddMonoid ε'']
3333
[NormedAddCommGroup E] [NormedAddCommGroup F] {f g : X → ε} {μ : Measure X} {s : Set X}
3434

3535
namespace MeasureTheory
@@ -339,13 +339,15 @@ protected theorem LocallyIntegrable.smul {f : X → E} {𝕜 : Type*} [NormedAdd
339339
[SMulZeroClass 𝕜 E] [IsBoundedSMul 𝕜 E] (hf : LocallyIntegrable f μ) (c : 𝕜) :
340340
LocallyIntegrable (c • f) μ := fun x ↦ (hf x).smul c
341341

342-
variable {ε''' : Type*} [TopologicalSpace ε'''] [ENormedAddCommMonoid ε'''] [ContinuousAdd ε'''] in
342+
variable {ε''' : Type*} [TopologicalSpace ε'''] [ESeminormedAddCommMonoid ε''']
343+
[ContinuousAdd ε'''] in
343344
theorem locallyIntegrable_finset_sum' {ι} (s : Finset ι) {f : ι → X → ε'''}
344345
(hf : ∀ i ∈ s, LocallyIntegrable (f i) μ) : LocallyIntegrable (∑ i ∈ s, f i) μ :=
345346
Finset.sum_induction f (fun g => LocallyIntegrable g μ) (fun _ _ => LocallyIntegrable.add)
346347
locallyIntegrable_zero hf
347348

348-
variable {ε''' : Type*} [TopologicalSpace ε'''] [ENormedAddCommMonoid ε'''] [ContinuousAdd ε'''] in
349+
variable {ε''' : Type*} [TopologicalSpace ε'''] [ESeminormedAddCommMonoid ε''']
350+
[ContinuousAdd ε'''] in
349351
theorem locallyIntegrable_finset_sum {ι} (s : Finset ι) {f : ι → X → ε'''}
350352
(hf : ∀ i ∈ s, LocallyIntegrable (f i) μ) : LocallyIntegrable (fun a ↦ ∑ i ∈ s, f i a) μ := by
351353
simpa only [← Finset.sum_apply] using locallyIntegrable_finset_sum' s hf

0 commit comments

Comments
 (0)