Skip to content

Commit 2ab24a1

Browse files
committed
feat: Bounded Range versus IsBigO Asymptotics (#40664)
Show that for a continuous function `f : ℝ → E` into a seminormed space, having bounded range is equivalent to being `O(1)` along both `atTop` and `atBot`. If `f` is even, then a single `O(1)` bound along `atTop` already suffices. This material is used in Value Distribution Theory, where boundedness is traditionally expressed as being `O(1)`.
1 parent 3e314e5 commit 2ab24a1

2 files changed

Lines changed: 70 additions & 4 deletions

File tree

Mathlib/Algebra/Group/EvenFunction.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,18 @@ protected def Even (f : α → β) : Prop := ∀ a, f (-a) = f a
3434
/-- A function `f` is _odd_ if it satisfies `f (-x) = -f x` for all `x`. -/
3535
protected def Odd [Neg β] (f : α → β) : Prop := ∀ a, f (-a) = -(f a)
3636

37+
/-- An even function `f` satisfies `f (-x) = f x`. -/
38+
lemma Even.eq {f : α → β} (hf : f.Even) (x : α) : f (-x) = f x := hf x
39+
3740
/-- Any constant function is even. -/
3841
lemma Even.const (b : β) : Function.Even (fun _ : α ↦ b) := fun _ ↦ rfl
3942

4043
/-- The zero function is even. -/
4144
lemma Even.zero [Zero β] : Function.Even (fun (_ : α) ↦ (0 : β)) := Even.const 0
4245

46+
/-- An odd function `f` satisfies `f (-x) = -f x`. -/
47+
lemma Odd.eq [Neg β] {f : α → β} (hf : f.Odd) (x : α) : f (-x) = -f x := hf x
48+
4349
/-- The zero function is odd. -/
4450
lemma Odd.zero [NegZeroClass β] : Function.Odd (fun (_ : α) ↦ (0 : β)) := fun _ ↦ neg_zero.symm
4551

Mathlib/Analysis/Asymptotics/SpecificAsymptotics.lean

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,7 @@ theory developed in `Mathlib/Analysis/Asymptotics/Defs.lean` and
1818

1919
public section
2020

21-
22-
open Filter Asymptotics
23-
24-
open Topology
21+
open Bornology Filter Asymptotics Set Topology
2522

2623
section NormedField
2724

@@ -209,3 +206,66 @@ theorem Asymptotics.isEquivalent_nat_ceil :
209206
isEquivalent_of_tendsto_one tendsto_nat_ceil_div_atTop
210207

211208
end NormedLinearOrderedField
209+
210+
section boundedRange
211+
212+
/-!
213+
## Bounded Range versus `IsBigO` Asymptotics
214+
215+
For a continuous function `f` into a seminormed space, defined on an unbounded linear order whose
216+
order topology has compact intervals, having bounded range is equivalent to being `O(1)` along both
217+
`atTop` and `atBot` (`Continuous.isBounded_range_iff_isBigO_atTop_atBot`). For an even function a
218+
single `O(1)` bound along `atTop` already suffices
219+
(`Continuous.isBounded_range_iff_isBigO_atTop_of_even`), since `Function.Even` transports an `atTop`
220+
bound to an `atBot` bound (`Function.Even.isBigO_atTop_iff_isBigO_atBot`).
221+
-/
222+
223+
variable
224+
{E : Type*} [SeminormedAddCommGroup E]
225+
{D : Type*} [TopologicalSpace D]
226+
{β : Type*} [TopologicalSpace β] [LinearOrder β] [OrderClosedTopology β] [CompactIccSpace β]
227+
[NoMaxOrder β] [NoMinOrder β]
228+
229+
/--
230+
A continuous function `f` has bounded range if and only if it is `O(1)` with respect to the
231+
cocompact filter.
232+
-/
233+
theorem Continuous.isBounded_range_iff_isBigO {f : D → E} (hf : Continuous f) :
234+
IsBounded (range f) ↔ f =O[cocompact D] (1 : D → ℝ) := by
235+
constructor <;> intro h
236+
· rw [isBounded_iff_forall_norm_le] at h
237+
obtain ⟨c, hc⟩ := h
238+
simp only [Set.mem_range, forall_exists_index, forall_apply_eq_imp_iff] at hc
239+
rw [isBigO_iff]
240+
use c
241+
apply Eventually.of_forall
242+
simpa using hc
243+
· simp_rw [isBigO_iff, Filter.Eventually, Filter.mem_cocompact] at h
244+
simp only [Pi.one_apply, norm_one, mul_one] at h
245+
obtain ⟨c, t, hcompact, h⟩ := h
246+
rw [← Set.image_union_image_compl_eq_range (s := t)]
247+
apply IsBounded.union
248+
· apply (IsCompact.image hcompact hf).isBounded
249+
· rw [isBounded_iff_forall_norm_le]
250+
refine ⟨c, fun x hx ↦ ?_⟩
251+
rw [Set.mem_image] at hx
252+
obtain ⟨y, hy, rfl⟩ := hx
253+
simpa using mem_of_mem_of_subset hy h
254+
255+
/--
256+
A continuous function `f` on an unbounded linear order with compact intervals has bounded range if
257+
and only if it is `O(1)` at both `atTop` and `atBot`.
258+
-/
259+
theorem Continuous.isBounded_range_iff_isBigO_atTop_atBot {f : β → E} (hf : Continuous f) :
260+
IsBounded (range f) ↔ f =O[atTop] (1 : β → ℝ) ∧ f =O[atBot] (1 : β → ℝ) := by
261+
rw [hf.isBounded_range_iff_isBigO, cocompact_eq_atBot_atTop, isBigO_sup, and_comm]
262+
263+
/-- A continuous even function has bounded range if and only if `f =O[atTop] 1`. -/
264+
theorem Continuous.isBounded_range_iff_isBigO_atTop_of_even [AddCommGroup β] [IsOrderedAddMonoid β]
265+
{f : β → E} (hf : Continuous f) (heven : Function.Even f) :
266+
IsBounded (range f) ↔ f =O[atTop] (1 : β → ℝ) :=
267+
fun h ↦ (hf.isBounded_range_iff_isBigO_atTop_atBot.mp h).1,
268+
fun h ↦ hf.isBounded_range_iff_isBigO_atTop_atBot.mpr
269+
⟨h, by simpa only [← neg_atTop, ← Filter.map_neg, isBigO_map, Function.comp_def, heven.eq]⟩⟩
270+
271+
end boundedRange

0 commit comments

Comments
 (0)