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

Commit b2d70ba

Browse files
committed
feat(order/liminf_limsup): add limsup/liminf variants of some Limsup/Liminf lemmas (#16759)
Also make sure that similar lemmas follow each other in the order Limsup, Liminf, limsup, liminf.
1 parent 2ce380c commit b2d70ba

File tree

1 file changed

+45
-18
lines changed

1 file changed

+45
-18
lines changed

src/order/liminf_limsup.lean

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,16 @@ theorem le_Liminf_of_le {f : filter α} {a}
293293
(hf : f.is_cobounded (≥) . is_bounded_default) (h : ∀ᶠ n in f, a ≤ n) : a ≤ f.Liminf :=
294294
le_cSup hf h
295295

296+
theorem limsup_le_of_le {f : filter β} {u : β → α} {a}
297+
(hf : f.is_cobounded_under (≤) u . is_bounded_default) (h : ∀ᶠ n in f, u n ≤ a) :
298+
f.limsup u ≤ a :=
299+
cInf_le hf h
300+
301+
theorem le_liminf_of_le {f : filter β} {u : β → α} {a}
302+
(hf : f.is_cobounded_under (≥) u . is_bounded_default) (h : ∀ᶠ n in f, a ≤ u n) :
303+
a ≤ f.liminf u :=
304+
le_cSup hf h
305+
296306
theorem le_Limsup_of_le {f : filter α} {a}
297307
(hf : f.is_bounded (≤) . is_bounded_default) (h : ∀ b, (∀ᶠ n in f, n ≤ b) → a ≤ b) :
298308
a ≤ f.Limsup :=
@@ -303,31 +313,37 @@ theorem Liminf_le_of_le {f : filter α} {a}
303313
f.Liminf ≤ a :=
304314
cSup_le hf h
305315

316+
theorem le_limsup_of_le {f : filter β} {u : β → α} {a}
317+
(hf : f.is_bounded_under (≤) u . is_bounded_default) (h : ∀ b, (∀ᶠ n in f, u n ≤ b) → a ≤ b) :
318+
a ≤ f.limsup u :=
319+
le_cInf hf h
320+
321+
theorem liminf_le_of_le {f : filter β} {u : β → α} {a}
322+
(hf : f.is_bounded_under (≥) u . is_bounded_default) (h : ∀ b, (∀ᶠ n in f, b ≤ u n) → b ≤ a) :
323+
f.liminf u ≤ a :=
324+
cSup_le hf h
325+
306326
theorem Liminf_le_Limsup {f : filter α} [ne_bot f]
307327
(h₁ : f.is_bounded (≤) . is_bounded_default) (h₂ : f.is_bounded (≥) . is_bounded_default) :
308328
f.Liminf ≤ f.Limsup :=
309329
Liminf_le_of_le h₂ $ assume a₀ ha₀, le_Limsup_of_le h₁ $ assume a₁ ha₁,
310330
show a₀ ≤ a₁, from let ⟨b, hb₀, hb₁⟩ := (ha₀.and ha₁).exists in le_trans hb₀ hb₁
311331

312-
lemma Liminf_le_Liminf {f g : filter α}
313-
(hf : f.is_bounded (≥) . is_bounded_default) (hg : g.is_cobounded (≥) . is_bounded_default)
314-
(h : ∀ a, (∀ᶠ n in f, a ≤ n) → ∀ᶠ n in g, a ≤ n) : f.Liminf ≤ g.Liminf :=
315-
cSup_le_cSup hg hf h
332+
lemma liminf_le_limsup {f : filter β} [ne_bot f] {u : β → α}
333+
(h : f.is_bounded_under (≤) u . is_bounded_default)
334+
(h' : f.is_bounded_under (≥) u . is_bounded_default) :
335+
liminf f u ≤ limsup f u :=
336+
Liminf_le_Limsup h h'
316337

317338
lemma Limsup_le_Limsup {f g : filter α}
318339
(hf : f.is_cobounded (≤) . is_bounded_default) (hg : g.is_bounded (≤) . is_bounded_default)
319340
(h : ∀ a, (∀ᶠ n in g, n ≤ a) → ∀ᶠ n in f, n ≤ a) : f.Limsup ≤ g.Limsup :=
320341
cInf_le_cInf hf hg h
321342

322-
lemma Limsup_le_Limsup_of_le {f g : filter α} (h : f ≤ g)
323-
(hf : f.is_cobounded (≤) . is_bounded_default) (hg : g.is_bounded (≤) . is_bounded_default) :
324-
f.Limsup ≤ g.Limsup :=
325-
Limsup_le_Limsup hf hg (assume a ha, h ha)
326-
327-
lemma Liminf_le_Liminf_of_le {f g : filter α} (h : g ≤ f)
328-
(hf : f.is_bounded (≥) . is_bounded_default) (hg : g.is_cobounded (≥) . is_bounded_default) :
329-
f.Liminf ≤ g.Liminf :=
330-
Liminf_le_Liminf hf hg (assume a ha, h ha)
343+
lemma Liminf_le_Liminf {f g : filter α}
344+
(hf : f.is_bounded (≥) . is_bounded_default) (hg : g.is_cobounded (≥) . is_bounded_default)
345+
(h : ∀ a, (∀ᶠ n in f, a ≤ n) → ∀ᶠ n in g, a ≤ n) : f.Liminf ≤ g.Liminf :=
346+
cSup_le_cSup hg hf h
331347

332348
lemma limsup_le_limsup {α : Type*} [conditionally_complete_lattice β] {f : filter α} {u v : α → β}
333349
(h : u ≤ᶠ[f] v)
@@ -343,6 +359,16 @@ lemma liminf_le_liminf {α : Type*} [conditionally_complete_lattice β] {f : fil
343359
f.liminf u ≤ f.liminf v :=
344360
@limsup_le_limsup βᵒᵈ α _ _ _ _ h hv hu
345361

362+
lemma Limsup_le_Limsup_of_le {f g : filter α} (h : f ≤ g)
363+
(hf : f.is_cobounded (≤) . is_bounded_default) (hg : g.is_bounded (≤) . is_bounded_default) :
364+
f.Limsup ≤ g.Limsup :=
365+
Limsup_le_Limsup hf hg (assume a ha, h ha)
366+
367+
lemma Liminf_le_Liminf_of_le {f g : filter α} (h : g ≤ f)
368+
(hf : f.is_bounded (≥) . is_bounded_default) (hg : g.is_cobounded (≥) . is_bounded_default) :
369+
f.Liminf ≤ g.Liminf :=
370+
Liminf_le_Liminf hf hg (assume a ha, h ha)
371+
346372
lemma limsup_le_limsup_of_le {α β} [conditionally_complete_lattice β] {f g : filter α} (h : f ≤ g)
347373
{u : α → β} (hf : f.is_cobounded_under (≤) u . is_bounded_default)
348374
(hg : g.is_bounded_under (≤) u . is_bounded_default) :
@@ -383,11 +409,6 @@ lemma liminf_const {α : Type*} [conditionally_complete_lattice β] {f : filter
383409
(b : β) : liminf f (λ x, b) = b :=
384410
@limsup_const βᵒᵈ α _ f _ b
385411

386-
lemma liminf_le_limsup {f : filter β} [ne_bot f] {u : β → α}
387-
(h : f.is_bounded_under (≤) u . is_bounded_default)
388-
(h' : f.is_bounded_under (≥) u . is_bounded_default) :
389-
liminf f u ≤ limsup f u :=
390-
Liminf_le_Limsup h h'
391412

392413
end conditionally_complete_lattice
393414

@@ -436,6 +457,12 @@ f.basis_sets.Limsup_eq_infi_Sup
436457
theorem Liminf_eq_supr_Inf {f : filter α} : f.Liminf = ⨆ s ∈ f, Inf s :=
437458
@Limsup_eq_infi_Sup αᵒᵈ _ _
438459

460+
theorem limsup_le_supr {f : filter β} {u : β → α} : f.limsup u ≤ ⨆ n, u n :=
461+
limsup_le_of_le (by is_bounded_default) (eventually_of_forall (le_supr u))
462+
463+
theorem infi_le_liminf {f : filter β} {u : β → α} : (⨅ n, u n) ≤ f.liminf u :=
464+
le_liminf_of_le (by is_bounded_default) (eventually_of_forall (infi_le u))
465+
439466
/-- In a complete lattice, the limsup of a function is the infimum over sets `s` in the filter
440467
of the supremum of the function over `s` -/
441468
theorem limsup_eq_infi_supr {f : filter β} {u : β → α} : f.limsup u = ⨅ s ∈ f, ⨆ a ∈ s, u a :=

0 commit comments

Comments
 (0)