Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit dba797a

Browse files
committed
feat(order/liminf_limsup): composition g ∘ f is bounded iff f is bounded (#14479)
* If `g` is a monotone function that tends to infinity at infinity, then a filter is bounded from above under `g ∘ f` iff it is bounded under `f`, similarly for antitone functions and/or filter bounded from below. * A filter is bounded from above under `real.exp ∘ f` iff it is is bounded from above under `f`. * Use `monotone` in `real.exp_monotone`. * Add `@[mono]` to `real.exp_strict_mono`.
1 parent 047db39 commit dba797a

File tree

3 files changed

+42
-6
lines changed

3 files changed

+42
-6
lines changed

src/analysis/special_functions/exp.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,14 @@ lemma tendsto_exp_at_bot : tendsto exp at_bot (𝓝 0) :=
157157
lemma tendsto_exp_at_bot_nhds_within : tendsto exp at_bot (𝓝[>] 0) :=
158158
tendsto_inf.2 ⟨tendsto_exp_at_bot, tendsto_principal.2 $ eventually_of_forall exp_pos⟩
159159

160+
@[simp] lemma is_bounded_under_ge_exp_comp {α : Type*} (l : filter α) (f : α → ℝ) :
161+
is_bounded_under (≥) l (λ x, exp (f x)) :=
162+
is_bounded_under_of ⟨0, λ x, (exp_pos _).le⟩
163+
164+
@[simp] lemma is_bounded_under_le_exp_comp {α : Type*} {l : filter α} {f : α → ℝ} :
165+
is_bounded_under (≤) l (λ x, exp (f x)) ↔ is_bounded_under (≤) l f :=
166+
exp_monotone.is_bounded_under_le_comp tendsto_exp_at_top
167+
160168
/-- The function `exp(x)/x^n` tends to `+∞` at `+∞`, for any natural number `n` -/
161169
lemma tendsto_exp_div_pow_at_top (n : ℕ) : tendsto (λx, exp x / x^n) at_top at_top :=
162170
begin

src/data/complex/exponential.lean

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,12 +1162,12 @@ lemma exp_pos (x : ℝ) : 0 < exp x :=
11621162
@[simp] lemma abs_exp (x : ℝ) : |exp x| = exp x :=
11631163
abs_of_pos (exp_pos _)
11641164

1165-
lemma exp_strict_mono : strict_mono exp :=
1165+
@[mono] lemma exp_strict_mono : strict_mono exp :=
11661166
λ x y h, by rw [← sub_add_cancel y x, real.exp_add];
11671167
exact (lt_mul_iff_one_lt_left (exp_pos _)).2
11681168
(lt_of_lt_of_le (by linarith) (add_one_le_exp_of_nonneg (by linarith)))
11691169

1170-
@[mono] lemma exp_monotone : ∀ {x y : ℝ}, x ≤ y → exp x ≤ exp y := exp_strict_mono.monotone
1170+
@[mono] lemma exp_monotone : monotone exp := exp_strict_mono.monotone
11711171

11721172
@[simp] lemma exp_lt_exp {x y : ℝ} : exp x < exp y ↔ x < y := exp_strict_mono.lt_iff_lt
11731173

@@ -1177,8 +1177,7 @@ lemma exp_injective : function.injective exp := exp_strict_mono.injective
11771177

11781178
@[simp] lemma exp_eq_exp {x y : ℝ} : exp x = exp y ↔ x = y := exp_injective.eq_iff
11791179

1180-
@[simp] lemma exp_eq_one_iff : exp x = 1 ↔ x = 0 :=
1181-
by rw [← exp_zero, exp_injective.eq_iff]
1180+
@[simp] lemma exp_eq_one_iff : exp x = 1 ↔ x = 0 := exp_injective.eq_iff' exp_zero
11821181

11831182
@[simp] lemma one_lt_exp_iff {x : ℝ} : 1 < exp x ↔ 0 < x :=
11841183
by rw [← exp_zero, exp_lt_exp]

src/order/liminf_limsup.lean

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ In complete lattices, however, it coincides with the `Inf Sup` definition.
3636
open filter set
3737
open_locale filter
3838

39-
variables {α β ι : Type*}
39+
variables {α β γ ι : Type*}
4040
namespace filter
4141

4242
section relation
@@ -510,7 +510,36 @@ end filter
510510
section order
511511
open filter
512512

513-
lemma galois_connection.l_limsup_le {α β γ} [conditionally_complete_lattice β]
513+
lemma monotone.is_bounded_under_le_comp [nonempty β] [linear_order β] [preorder γ]
514+
[no_max_order γ] {g : β → γ} {f : α → β} {l : filter α} (hg : monotone g)
515+
(hg' : tendsto g at_top at_top) :
516+
is_bounded_under (≤) l (g ∘ f) ↔ is_bounded_under (≤) l f :=
517+
begin
518+
refine ⟨_, λ h, h.is_bounded_under hg⟩,
519+
rintro ⟨c, hc⟩, rw eventually_map at hc,
520+
obtain ⟨b, hb⟩ : ∃ b, ∀ a ≥ b, c < g a := eventually_at_top.1 (hg'.eventually_gt_at_top c),
521+
exact ⟨b, hc.mono $ λ x hx, not_lt.1 (λ h, (hb _ h.le).not_le hx)⟩
522+
end
523+
524+
lemma monotone.is_bounded_under_ge_comp [nonempty β] [linear_order β] [preorder γ]
525+
[no_min_order γ] {g : β → γ} {f : α → β} {l : filter α} (hg : monotone g)
526+
(hg' : tendsto g at_bot at_bot) :
527+
is_bounded_under (≥) l (g ∘ f) ↔ is_bounded_under (≥) l f :=
528+
hg.dual.is_bounded_under_le_comp hg'
529+
530+
lemma antitone.is_bounded_under_le_comp [nonempty β] [linear_order β] [preorder γ]
531+
[no_max_order γ] {g : β → γ} {f : α → β} {l : filter α} (hg : antitone g)
532+
(hg' : tendsto g at_bot at_top) :
533+
is_bounded_under (≤) l (g ∘ f) ↔ is_bounded_under (≥) l f :=
534+
hg.dual_right.is_bounded_under_ge_comp hg'
535+
536+
lemma antitone.is_bounded_under_ge_comp [nonempty β] [linear_order β] [preorder γ]
537+
[no_min_order γ] {g : β → γ} {f : α → β} {l : filter α} (hg : antitone g)
538+
(hg' : tendsto g at_top at_bot) :
539+
is_bounded_under (≥) l (g ∘ f) ↔ is_bounded_under (≤) l f :=
540+
hg.dual_right.is_bounded_under_le_comp hg'
541+
542+
lemma galois_connection.l_limsup_le [conditionally_complete_lattice β]
514543
[conditionally_complete_lattice γ] {f : filter α} {v : α → β}
515544
{l : β → γ} {u : γ → β} (gc : galois_connection l u)
516545
(hlv : f.is_bounded_under (≤) (λ x, l (v x)) . is_bounded_default)

0 commit comments

Comments
 (0)