Skip to content

Commit c37e186

Browse files
authored
Merge branch 'master' into Smooth.Basic
2 parents 4ed7cbe + f9c3ad4 commit c37e186

6 files changed

Lines changed: 80 additions & 12 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/Algebra/Order/Group/Pointwise/Interval.lean

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -898,10 +898,6 @@ theorem Ici_pow_eq {a : α} :
898898
| 1, _ => by simp
899899
| n + 2, _ => by simp [pow_succ _ n.succ, Ici_pow_eq, Ici_mul_Ici_eq]
900900

901-
omit [MulRightMono α] in
902-
@[to_additive]
903-
lemma Ici_one_eq_univ : Set.Ici (1 : α) = Set.univ := by aesop
904-
905901
end CanonicallyOrdered
906902

907903
end Set

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

Mathlib/MeasureTheory/Measure/Hausdorff.lean

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,9 +343,9 @@ theorem mkMetric_top : (mkMetric (fun _ => ∞ : ℝ≥0∞ → ℝ≥0∞) : Ou
343343
intro b hb
344344
simpa using hb ⊤
345345

346-
/-- If `m₁ d ≤ m₂ d` for `d < ε` for some `ε > 0` (we use `≤ᶠ[𝓝[≥] 0]` to state this), then
346+
/-- If `m₁ d ≤ m₂ d` for `d < ε` for some `ε > 0` (we use `≤ᶠ[𝓝 0]` to state this), then
347347
`mkMetric m₁ hm₁ ≤ mkMetric m₂ hm₂`. -/
348-
theorem mkMetric_mono {m₁ m₂ : ℝ≥0∞ → ℝ≥0∞} (hle : m₁ ≤ᶠ[𝓝[≥] 0] m₂) :
348+
theorem mkMetric_mono {m₁ m₂ : ℝ≥0∞ → ℝ≥0∞} (hle : m₁ ≤ᶠ[𝓝 0] m₂) :
349349
(mkMetric m₁ : OuterMeasure X) ≤ mkMetric m₂ := by
350350
convert! @mkMetric_mono_smul X _ _ m₂ _ ENNReal.one_ne_top one_ne_zero _ <;> simp [*]
351351

@@ -455,9 +455,9 @@ theorem mkMetric_top : (mkMetric (fun _ => ∞ : ℝ≥0∞ → ℝ≥0∞) : Me
455455
apply toOuterMeasure_injective
456456
rw [mkMetric_toOuterMeasure, OuterMeasure.mkMetric_top, toOuterMeasure_top]
457457

458-
/-- If `m₁ d ≤ m₂ d` for `d < ε` for some `ε > 0` (we use `≤ᶠ[𝓝[≥] 0]` to state this), then
458+
/-- If `m₁ d ≤ m₂ d` for `d < ε` for some `ε > 0` (we use `≤ᶠ[𝓝 0]` to state this), then
459459
`mkMetric m₁ hm₁ ≤ mkMetric m₂ hm₂`. -/
460-
theorem mkMetric_mono {m₁ m₂ : ℝ≥0∞ → ℝ≥0∞} (hle : m₁ ≤ᶠ[𝓝[≥] 0] m₂) :
460+
theorem mkMetric_mono {m₁ m₂ : ℝ≥0∞ → ℝ≥0∞} (hle : m₁ ≤ᶠ[𝓝 0] m₂) :
461461
(mkMetric m₁ : Measure X) ≤ mkMetric m₂ := by
462462
convert! @mkMetric_mono_smul X _ _ _ _ m₂ _ ENNReal.one_ne_top one_ne_zero _ <;> simp [*]
463463

Mathlib/Order/Interval/Finset/Defs.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,9 @@ theorem _root_.Fintype.card_Ioi (a : α) [Fintype (Set.Ioi a)] :
389389
Fintype.card (Set.Ioi a) = #(Ioi a) :=
390390
Fintype.card_of_finset' _ fun _ ↦ by simp
391391

392+
@[to_additive (attr := simp)]
393+
lemma Ici_one_eq_univ [One α] [IsBotOneClass α] [Fintype α] : Ici (1 : α) = univ := by ext; simp
394+
392395
end LocallyFiniteOrderTop
393396

394397
section OrderTop

Mathlib/Order/Interval/Set/Basic.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,9 @@ section matched_intervals
464464

465465
end matched_intervals
466466

467+
@[to_additive (attr := simp)]
468+
lemma Ici_one_eq_univ [One α] [IsBotOneClass α] : Ici (1 : α) = univ := by ext; simp
469+
467470
end Preorder
468471

469472
section PartialOrder

0 commit comments

Comments
 (0)