@@ -68,7 +68,7 @@ different distances. -/
68
68
@[nolint unused_arguments]
69
69
def pi_Lp {ι : Type *} (p : ℝ) (α : ι → Type *) : Type * := Π (i : ι), α i
70
70
71
- instance {ι : Type *} (p : ℝ) (α : ι → Type *) [∀ i, inhabited (α i)] : inhabited (pi_Lp p α) :=
71
+ instance {ι : Type *} (p : ℝ) (α : ι → Type *) [Π i, inhabited (α i)] : inhabited (pi_Lp p α) :=
72
72
⟨λ i, default⟩
73
73
74
74
instance fact_one_le_one_real : fact ((1 :ℝ) ≤ 1 ) := ⟨rfl.le⟩
@@ -101,7 +101,7 @@ from the edistance (which is equal to it, but not defeq). See Note [forgetful in
101
101
explaining why having definitionally the right uniformity is often important.
102
102
-/
103
103
104
- variables [∀ i, emetric_space (α i)] [∀ i, pseudo_emetric_space (β i)] [fintype ι]
104
+ variables [Π i, emetric_space (α i)] [Π i, pseudo_emetric_space (β i)] [fintype ι]
105
105
include fact_one_le_p
106
106
107
107
/-- Endowing the space `pi_Lp p β` with the `L^p` pseudoedistance. This definition is not
@@ -112,20 +112,20 @@ the product one, and then register an instance in which we replace the uniform s
112
112
product one using this pseudoemetric space and `pseudo_emetric_space.replace_uniformity`. -/
113
113
def pseudo_emetric_aux : pseudo_emetric_space (pi_Lp p β) :=
114
114
have pos : 0 < p := lt_of_lt_of_le zero_lt_one fact_one_le_p.out,
115
- { edist := λ f g, (∑ (i : ι), ( edist (f i) (g i) ) ^ p) ^ (1 /p),
115
+ { edist := λ f g, (∑ i, edist (f i) (g i) ^ p) ^ (1 /p),
116
116
edist_self := λ f, by simp [edist, ennreal.zero_rpow_of_pos pos,
117
117
ennreal.zero_rpow_of_pos (inv_pos.2 pos)],
118
118
edist_comm := λ f g, by simp [edist, edist_comm],
119
119
edist_triangle := λ f g h, calc
120
- (∑ (i : ι) , edist (f i) (h i) ^ p) ^ (1 / p) ≤
121
- (∑ (i : ι) , (edist (f i) (g i) + edist (g i) (h i)) ^ p) ^ (1 / p) :
120
+ (∑ i , edist (f i) (h i) ^ p) ^ (1 / p) ≤
121
+ (∑ i , (edist (f i) (g i) + edist (g i) (h i)) ^ p) ^ (1 / p) :
122
122
begin
123
123
apply ennreal.rpow_le_rpow _ (one_div_nonneg.2 $ le_of_lt pos),
124
124
refine finset.sum_le_sum (λ i hi, _),
125
125
exact ennreal.rpow_le_rpow (edist_triangle _ _ _) (le_trans zero_le_one fact_one_le_p.out)
126
126
end
127
127
... ≤
128
- (∑ (i : ι) , edist (f i) (g i) ^ p) ^ (1 / p) + (∑ (i : ι) , edist (g i) (h i) ^ p) ^ (1 / p) :
128
+ (∑ i , edist (f i) (g i) ^ p) ^ (1 / p) + (∑ i , edist (g i) (h i) ^ p) ^ (1 / p) :
129
129
ennreal.Lp_add_le _ _ _ fact_one_le_p.out }
130
130
131
131
/-- Endowing the space `pi_Lp p α` with the `L^p` edistance. This definition is not satisfactory,
@@ -139,7 +139,7 @@ def emetric_aux : emetric_space (pi_Lp p α) :=
139
139
begin
140
140
have pos : 0 < p := lt_of_lt_of_le zero_lt_one fact_one_le_p.out,
141
141
letI h := pseudo_emetric_aux p α,
142
- have h : edist f g = (∑ (i : ι) , (edist (f i) (g i)) ^ p) ^ (1 /p) := rfl,
142
+ have h : edist f g = (∑ i , (edist (f i) (g i)) ^ p) ^ (1 /p) := rfl,
143
143
simp [h, ennreal.rpow_eq_zero_iff, pos, asymm pos, finset.sum_eq_zero_iff_of_nonneg] at hfg,
144
144
exact funext hfg
145
145
end ,
@@ -158,7 +158,7 @@ begin
158
158
calc
159
159
edist (x i) (y i) = (edist (x i) (y i) ^ p) ^ (1 /p) :
160
160
by simp [← ennreal.rpow_mul, cancel, -one_div]
161
- ... ≤ (∑ (i : ι) , edist (x i) (y i) ^ p) ^ (1 / p) :
161
+ ... ≤ (∑ i , edist (x i) (y i) ^ p) ^ (1 / p) :
162
162
begin
163
163
apply ennreal.rpow_le_rpow _ (one_div_nonneg.2 $ le_of_lt pos),
164
164
exact finset.single_le_sum (λ i hi, (bot_le : (0 : ℝ≥0 ∞) ≤ _)) (finset.mem_univ i)
@@ -173,8 +173,8 @@ begin
173
173
have cancel : p * (1 /p) = 1 := mul_div_cancel' 1 (ne_of_gt pos),
174
174
assume x y,
175
175
simp [edist, -one_div],
176
- calc (∑ (i : ι) , edist (x i) (y i) ^ p) ^ (1 / p) ≤
177
- (∑ (i : ι) , edist (pi_Lp.equiv p β x) (pi_Lp.equiv p β y) ^ p) ^ (1 / p) :
176
+ calc (∑ i , edist (x i) (y i) ^ p) ^ (1 / p) ≤
177
+ (∑ i , edist (pi_Lp.equiv p β x) (pi_Lp.equiv p β y) ^ p) ^ (1 / p) :
178
178
begin
179
179
apply ennreal.rpow_le_rpow _ nonneg,
180
180
apply finset.sum_le_sum (λ i hi, _),
@@ -208,101 +208,116 @@ end
208
208
209
209
/-! ### Instances on finite `L^p` products -/
210
210
211
- instance uniform_space [∀ i, uniform_space (β i)] : uniform_space (pi_Lp p β) :=
211
+ instance uniform_space [Π i, uniform_space (β i)] : uniform_space (pi_Lp p β) :=
212
212
Pi.uniform_space _
213
213
214
214
variable [fintype ι]
215
215
include fact_one_le_p
216
216
217
217
/-- pseudoemetric space instance on the product of finitely many pseudoemetric spaces, using the
218
218
`L^p` pseudoedistance, and having as uniformity the product uniformity. -/
219
- instance [∀ i, pseudo_emetric_space (β i)] : pseudo_emetric_space (pi_Lp p β) :=
219
+ instance [Π i, pseudo_emetric_space (β i)] : pseudo_emetric_space (pi_Lp p β) :=
220
220
(pseudo_emetric_aux p β).replace_uniformity (aux_uniformity_eq p β).symm
221
221
222
222
/-- emetric space instance on the product of finitely many emetric spaces, using the `L^p`
223
223
edistance, and having as uniformity the product uniformity. -/
224
- instance [∀ i, emetric_space (α i)] : emetric_space (pi_Lp p α) :=
224
+ instance [Π i, emetric_space (α i)] : emetric_space (pi_Lp p α) :=
225
225
(emetric_aux p α).replace_uniformity (aux_uniformity_eq p α).symm
226
226
227
227
omit fact_one_le_p
228
- protected lemma edist {p : ℝ} [fact (1 ≤ p)] {β : ι → Type *}
229
- [∀ i, pseudo_emetric_space (β i)] (x y : pi_Lp p β) :
230
- edist x y = (∑ (i : ι), ( edist (x i) (y i) ) ^ p) ^ (1 /p) := rfl
228
+ lemma edist_eq {p : ℝ} [fact (1 ≤ p)] {β : ι → Type *}
229
+ [Π i, pseudo_emetric_space (β i)] (x y : pi_Lp p β) :
230
+ edist x y = (∑ i, edist (x i) (y i) ^ p) ^ (1 /p) := rfl
231
231
include fact_one_le_p
232
232
233
233
/-- pseudometric space instance on the product of finitely many psuedometric spaces, using the
234
234
`L^p` distance, and having as uniformity the product uniformity. -/
235
- instance [∀ i, pseudo_metric_space (β i)] : pseudo_metric_space (pi_Lp p β) :=
235
+ instance [Π i, pseudo_metric_space (β i)] : pseudo_metric_space (pi_Lp p β) :=
236
236
begin
237
237
/- we construct the instance from the pseudo emetric space instance to avoid checking again that
238
238
the uniformity is the same as the product uniformity, but we register nevertheless a nice formula
239
239
for the distance -/
240
240
have pos : 0 < p := lt_of_lt_of_le zero_lt_one fact_one_le_p.out,
241
241
refine pseudo_emetric_space.to_pseudo_metric_space_of_dist
242
- (λf g, (∑ (i : ι), ( dist (f i) (g i) ) ^ p) ^ (1 /p)) (λ f g, _) (λ f g, _),
243
- { simp [pi_Lp.edist , ennreal.rpow_eq_top_iff, asymm pos, pos,
242
+ (λf g, (∑ i, dist (f i) (g i) ^ p) ^ (1 /p)) (λ f g, _) (λ f g, _),
243
+ { simp [pi_Lp.edist_eq , ennreal.rpow_eq_top_iff, asymm pos, pos,
244
244
ennreal.sum_eq_top_iff, edist_ne_top] },
245
245
{ have A : ∀ (i : ι), i ∈ (finset.univ : finset ι) → edist (f i) (g i) ^ p ≠ ⊤ :=
246
246
λ i hi, by simp [lt_top_iff_ne_top, edist_ne_top, le_of_lt pos],
247
- simp [dist, -one_div, pi_Lp.edist , ← ennreal.to_real_rpow,
247
+ simp [dist, -one_div, pi_Lp.edist_eq , ← ennreal.to_real_rpow,
248
248
ennreal.to_real_sum A, dist_edist] }
249
249
end
250
250
251
251
/-- metric space instance on the product of finitely many metric spaces, using the `L^p` distance,
252
252
and having as uniformity the product uniformity. -/
253
- instance [∀ i, metric_space (α i)] : metric_space (pi_Lp p α) :=
253
+ instance [Π i, metric_space (α i)] : metric_space (pi_Lp p α) :=
254
254
begin
255
255
/- we construct the instance from the emetric space instance to avoid checking again that the
256
256
uniformity is the same as the product uniformity, but we register nevertheless a nice formula
257
257
for the distance -/
258
258
have pos : 0 < p := lt_of_lt_of_le zero_lt_one fact_one_le_p.out,
259
259
refine emetric_space.to_metric_space_of_dist
260
- (λf g, (∑ (i : ι), ( dist (f i) (g i) ) ^ p) ^ (1 /p)) (λ f g, _) (λ f g, _),
261
- { simp [pi_Lp.edist , ennreal.rpow_eq_top_iff, asymm pos, pos,
260
+ (λf g, (∑ i, dist (f i) (g i) ^ p) ^ (1 /p)) (λ f g, _) (λ f g, _),
261
+ { simp [pi_Lp.edist_eq , ennreal.rpow_eq_top_iff, asymm pos, pos,
262
262
ennreal.sum_eq_top_iff, edist_ne_top] },
263
263
{ have A : ∀ (i : ι), i ∈ (finset.univ : finset ι) → edist (f i) (g i) ^ p ≠ ⊤ :=
264
264
λ i hi, by simp [edist_ne_top, pos.le],
265
- simp [dist, -one_div, pi_Lp.edist , ← ennreal.to_real_rpow,
265
+ simp [dist, -one_div, pi_Lp.edist_eq , ← ennreal.to_real_rpow,
266
266
ennreal.to_real_sum A, dist_edist] }
267
267
end
268
268
269
269
omit fact_one_le_p
270
- protected lemma dist {p : ℝ} [fact (1 ≤ p)] {β : ι → Type *}
271
- [∀ i, pseudo_metric_space (β i)] (x y : pi_Lp p β) :
272
- dist x y = (∑ (i : ι), (dist (x i) (y i)) ^ p) ^ (1 /p) := rfl
270
+ lemma dist_eq {p : ℝ} [fact (1 ≤ p)] {β : ι → Type *}
271
+ [Π i, pseudo_metric_space (β i)] (x y : pi_Lp p β) :
272
+ dist x y = (∑ i : ι, dist (x i) (y i) ^ p) ^ (1 /p) := rfl
273
+
274
+ lemma nndist_eq {p : ℝ} [fact (1 ≤ p)] {β : ι → Type *}
275
+ [Π i, pseudo_metric_space (β i)] (x y : pi_Lp p β) :
276
+ nndist x y = (∑ i : ι, nndist (x i) (y i) ^ p) ^ (1 /p) :=
277
+ subtype.ext $ by { push_cast, exact dist_eq _ _ }
278
+
273
279
include fact_one_le_p
274
280
275
281
/-- seminormed group instance on the product of finitely many normed groups, using the `L^p`
276
282
norm. -/
277
- instance semi_normed_group [∀ i, semi_normed_group (β i)] : semi_normed_group (pi_Lp p β) :=
278
- { norm := λf, (∑ (i : ι), norm ( f i) ^ p) ^ (1 /p),
279
- dist_eq := λ x y, by { simp [pi_Lp.dist , dist_eq_norm, sub_eq_add_neg] } ,
283
+ instance semi_normed_group [Π i, semi_normed_group (β i)] : semi_normed_group (pi_Lp p β) :=
284
+ { norm := λf, (∑ i, ∥ f i∥ ^ p) ^ (1 /p),
285
+ dist_eq := λ x y, by simp [pi_Lp.dist_eq , dist_eq_norm, sub_eq_add_neg],
280
286
.. pi.add_comm_group }
281
287
282
288
/-- normed group instance on the product of finitely many normed groups, using the `L^p` norm. -/
283
- instance normed_group [∀ i, normed_group (α i)] : normed_group (pi_Lp p α) :=
289
+ instance normed_group [Π i, normed_group (α i)] : normed_group (pi_Lp p α) :=
284
290
{ ..pi_Lp.semi_normed_group p α }
285
291
286
292
omit fact_one_le_p
287
293
lemma norm_eq {p : ℝ} [fact (1 ≤ p)] {β : ι → Type *}
288
- [∀ i, semi_normed_group (β i)] (f : pi_Lp p β) :
289
- ∥f∥ = (∑ (i : ι) , ∥f i∥ ^ p) ^ (1 /p) := rfl
294
+ [Π i, semi_normed_group (β i)] (f : pi_Lp p β) :
295
+ ∥f∥ = (∑ i , ∥f i∥ ^ p) ^ (1 /p) := rfl
290
296
291
297
lemma nnnorm_eq {p : ℝ} [fact (1 ≤ p)] {β : ι → Type *}
292
- [∀ i, semi_normed_group (β i)] (f : pi_Lp p β) :
293
- ∥f∥₊ = (∑ (i : ι) , ∥f i∥₊ ^ p) ^ (1 /p) :=
298
+ [Π i, semi_normed_group (β i)] (f : pi_Lp p β) :
299
+ ∥f∥₊ = (∑ i , ∥f i∥₊ ^ p) ^ (1 /p) :=
294
300
by { ext, simp [nnreal.coe_sum, norm_eq] }
295
301
296
302
lemma norm_eq_of_nat {p : ℝ} [fact (1 ≤ p)] {β : ι → Type *}
297
- [∀ i, semi_normed_group (β i)] (n : ℕ) (h : p = n) (f : pi_Lp p β) :
298
- ∥f∥ = (∑ (i : ι) , ∥f i∥ ^ n) ^ (1 /(n : ℝ)) :=
303
+ [Π i, semi_normed_group (β i)] (n : ℕ) (h : p = n) (f : pi_Lp p β) :
304
+ ∥f∥ = (∑ i , ∥f i∥ ^ n) ^ (1 /(n : ℝ)) :=
299
305
by simp [norm_eq, h, real.sqrt_eq_rpow, ←real.rpow_nat_cast]
306
+
307
+ lemma norm_eq_of_L2 {β : ι → Type *} [Π i, semi_normed_group (β i)] (x : pi_Lp 2 β) :
308
+ ∥x∥ = sqrt (∑ (i : ι), ∥x i∥ ^ 2 ) :=
309
+ by { rw [norm_eq_of_nat 2 ]; simp [sqrt_eq_rpow] }
310
+
311
+ lemma nnnorm_eq_of_L2 {β : ι → Type *} [Π i, semi_normed_group (β i)] (x : pi_Lp 2 β) :
312
+ ∥x∥₊ = nnreal.sqrt (∑ (i : ι), ∥x i∥₊ ^ 2 ) :=
313
+ subtype.ext $ by { push_cast, exact norm_eq_of_L2 x }
314
+
300
315
include fact_one_le_p
301
316
302
317
variables (𝕜 : Type *) [normed_field 𝕜]
303
318
304
319
/-- The product of finitely many normed spaces is a normed space, with the `L^p` norm. -/
305
- instance normed_space [∀ i, semi_normed_group (β i)] [∀ i, normed_space 𝕜 (β i)] :
320
+ instance normed_space [Π i, semi_normed_group (β i)] [Π i, normed_space 𝕜 (β i)] :
306
321
normed_space 𝕜 (pi_Lp p β) :=
307
322
{ norm_smul_le :=
308
323
begin
0 commit comments