@@ -18,10 +18,7 @@ theory developed in `Mathlib/Analysis/Asymptotics/Defs.lean` and
1818
1919public section
2020
21-
22- open Filter Asymptotics
23-
24- open Topology
21+ open Bornology Filter Asymptotics Set Topology
2522
2623section NormedField
2724
@@ -209,3 +206,66 @@ theorem Asymptotics.isEquivalent_nat_ceil :
209206 isEquivalent_of_tendsto_one tendsto_nat_ceil_div_atTop
210207
211208end 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