Skip to content

Commit fb1cb21

Browse files
committed
chore(Analysis/SpecificLimits/Normed): move lemmas earlier (#18046)
These lemmas can be proved earlier at no cost. This is one step towards reducing imports in this area of mathlib.
1 parent d713728 commit fb1cb21

File tree

5 files changed

+53
-53
lines changed

5 files changed

+53
-53
lines changed

β€ŽMathlib/Analysis/Asymptotics/Asymptotics.leanβ€Ž

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2048,4 +2048,12 @@ end IsBigORev
20482048

20492049
end ContinuousOn
20502050

2051+
/-- The (scalar) product of a sequence that tends to zero with a bounded one also tends to zero. -/
2052+
lemma NormedField.tendsto_zero_smul_of_tendsto_zero_of_bounded {ΞΉ π•œ 𝔸 : Type*}
2053+
[NormedDivisionRing π•œ] [NormedAddCommGroup 𝔸] [Module π•œ 𝔸] [BoundedSMul π•œ 𝔸] {l : Filter ΞΉ}
2054+
{Ξ΅ : ΞΉ β†’ π•œ} {f : ΞΉ β†’ 𝔸} (hΞ΅ : Tendsto Ξ΅ l (𝓝 0)) (hf : IsBoundedUnder (Β· ≀ Β·) l (norm ∘ f)) :
2055+
Tendsto (Ξ΅ β€’ f) l (𝓝 0) := by
2056+
rw [← isLittleO_one_iff π•œ] at hΞ΅ ⊒
2057+
simpa using IsLittleO.smul_isBigO hΞ΅ (hf.isBigO_const (one_ne_zero : (1 : π•œ) β‰  0))
2058+
20512059
set_option linter.style.longFile 2200

β€ŽMathlib/Analysis/Normed/Field/InfiniteSum.leanβ€Ž

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,3 +164,10 @@ theorem hasSum_sum_range_mul_of_summable_norm' {f g : β„• β†’ R}
164164
exact tsum_mul_tsum_eq_tsum_sum_range_of_summable_norm' hf h'f hg h'g
165165

166166
end Nat
167+
168+
lemma summable_of_absolute_convergence_real {f : β„• β†’ ℝ} :
169+
(βˆƒ r, Tendsto (fun n ↦ βˆ‘ i ∈ range n, |f i|) atTop (𝓝 r)) β†’ Summable f
170+
| ⟨r, hr⟩ => by
171+
refine .of_norm ⟨r, (hasSum_iff_tendsto_nat_of_nonneg ?_ _).2 ?_⟩
172+
Β· exact fun i ↦ norm_nonneg _
173+
Β· simpa only using hr

β€ŽMathlib/Analysis/Normed/Field/Lemmas.leanβ€Ž

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,19 @@ example [Monoid Ξ²] (Ο† : Ξ² β†’* Ξ±) {x : Ξ²} {k : β„•+} (h : x ^ (k : β„•) = 1
320320
@[simp] lemma AddChar.norm_apply {G : Type*} [AddLeftCancelMonoid G] [Finite G] (ψ : AddChar G α)
321321
(x : G) : β€–Οˆ xβ€– = 1 := (ψ.toMonoidHom.isOfFinOrder <| isOfFinOrder_of_finite _).norm_eq_one
322322

323+
lemma NormedField.tendsto_norm_inverse_nhdsWithin_0_atTop :
324+
Tendsto (fun x : Ξ± ↦ β€–x⁻¹‖) (𝓝[β‰ ] 0) atTop :=
325+
(tendsto_inv_zero_atTop.comp tendsto_norm_zero').congr fun x ↦ (norm_inv x).symm
326+
327+
lemma NormedField.tendsto_norm_zpow_nhdsWithin_0_atTop {m : β„€} (hm : m < 0) :
328+
Tendsto (fun x : Ξ± ↦ β€–x ^ mβ€–) (𝓝[β‰ ] 0) atTop := by
329+
obtain ⟨m, rfl⟩ := neg_surjective m
330+
rw [neg_lt_zero] at hm
331+
lift m to β„• using hm.le
332+
rw [Int.natCast_pos] at hm
333+
simp only [norm_pow, zpow_neg, zpow_natCast, ← inv_pow]
334+
exact (tendsto_pow_atTop hm.ne').comp NormedField.tendsto_norm_inverse_nhdsWithin_0_atTop
335+
323336
end NormedDivisionRing
324337

325338
namespace NormedField
@@ -361,6 +374,22 @@ theorem denseRange_nnnorm : DenseRange (nnnorm : Ξ± β†’ ℝβ‰₯0) :=
361374

362375
end Densely
363376

377+
section NontriviallyNormedField
378+
variable {π•œ : Type*} [NontriviallyNormedField π•œ] {n : β„€} {x : π•œ}
379+
380+
@[simp]
381+
protected lemma continuousAt_zpow : ContinuousAt (fun x ↦ x ^ n) x ↔ x β‰  0 ∨ 0 ≀ n := by
382+
refine ⟨?_, continuousAt_zpowβ‚€ _ _⟩
383+
contrapose!
384+
rintro ⟨rfl, hm⟩ hc
385+
exact not_tendsto_atTop_of_tendsto_nhds (hc.tendsto.mono_left nhdsWithin_le_nhds).norm
386+
(tendsto_norm_zpow_nhdsWithin_0_atTop hm)
387+
388+
@[simp]
389+
protected lemma continuousAt_inv : ContinuousAt Inv.inv x ↔ x β‰  0 := by
390+
simpa using NormedField.continuousAt_zpow (n := -1) (x := x)
391+
392+
end NontriviallyNormedField
364393
end NormedField
365394

366395
namespace NNReal

β€ŽMathlib/Analysis/Normed/Group/Basic.leanβ€Ž

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,8 @@ theorem tendsto_norm_div_self (x : E) : Tendsto (fun a => β€–a / xβ€–) (𝓝 x)
773773
theorem tendsto_norm' {x : E} : Tendsto (fun a => β€–aβ€–) (𝓝 x) (𝓝 β€–xβ€–) := by
774774
simpa using tendsto_id.dist (tendsto_const_nhds : Tendsto (fun _a => (1 : E)) _ _)
775775

776-
@[to_additive]
776+
/-- See `tendsto_norm_one` for a version with pointed neighborhoods. -/
777+
@[to_additive "See `tendsto_norm_zero` for a version with pointed neighborhoods."]
777778
theorem tendsto_norm_one : Tendsto (fun a : E => β€–aβ€–) (𝓝 1) (𝓝 0) := by
778779
simpa using tendsto_norm_div_self (1 : E)
779780

@@ -1283,6 +1284,11 @@ theorem nnnorm_ne_zero_iff' : β€–aβ€–β‚Š β‰  0 ↔ a β‰  1 :=
12831284
@[to_additive (attr := simp) nnnorm_pos]
12841285
lemma nnnorm_pos' : 0 < β€–aβ€–β‚Š ↔ a β‰  1 := pos_iff_ne_zero.trans nnnorm_ne_zero_iff'
12851286

1287+
/-- See `tendsto_norm_one` for a version with full neighborhoods. -/
1288+
@[to_additive "See `tendsto_norm_zero` for a version with full neighborhoods."]
1289+
lemma tendsto_norm_one' : Tendsto (norm : E β†’ ℝ) (𝓝[β‰ ] 1) (𝓝[>] 0) :=
1290+
tendsto_norm_one.inf <| tendsto_principal_principal.2 fun _ hx ↦ norm_pos_iff''.2 hx
1291+
12861292
@[to_additive]
12871293
theorem tendsto_norm_div_self_punctured_nhds (a : E) :
12881294
Tendsto (fun x => β€–x / aβ€–) (𝓝[β‰ ] a) (𝓝[>] 0) :=
@@ -1414,3 +1420,5 @@ instance (priority := 75) normedCommGroup [NormedCommGroup E] {S : Type*} [SetLi
14141420
NormedCommGroup.induced _ _ (SubgroupClass.subtype s) Subtype.coe_injective
14151421

14161422
end SubgroupClass
1423+
1424+
lemma tendsto_norm_atTop_atTop : Tendsto (norm : ℝ β†’ ℝ) atTop atTop := tendsto_abs_atTop_atTop

β€ŽMathlib/Analysis/SpecificLimits/Normed.leanβ€Ž

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -28,60 +28,8 @@ open Set Function Filter Finset Metric Asymptotics Topology Nat NNReal ENNReal
2828

2929
variable {Ξ± Ξ² ΞΉ : Type*}
3030

31-
theorem tendsto_norm_atTop_atTop : Tendsto (norm : ℝ β†’ ℝ) atTop atTop :=
32-
tendsto_abs_atTop_atTop
33-
34-
theorem summable_of_absolute_convergence_real {f : β„• β†’ ℝ} :
35-
(βˆƒ r, Tendsto (fun n ↦ βˆ‘ i ∈ range n, |f i|) atTop (𝓝 r)) β†’ Summable f
36-
| ⟨r, hr⟩ => by
37-
refine .of_norm ⟨r, (hasSum_iff_tendsto_nat_of_nonneg ?_ _).2 ?_⟩
38-
Β· exact fun i ↦ norm_nonneg _
39-
Β· simpa only using hr
40-
4131
/-! ### Powers -/
4232

43-
44-
theorem tendsto_norm_zero' {π•œ : Type*} [NormedAddCommGroup π•œ] :
45-
Tendsto (norm : π•œ β†’ ℝ) (𝓝[β‰ ] 0) (𝓝[>] 0) :=
46-
tendsto_norm_zero.inf <| tendsto_principal_principal.2 fun _ hx ↦ norm_pos_iff.2 hx
47-
48-
namespace NormedField
49-
50-
theorem tendsto_norm_inverse_nhdsWithin_0_atTop {π•œ : Type*} [NormedDivisionRing π•œ] :
51-
Tendsto (fun x : π•œ ↦ β€–x⁻¹‖) (𝓝[β‰ ] 0) atTop :=
52-
(tendsto_inv_zero_atTop.comp tendsto_norm_zero').congr fun x ↦ (norm_inv x).symm
53-
54-
theorem tendsto_norm_zpow_nhdsWithin_0_atTop {π•œ : Type*} [NormedDivisionRing π•œ] {m : β„€}
55-
(hm : m < 0) :
56-
Tendsto (fun x : π•œ ↦ β€–x ^ mβ€–) (𝓝[β‰ ] 0) atTop := by
57-
rcases neg_surjective m with ⟨m, rfl⟩
58-
rw [neg_lt_zero] at hm; lift m to β„• using hm.le; rw [Int.natCast_pos] at hm
59-
simp only [norm_pow, zpow_neg, zpow_natCast, ← inv_pow]
60-
exact (tendsto_pow_atTop hm.ne').comp NormedField.tendsto_norm_inverse_nhdsWithin_0_atTop
61-
62-
/-- The (scalar) product of a sequence that tends to zero with a bounded one also tends to zero. -/
63-
theorem tendsto_zero_smul_of_tendsto_zero_of_bounded {ΞΉ π•œ 𝔸 : Type*} [NormedDivisionRing π•œ]
64-
[NormedAddCommGroup 𝔸] [Module π•œ 𝔸] [BoundedSMul π•œ 𝔸] {l : Filter ΞΉ} {Ξ΅ : ΞΉ β†’ π•œ} {f : ΞΉ β†’ 𝔸}
65-
(hΞ΅ : Tendsto Ξ΅ l (𝓝 0)) (hf : Filter.IsBoundedUnder (Β· ≀ Β·) l (norm ∘ f)) :
66-
Tendsto (Ξ΅ β€’ f) l (𝓝 0) := by
67-
rw [← isLittleO_one_iff π•œ] at hΞ΅ ⊒
68-
simpa using IsLittleO.smul_isBigO hΞ΅ (hf.isBigO_const (one_ne_zero : (1 : π•œ) β‰  0))
69-
70-
@[simp]
71-
theorem continuousAt_zpow {π•œ : Type*} [NontriviallyNormedField π•œ] {m : β„€} {x : π•œ} :
72-
ContinuousAt (fun x ↦ x ^ m) x ↔ x β‰  0 ∨ 0 ≀ m := by
73-
refine ⟨?_, continuousAt_zpowβ‚€ _ _⟩
74-
contrapose!; rintro ⟨rfl, hm⟩ hc
75-
exact not_tendsto_atTop_of_tendsto_nhds (hc.tendsto.mono_left nhdsWithin_le_nhds).norm
76-
(tendsto_norm_zpow_nhdsWithin_0_atTop hm)
77-
78-
@[simp]
79-
theorem continuousAt_inv {π•œ : Type*} [NontriviallyNormedField π•œ] {x : π•œ} :
80-
ContinuousAt Inv.inv x ↔ x β‰  0 := by
81-
simpa [(zero_lt_one' β„€).not_le] using @continuousAt_zpow _ _ (-1) x
82-
83-
end NormedField
84-
8533
theorem isLittleO_pow_pow_of_lt_left {r₁ rβ‚‚ : ℝ} (h₁ : 0 ≀ r₁) (hβ‚‚ : r₁ < rβ‚‚) :
8634
(fun n : β„• ↦ r₁ ^ n) =o[atTop] fun n ↦ rβ‚‚ ^ n :=
8735
have H : 0 < rβ‚‚ := h₁.trans_lt hβ‚‚

0 commit comments

Comments
Β (0)