Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 73afba4

Browse files
committed
refactor(analysis/normed/group/basic): Replace normed_add_comm_group.core with group norms (#16238)
Delete `seminormed_add_comm_group.core`/`normed_add_comm_group.core` in favor of `add_group_norm`/`group_norm`. The former are unbundled prop versions of the latter, specialized to `∥ ∥`.
1 parent 98c61b1 commit 73afba4

File tree

10 files changed

+103
-111
lines changed

10 files changed

+103
-111
lines changed

src/algebra/order/hom/basic.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,15 @@ export mul_le_add_hom_class (map_mul_le_add)
5656

5757
attribute [simp] map_nonneg
5858

59+
@[to_additive] lemma le_map_mul_map_div [group α] [comm_semigroup β] [has_le β]
60+
[submultiplicative_hom_class F α β] (f : F) (a b : α) : f a ≤ f b * f (a / b) :=
61+
by simpa only [mul_comm, div_mul_cancel'] using map_mul_le_mul f (a / b) b
62+
63+
@[to_additive]
64+
lemma le_map_div_mul_map_div [group α] [comm_semigroup β] [has_le β]
65+
[submultiplicative_hom_class F α β] (f : F) (a b c: α) : f (a / c) ≤ f (a / b) * f (b / c) :=
66+
by simpa only [div_mul_div_cancel'] using map_mul_le_mul f (a / b) (b / c)
67+
5968
@[to_additive] lemma le_map_add_map_div [group α] [add_comm_semigroup β] [has_le β]
6069
[mul_le_add_hom_class F α β] (f : F) (a b : α) : f a ≤ f b + f (a / b) :=
6170
by simpa only [add_comm, div_mul_cancel'] using map_mul_le_add f (a / b) b

src/analysis/complex/basic.lean

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@ instance : has_norm ℂ := ⟨abs⟩
3939
@[simp] lemma norm_eq_abs (z : ℂ) : ∥z∥ = abs z := rfl
4040

4141
instance : normed_add_comm_group ℂ :=
42-
normed_add_comm_group.of_core ℂ
43-
{ norm_eq_zero_iff := λ x, abs.eq_zero,
44-
triangle := abs.add_le,
45-
norm_neg := abs.map_neg }
42+
add_group_norm.to_normed_add_comm_group
43+
{ map_zero' := map_zero abs,
44+
neg' := abs.map_neg,
45+
eq_zero_of_map_eq_zero' := λ _, abs.eq_zero.1,
46+
..abs }
4647

4748
instance : normed_field ℂ :=
4849
{ norm := abs,

src/analysis/inner_product_space/basic.lean

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -325,32 +325,25 @@ end
325325

326326
/-- Normed group structure constructed from an `inner_product_space.core` structure -/
327327
def to_normed_add_comm_group : normed_add_comm_group F :=
328-
normed_add_comm_group.of_core F
329-
{ norm_eq_zero_iff := assume x,
330-
begin
331-
split,
332-
{ intro H,
333-
change sqrt (re ⟪x, x⟫) = 0 at H,
334-
rw [sqrt_eq_zero inner_self_nonneg] at H,
335-
apply (inner_self_eq_zero : ⟪x, x⟫ = 0 ↔ x = 0).mp,
336-
rw ext_iff,
337-
exact ⟨by simp [H], by simp [inner_self_im_zero]⟩ },
338-
{ rintro rfl,
339-
change sqrt (re ⟪0, 0⟫) = 0,
340-
simp only [sqrt_zero, inner_zero_right, add_monoid_hom.map_zero] }
341-
end,
342-
triangle := assume x y,
343-
begin
328+
add_group_norm.to_normed_add_comm_group
329+
{ to_fun := λ x, sqrt (re ⟪x, x⟫),
330+
map_zero' := by simp only [sqrt_zero, inner_zero_right, map_zero],
331+
neg' := λ x, by simp only [inner_neg_left, neg_neg, inner_neg_right],
332+
add_le' := λ x y, begin
344333
have h₁ : abs ⟪x, y⟫ ≤ ∥x∥ * ∥y∥ := abs_inner_le_norm _ _,
345334
have h₂ : re ⟪x, y⟫ ≤ abs ⟪x, y⟫ := re_le_abs _,
346335
have h₃ : re ⟪x, y⟫ ≤ ∥x∥ * ∥y∥ := by linarith,
347336
have h₄ : re ⟪y, x⟫ ≤ ∥x∥ * ∥y∥ := by rwa [←inner_conj_sym, conj_re],
348337
have : ∥x + y∥ * ∥x + y∥ ≤ (∥x∥ + ∥y∥) * (∥x∥ + ∥y∥),
349338
{ simp [←inner_self_eq_norm_mul_norm, inner_add_add_self, add_mul, mul_add, mul_comm],
350339
linarith },
351-
exact nonneg_le_nonneg_of_sq_le_sq (add_nonneg (sqrt_nonneg _) (sqrt_nonneg _)) this
340+
exact nonneg_le_nonneg_of_sq_le_sq (add_nonneg (sqrt_nonneg _) (sqrt_nonneg _)) this,
352341
end,
353-
norm_neg := λ x, by simp only [norm, inner_neg_left, neg_neg, inner_neg_right] }
342+
eq_zero_of_map_eq_zero' := λ x hx, (inner_self_eq_zero : ⟪x, x⟫ = 0 ↔ x = 0).1 $ begin
343+
change sqrt (re ⟪x, x⟫) = 0 at hx,
344+
rw [sqrt_eq_zero inner_self_nonneg] at hx,
345+
exact ext (by simp [hx]) (by simp [inner_self_im_zero]),
346+
end }
354347

355348
local attribute [instance] to_normed_add_comm_group
356349

src/analysis/normed/group/basic.lean

Lines changed: 20 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -81,28 +81,18 @@ def seminormed_add_comm_group.of_add_dist' [has_norm E] [add_comm_group E] [pseu
8181
{ rw [sub_eq_add_neg, ← add_right_neg y], apply H2 }
8282
end }
8383

84-
/-- A seminormed group can be built from a seminorm that satisfies algebraic properties. This is
85-
formalised in this structure. -/
86-
structure seminormed_add_comm_group.core (E : Type*) [add_comm_group E] [has_norm E] : Prop :=
87-
(norm_zero : ∥(0 : E)∥ = 0)
88-
(triangle : ∀ x y : E, ∥x + y∥ ≤ ∥x∥ + ∥y∥)
89-
(norm_neg : ∀ x : E, ∥-x∥ = ∥x∥)
90-
91-
/-- Constructing a seminormed group from core properties of a seminorm, i.e., registering the
92-
pseudodistance and the pseudometric space structure from the seminorm properties. Note that in most
93-
cases this instance creates bad definitional equalities (e.g., it does not take into account
94-
a possibly existing `uniform_space` instance on `E`). -/
95-
def seminormed_add_comm_group.of_core (E : Type*) [add_comm_group E] [has_norm E]
96-
(C : seminormed_add_comm_group.core E) : seminormed_add_comm_group E :=
97-
{ dist := λ x y, ∥x - y∥,
98-
dist_eq := assume x y, by refl,
99-
dist_self := assume x, by simp [C.norm_zero],
100-
dist_triangle := assume x y z,
101-
calc ∥x - z∥ = ∥x - y + (y - z)∥ : by rw sub_add_sub_cancel
102-
... ≤ ∥x - y∥ + ∥y - z∥ : C.triangle _ _,
103-
dist_comm := assume x y,
104-
calc ∥x - y∥ = ∥ -(y - x)∥ : by simp
105-
... = ∥y - x∥ : by { rw [C.norm_neg] } }
84+
/-- Construct a seminormed group from a seminorm, i.e., registering the pseudodistance and the
85+
pseudometric space structure from the seminorm properties. Note that in most cases this instance
86+
creates bad definitional equalities (e.g., it does not take into account a possibly existing
87+
`uniform_space` instance on `E`). -/
88+
def add_group_seminorm.to_seminormed_add_comm_group [add_comm_group E] (f : add_group_seminorm E) :
89+
seminormed_add_comm_group E :=
90+
{ dist := λ x y, f (x - y),
91+
norm := f,
92+
dist_eq := λ x y, rfl,
93+
dist_self := λ x, by simp only [sub_self, map_zero],
94+
dist_triangle := le_map_sub_add_map_sub f,
95+
dist_comm := map_sub_rev f }
10696

10797
instance : normed_add_comm_group punit :=
10898
{ norm := function.const _ 0,
@@ -1147,32 +1137,14 @@ def normed_add_comm_group.of_add_dist [has_norm E] [add_comm_group E] [metric_sp
11471137
{ have := H2 (x-y) 0 y, rwa [sub_add_cancel, zero_add] at this }
11481138
end }
11491139

1150-
/-- A normed group can be built from a norm that satisfies algebraic properties. This is
1151-
formalised in this structure. -/
1152-
structure normed_add_comm_group.core (E : Type*) [add_comm_group E] [has_norm E] : Prop :=
1153-
(norm_eq_zero_iff : ∀ x : E, ∥x∥ = 0 ↔ x = 0)
1154-
(triangle : ∀ x y : E, ∥x + y∥ ≤ ∥x∥ + ∥y∥)
1155-
(norm_neg : ∀ x : E, ∥-x∥ = ∥x∥)
1156-
1157-
/-- The `seminormed_add_comm_group.core` induced by a `normed_add_comm_group.core`. -/
1158-
lemma normed_add_comm_group.core.to_seminormed_add_comm_group.core {E : Type*} [add_comm_group E]
1159-
[has_norm E]
1160-
(C : normed_add_comm_group.core E) : seminormed_add_comm_group.core E :=
1161-
{ norm_zero := (C.norm_eq_zero_iff 0).2 rfl,
1162-
triangle := C.triangle,
1163-
norm_neg := C.norm_neg }
1164-
1165-
/-- Constructing a normed group from core properties of a norm, i.e., registering the distance and
1166-
the metric space structure from the norm properties. -/
1167-
def normed_add_comm_group.of_core (E : Type*) [add_comm_group E] [has_norm E]
1168-
(C : normed_add_comm_group.core E) : normed_add_comm_group E :=
1169-
{ eq_of_dist_eq_zero := λ x y h,
1170-
begin
1171-
rw [dist_eq_norm] at h,
1172-
exact sub_eq_zero.mp ((C.norm_eq_zero_iff _).1 h)
1173-
end
1174-
..seminormed_add_comm_group.of_core E
1175-
(normed_add_comm_group.core.to_seminormed_add_comm_group.core C) }
1140+
/-- Construct a normed group from a norm, i.e., registering the distance and the metric space
1141+
structure from the norm properties. Note that in most cases this instance creates bad definitional
1142+
equalities (e.g., it does not take into account a possibly existing `uniform_space` instance on
1143+
`E`). -/
1144+
def add_group_norm.to_normed_add_comm_group [add_comm_group E] (f : add_group_norm E) :
1145+
normed_add_comm_group E :=
1146+
{ eq_of_dist_eq_zero := λ x y h, sub_eq_zero.1 $ eq_zero_of_map_eq_zero f h,
1147+
..f.to_add_group_seminorm.to_seminormed_add_comm_group }
11761148

11771149
variables [normed_add_comm_group E] [normed_add_comm_group F] {x y : E}
11781150

src/analysis/normed/group/hom.lean

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -438,14 +438,23 @@ coe_injective.add_comm_group _ rfl (λ _ _, rfl) (λ _, rfl) (λ _ _, rfl) (λ _
438438
/-- Normed group homomorphisms themselves form a seminormed group with respect to
439439
the operator norm. -/
440440
instance to_seminormed_add_comm_group : seminormed_add_comm_group (normed_add_group_hom V₁ V₂) :=
441-
seminormed_add_comm_group.of_core _ ⟨op_norm_zero, op_norm_add_le, op_norm_neg⟩
441+
add_group_seminorm.to_seminormed_add_comm_group
442+
{ to_fun := op_norm,
443+
map_zero' := op_norm_zero,
444+
neg' := op_norm_neg,
445+
add_le' := op_norm_add_le }
442446

443447
/-- Normed group homomorphisms themselves form a normed group with respect to
444448
the operator norm. -/
445449
instance to_normed_add_comm_group {V₁ V₂ : Type*} [normed_add_comm_group V₁]
446450
[normed_add_comm_group V₂] :
447451
normed_add_comm_group (normed_add_group_hom V₁ V₂) :=
448-
normed_add_comm_group.of_core _ ⟨λ f, op_norm_zero_iff, op_norm_add_le, op_norm_neg⟩
452+
add_group_norm.to_normed_add_comm_group
453+
{ to_fun := op_norm,
454+
map_zero' := op_norm_zero,
455+
neg' := op_norm_neg,
456+
add_le' := op_norm_add_le,
457+
eq_zero_of_map_eq_zero' := λ f, op_norm_zero_iff.1 }
449458

450459
/-- Coercion of a `normed_add_group_hom` is an `add_monoid_hom`. Similar to `add_monoid_hom.coe_fn`.
451460
-/

src/analysis/normed_space/continuous_affine_map.lean

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,16 @@ calc ∥f∥ = (max ∥f 0∥ ∥f.cont_linear∥) : by rw norm_def
159159
... = ∥f.cont_linear∥ : max_eq_right (norm_nonneg _)
160160

161161
noncomputable instance : normed_add_comm_group (V →A[𝕜] W) :=
162-
normed_add_comm_group.of_core _
163-
{ norm_eq_zero_iff := λ f,
164-
begin
165-
rw norm_def,
166-
refine ⟨λ h₀, _, by { rintros rfl, simp, }⟩,
162+
add_group_norm.to_normed_add_comm_group
163+
{ to_fun := λ f, max ∥f 0∥ ∥f.cont_linear∥,
164+
map_zero' := by simp,
165+
neg' := λ f, by simp,
166+
add_le' := λ f g, begin
167+
simp only [pi.add_apply, add_cont_linear, coe_add, max_le_iff],
168+
exact ⟨(norm_add_le _ _).trans (add_le_add (le_max_left _ _) (le_max_left _ _)),
169+
(norm_add_le _ _).trans (add_le_add (le_max_right _ _) (le_max_right _ _))⟩,
170+
end,
171+
eq_zero_of_map_eq_zero' := λ f h₀, begin
167172
rcases max_eq_iff.mp h₀ with ⟨h₁, h₂⟩ | ⟨h₁, h₂⟩;
168173
rw h₁ at h₂,
169174
{ rw [norm_le_zero_iff, cont_linear_eq_zero_iff_exists_const] at h₂,
@@ -176,14 +181,7 @@ normed_add_comm_group.of_core _
176181
simp only [function.const_apply, coe_const, norm_le_zero_iff] at h₂,
177182
rw h₂,
178183
refl, },
179-
end,
180-
triangle := λ f g,
181-
begin
182-
simp only [norm_def, pi.add_apply, add_cont_linear, coe_add, max_le_iff],
183-
exact ⟨(norm_add_le _ _).trans (add_le_add (le_max_left _ _) (le_max_left _ _)),
184-
(norm_add_le _ _).trans (add_le_add (le_max_right _ _) (le_max_right _ _))⟩,
185-
end,
186-
norm_neg := λ f, by simp [norm_def], }
184+
end }
187185

188186
instance : normed_space 𝕜 (V →A[𝕜] W) :=
189187
{ norm_smul_le := λ t f, by simp only [norm_def, smul_cont_linear, coe_smul, pi.smul_apply,

src/analysis/normed_space/lp_space.lean

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ begin
413413
simpa [real.zero_rpow hp.ne'] using real.zero_rpow hp' }
414414
end
415415

416-
lemma norm_eq_zero_iff f : lp E p : ∥f∥ = 0 ↔ f = 0 :=
416+
lemma norm_eq_zero_iff {f : lp E p} : ∥f∥ = 0 ↔ f = 0 :=
417417
begin
418418
classical,
419419
refine ⟨λ h, _, by { rintros rfl, exact norm_zero }⟩,
@@ -458,9 +458,11 @@ begin
458458
end
459459

460460
instance [hp : fact (1 ≤ p)] : normed_add_comm_group (lp E p) :=
461-
normed_add_comm_group.of_core _
462-
{ norm_eq_zero_iff := norm_eq_zero_iff,
463-
triangle := λ f g, begin
461+
add_group_norm.to_normed_add_comm_group
462+
{ to_fun := norm,
463+
map_zero' := norm_zero,
464+
neg' := norm_neg,
465+
add_le' := λ f g, begin
464466
unfreezingI { rcases p.dichotomy with rfl | hp' },
465467
{ casesI is_empty_or_nonempty α,
466468
{ simp [lp.eq_zero' f] },
@@ -483,7 +485,7 @@ normed_add_comm_group.of_core _
483485
intros i,
484486
exact real.rpow_le_rpow (norm_nonneg _) (norm_add_le _ _) hp''.le },
485487
end,
486-
norm_neg := norm_neg }
488+
eq_zero_of_map_eq_zero' := λ f, norm_eq_zero_iff.1 }
487489

488490
-- TODO: define an `ennreal` version of `is_conjugate_exponent`, and then express this inequality
489491
-- in a better version which also covers the case `p = 1, q = ∞`.

src/analysis/normed_space/multilinear.lean

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -344,17 +344,12 @@ cInf_le bounds_bdd_below
344344
⟨add_nonneg (op_norm_nonneg _) (op_norm_nonneg _), λ x, by { rw add_mul,
345345
exact norm_add_le_of_le (le_op_norm _ _) (le_op_norm _ _) }⟩
346346

347+
lemma op_norm_zero : ∥(0 : continuous_multilinear_map 𝕜 E G)∥ = 0 :=
348+
(op_norm_nonneg _).antisymm' $ op_norm_le_bound 0 le_rfl $ λ m, by simp
349+
347350
/-- A continuous linear map is zero iff its norm vanishes. -/
348351
theorem op_norm_zero_iff : ∥f∥ = 0 ↔ f = 0 :=
349-
begin
350-
split,
351-
{ assume h,
352-
ext m,
353-
simpa [h] using f.le_op_norm m },
354-
{ rintro rfl,
355-
apply le_antisymm (op_norm_le_bound 0 le_rfl (λm, _)) (op_norm_nonneg _),
356-
simp }
357-
end
352+
⟨λ h, by { ext m, simpa [h] using f.le_op_norm m }, by { rintro rfl, exact op_norm_zero }⟩
358353

359354
section
360355
variables {𝕜' : Type*} [normed_field 𝕜'] [normed_space 𝕜' G] [smul_comm_class 𝕜 𝕜' G]
@@ -373,7 +368,12 @@ lemma op_norm_neg : ∥-f∥ = ∥f∥ := by { rw norm_def, apply congr_arg, ext
373368
/-- Continuous multilinear maps themselves form a normed space with respect to
374369
the operator norm. -/
375370
instance normed_add_comm_group : normed_add_comm_group (continuous_multilinear_map 𝕜 E G) :=
376-
normed_add_comm_group.of_core _ ⟨op_norm_zero_iff, op_norm_add_le, op_norm_neg⟩
371+
add_group_norm.to_normed_add_comm_group
372+
{ to_fun := norm,
373+
map_zero' := op_norm_zero,
374+
neg' := op_norm_neg,
375+
add_le' := op_norm_add_le,
376+
eq_zero_of_map_eq_zero' := λ f, f.op_norm_zero_iff.1 }
377377

378378
/-- An alias of `continuous_multilinear_map.normed_add_comm_group` with non-dependent types to help
379379
typeclass search. -/

src/analysis/normed_space/operator_norm.lean

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,11 @@ lemma op_norm_smul_le {𝕜' : Type*} [normed_field 𝕜'] [normed_space 𝕜' F
383383
/-- Continuous linear maps themselves form a seminormed space with respect to
384384
the operator norm. -/
385385
instance to_seminormed_add_comm_group : seminormed_add_comm_group (E →SL[σ₁₂] F) :=
386-
seminormed_add_comm_group.of_core _ ⟨op_norm_zero, λ x y, op_norm_add_le x y, op_norm_neg⟩
386+
add_group_seminorm.to_seminormed_add_comm_group
387+
{ to_fun := norm,
388+
map_zero' := op_norm_zero,
389+
add_le' := op_norm_add_le,
390+
neg' := op_norm_neg }
387391

388392
lemma nnnorm_def (f : E →SL[σ₁₂] F) : ∥f∥₊ = Inf {c | ∀ x, ∥f x∥₊ ≤ c * ∥x∥₊} :=
389393
begin
@@ -1222,9 +1226,7 @@ iff.intro
12221226
(λ hn, continuous_linear_map.ext (λ x, norm_le_zero_iff.1
12231227
(calc _ ≤ ∥f∥ * ∥x∥ : le_op_norm _ _
12241228
... = _ : by rw [hn, zero_mul])))
1225-
(λ hf, le_antisymm (cInf_le bounds_bdd_below
1226-
⟨le_rfl, λ _, le_of_eq (by { rw [zero_mul, hf], exact norm_zero })⟩)
1227-
(op_norm_nonneg _))
1229+
(by { rintro rfl, exact op_norm_zero })
12281230

12291231
/-- If a normed space is non-trivial, then the norm of the identity equals `1`. -/
12301232
@[simp] lemma norm_id [nontrivial E] : ∥id 𝕜 E∥ = 1 :=
@@ -1239,7 +1241,12 @@ instance norm_one_class [nontrivial E] : norm_one_class (E →L[𝕜] E) := ⟨n
12391241
/-- Continuous linear maps themselves form a normed space with respect to
12401242
the operator norm. -/
12411243
instance to_normed_add_comm_group [ring_hom_isometric σ₁₂] : normed_add_comm_group (E →SL[σ₁₂] F) :=
1242-
normed_add_comm_group.of_core _ ⟨λ f, op_norm_zero_iff f, op_norm_add_le, op_norm_neg⟩
1244+
add_group_norm.to_normed_add_comm_group
1245+
{ to_fun := norm,
1246+
map_zero' := op_norm_zero,
1247+
neg' := op_norm_neg,
1248+
add_le' := op_norm_add_le,
1249+
eq_zero_of_map_eq_zero' := λ f, (op_norm_zero_iff f).1 }
12431250

12441251
/-- Continuous linear maps form a normed ring with respect to the operator norm. -/
12451252
instance to_normed_ring : normed_ring (E →L[𝕜] E) :=

src/measure_theory/function/lp_space.lean

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import topology.continuous_function.compact
1414
# ℒp space and Lp space
1515
1616
This file describes properties of almost everywhere strongly measurable functions with finite
17-
seminorm, denoted by `snorm f p μ` and defined for `p:ℝ≥0∞` as `0` if `p=0`,
17+
seminorm, denoted by `snorm f p μ` and defined for `p:ℝ≥0∞` asmm_group (Lp E p μ) := `0` if `p=0`,
1818
`(∫ ∥f a∥^p ∂μ) ^ (1/p)` for `0 < p < ∞` and `ess_sup ∥f∥ μ` for `p=∞`.
1919
2020
The Prop-valued `mem_ℒp f p μ` states that a function `f : α → E` has finite seminorm.
@@ -1727,10 +1727,11 @@ instance [hp : fact (1 ≤ p)] : normed_add_comm_group (Lp E p μ) :=
17271727
edist_dist := λ f g, by
17281728
rw [edist_def, dist_def, ←snorm_congr_ae (coe_fn_sub _ _),
17291729
ennreal.of_real_to_real (snorm_ne_top (f - g))],
1730-
.. normed_add_comm_group.of_core (Lp E p μ)
1731-
{ norm_eq_zero_iff := λ f, norm_eq_zero_iff (ennreal.zero_lt_one.trans_le hp.1),
1732-
triangle := begin
1733-
assume f g,
1730+
..add_group_norm.to_normed_add_comm_group
1731+
{ to_fun := (norm : Lp E p μ → ℝ),
1732+
map_zero' := norm_zero,
1733+
neg' := by simp,
1734+
add_le' := λ f g, begin
17341735
simp only [norm_def],
17351736
rw ← ennreal.to_real_add (snorm_ne_top f) (snorm_ne_top g),
17361737
suffices h_snorm : snorm ⇑(f + g) p μ ≤ snorm ⇑f p μ + snorm ⇑g p μ,
@@ -1739,7 +1740,7 @@ instance [hp : fact (1 ≤ p)] : normed_add_comm_group (Lp E p μ) :=
17391740
rw [snorm_congr_ae (coe_fn_add _ _)],
17401741
exact snorm_add_le (Lp.ae_strongly_measurable f) (Lp.ae_strongly_measurable g) hp.1,
17411742
end,
1742-
norm_neg := by simp } }
1743+
eq_zero_of_map_eq_zero' := λ f, (norm_eq_zero_iff $ ennreal.zero_lt_one.trans_le hp.1).1 } }
17431744

17441745
-- check no diamond is created
17451746
example [fact (1 ≤ p)] :

0 commit comments

Comments
 (0)