Skip to content

Commit 44f760b

Browse files
committed
feat: ‖x i‖ ≤ ‖x‖ for PiLp (#24402)
1 parent 99dfc6c commit 44f760b

File tree

1 file changed

+44
-6
lines changed

1 file changed

+44
-6
lines changed

Mathlib/Analysis/Normed/Lp/PiLp.lean

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -369,22 +369,26 @@ abbrev pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
369369

370370
attribute [local instance] PiLp.pseudoMetricAux
371371

372-
theorem lipschitzWith_equiv_aux : LipschitzWith 1 (WithLp.equiv p (∀ i, β i)) := by
373-
intro x y
374-
simp_rw [ENNReal.coe_one, one_mul, edist_pi_def, Finset.sup_le_iff, Finset.mem_univ,
375-
forall_true_left, WithLp.equiv_pi_apply]
372+
variable {p β} in
373+
private theorem edist_apply_le_edist_aux (x y : PiLp p β) (i : ι) :
374+
edist (x i) (y i) ≤ edist x y := by
376375
rcases p.dichotomy with (rfl | h)
377-
· simpa only [edist_eq_iSup] using le_iSup fun i => edist (x i) (y i)
376+
· simpa only [edist_eq_iSup] using le_iSup (fun i => edist (x i) (y i)) i
378377
· have cancel : p.toReal * (1 / p.toReal) = 1 := mul_div_cancel₀ 1 (zero_lt_one.trans_le h).ne'
379378
rw [edist_eq_sum (zero_lt_one.trans_le h)]
380-
intro i
381379
calc
382380
edist (x i) (y i) = (edist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) := by
383381
simp [← ENNReal.rpow_mul, cancel, -one_div]
384382
_ ≤ (∑ i, edist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) := by
385383
gcongr
386384
exact Finset.single_le_sum (fun i _ => (bot_le : (0 : ℝ≥0∞) ≤ _)) (Finset.mem_univ i)
387385

386+
theorem lipschitzWith_equiv_aux : LipschitzWith 1 (WithLp.equiv p (∀ i, β i)) :=
387+
.of_edist_le fun x y => by
388+
simp_rw [edist_pi_def, Finset.sup_le_iff, Finset.mem_univ,
389+
forall_true_left, WithLp.equiv_pi_apply]
390+
exact edist_apply_le_edist_aux _ _
391+
388392
theorem antilipschitzWith_equiv_aux :
389393
AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (WithLp.equiv p (∀ i, β i)) := by
390394
intro x y
@@ -494,6 +498,23 @@ theorem nndist_eq_iSup {β : ι → Type*} [∀ i, PseudoMetricSpace (β i)] (x
494498
push_cast
495499
exact dist_eq_iSup _ _
496500

501+
section
502+
variable {β p}
503+
504+
theorem edist_apply_le [∀ i, PseudoEMetricSpace (β i)] (x y : PiLp p β) (i : ι) :
505+
edist (x i) (y i) ≤ edist x y :=
506+
edist_apply_le_edist_aux x y i
507+
508+
theorem nndist_apply_le [∀ i, PseudoMetricSpace (β i)] (x y : PiLp p β) (i : ι) :
509+
nndist (x i) (y i) ≤ nndist x y := by
510+
simpa [← coe_nnreal_ennreal_nndist] using edist_apply_le x y i
511+
512+
theorem dist_apply_le [∀ i, PseudoMetricSpace (β i)] (x y : PiLp p β) (i : ι) :
513+
dist (x i) (y i) ≤ dist x y :=
514+
nndist_apply_le x y i
515+
516+
end
517+
497518
theorem lipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] :
498519
LipschitzWith 1 (WithLp.equiv p (∀ i, β i)) :=
499520
lipschitzWith_equiv_aux p β
@@ -525,6 +546,23 @@ instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
525546
simp only [dist_eq_sum (zero_lt_one.trans_le h), norm_eq_sum (zero_lt_one.trans_le h),
526547
dist_eq_norm, sub_apply] }
527548

549+
section
550+
variable {β p}
551+
552+
theorem enorm_apply_le [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp p β) (i : ι) :
553+
‖x i‖ₑ ≤ ‖x‖ₑ := by
554+
simpa using edist_apply_le x 0 i
555+
556+
theorem nnnorm_apply_le [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp p β) (i : ι) :
557+
‖x i‖₊ ≤ ‖x‖₊ := by
558+
simpa using nndist_apply_le x 0 i
559+
560+
theorem norm_apply_le [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp p β) (i : ι) :
561+
‖x i‖ ≤ ‖x‖ := by
562+
simpa using dist_apply_le x 0 i
563+
564+
end
565+
528566
/-- normed group instance on the product of finitely many normed groups, using the `L^p` norm. -/
529567
instance normedAddCommGroup [∀ i, NormedAddCommGroup (α i)] : NormedAddCommGroup (PiLp p α) :=
530568
{ PiLp.seminormedAddCommGroup p α with

0 commit comments

Comments
 (0)