Skip to content

Commit c605a8b

Browse files
committed
feat: missing basic analysis and topology API (leanprover-community#34411)
Basic lemmas cherry picked from leanprover-community#34055. Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr>
1 parent 5352afc commit c605a8b

3 files changed

Lines changed: 27 additions & 1 deletion

File tree

Mathlib/Analysis/Normed/Group/Basic.lean

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ abbrev GroupNorm.toNormedCommGroup [CommGroup E] (f : GroupNorm E) : NormedCommG
419419
section SeminormedGroup
420420

421421
variable [SeminormedGroup E] [SeminormedGroup F] [SeminormedGroup G] {s : Set E}
422-
{a a₁ a₂ b c : E} {r r₁ r₂ : ℝ}
422+
{a a₁ a₂ b c d : E} {r r₁ r₂ : ℝ}
423423

424424
@[to_additive]
425425
theorem dist_eq_norm_div (a b : E) : dist a b = ‖a / b‖ :=
@@ -495,6 +495,11 @@ theorem norm_mul_le_of_le' (h₁ : ‖a₁‖ ≤ r₁) (h₂ : ‖a₂‖ ≤ r
495495
@[to_additive norm_add₃_le /-- **Triangle inequality** for the norm. -/]
496496
lemma norm_mul₃_le' : ‖a * b * c‖ ≤ ‖a‖ + ‖b‖ + ‖c‖ := norm_mul_le_of_le' (norm_mul_le' _ _) le_rfl
497497

498+
/-- **Triangle inequality** for the norm. -/
499+
@[to_additive norm_add₄_le /-- **Triangle inequality** for the norm. -/]
500+
lemma norm_mul₄_le' : ‖a * b * c * d‖ ≤ ‖a‖ + ‖b‖ + ‖c‖ + ‖d‖ :=
501+
norm_mul_le_of_le' norm_mul₃_le' le_rfl
502+
498503
@[to_additive]
499504
lemma norm_div_le_norm_div_add_norm_div (a b c : E) : ‖a / c‖ ≤ ‖a / b‖ + ‖b / c‖ := by
500505
simpa only [dist_eq_norm_div] using dist_triangle a b c
@@ -979,6 +984,19 @@ variable {E : Type*} [TopologicalSpace E] [ESeminormedMonoid E]
979984
@[to_additive enorm_add_le]
980985
lemma enorm_mul_le' (a b : E) : ‖a * b‖ₑ ≤ ‖a‖ₑ + ‖b‖ₑ := ESeminormedMonoid.enorm_mul_le a b
981986

987+
@[to_additive enorm_add_le_of_le]
988+
theorem enorm_mul_le_of_le' {r₁ r₂ : ℝ≥0∞} {a₁ a₂ : E}
989+
(h₁ : ‖a₁‖ₑ ≤ r₁) (h₂ : ‖a₂‖ₑ ≤ r₂) : ‖a₁ * a₂‖ₑ ≤ r₁ + r₂ :=
990+
(enorm_mul_le' a₁ a₂).trans <| add_le_add h₁ h₂
991+
992+
@[to_additive enorm_add₃_le]
993+
lemma enorm_mul₃_le' {a b c : E} : ‖a * b * c‖ₑ ≤ ‖a‖ₑ + ‖b‖ₑ + ‖c‖ₑ :=
994+
enorm_mul_le_of_le' (enorm_mul_le' _ _) le_rfl
995+
996+
@[to_additive enorm_add₄_le]
997+
lemma enorm_mul₄_le' {a b c d : E} : ‖a * b * c * d‖ₑ ≤ ‖a‖ₑ + ‖b‖ₑ + ‖c‖ₑ + ‖d‖ₑ :=
998+
enorm_mul_le_of_le' enorm_mul₃_le' le_rfl
999+
9821000
end ESeminormedMonoid
9831001

9841002
section ENormedMonoid

Mathlib/Topology/ClusterPt.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,10 @@ theorem MapClusterPt.of_comp {φ : β → α} {p : Filter β} (h : Tendsto φ p
174174
(H : MapClusterPt x p (u ∘ φ)) : MapClusterPt x F u :=
175175
H.clusterPt.mono <| map_mono h
176176

177+
theorem IsClosed.mem_of_mapClusterPt {l : X} {s : Set X} {f : α → X} {b : Filter α}
178+
(hs : IsClosed s) (hf : MapClusterPt l b f) (h : ∀ᶠ (x : α) in b, f x ∈ s) : l ∈ s :=
179+
(hf.frequently' h).mem_of_closed hs
180+
177181
end MapClusterPt
178182

179183
theorem accPt_sup {x : X} {F G : Filter X} :

Mathlib/Topology/NhdsWithin.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,10 @@ theorem nhds_eq_nhdsWithin_sup_nhdsWithin (b : α) {I₁ I₂ : Set α} (hI : Se
211211
nhds b = nhdsWithin b I₁ ⊔ nhdsWithin b I₂ := by
212212
rw [← nhdsWithin_univ b, hI, nhdsWithin_union]
213213

214+
lemma inter_mem_nhdsWithin_inter {a b c d : Set α} {x : α} (h : a ∈ 𝓝[b] x) (h' : c ∈ 𝓝[d] x) :
215+
a ∩ c ∈ 𝓝[b ∩ d] x :=
216+
inter_mem (nhdsWithin_mono _ inter_subset_left h) (nhdsWithin_mono _ inter_subset_right h')
217+
214218
/-- If `L` and `R` are neighborhoods of `b` within sets whose union is `Set.univ`, then
215219
`L ∪ R` is a neighborhood of `b`. -/
216220
theorem union_mem_nhds_of_mem_nhdsWithin {b : α}

0 commit comments

Comments
 (0)