mathlib documentation

topology.​instances.​ennreal

topology.​instances.​ennreal

Extended non-negative reals

@[instance]

Topology on ennreal.

Note: this is different from the emetric_space topology. The emetric_space topology has is_open {⊤}, while this topology doesn't have singleton elements.

Equations
@[instance]

Equations
theorem ennreal.​tendsto_coe {α : Type u_1} {f : filter α} {m : α → nnreal} {a : nnreal} :
filter.tendsto (λ (a : α), ↑(m a)) f (nhds ↑a) ↔ filter.tendsto m f (nhds a)

theorem ennreal.​continuous_coe {α : Type u_1} [topological_space α] {f : α → nnreal} :
continuous (λ (a : α), ↑(f a)) ↔ continuous f

theorem ennreal.​nhds_coe_coe {r p : nnreal} :
nhds (↑r, ↑p) = filter.map (λ (p : nnreal × nnreal), (↑(p.fst), ↑(p.snd))) (nhds (r, p))

theorem ennreal.​tendsto_of_real {α : Type u_1} {f : filter α} {m : α → ℝ} {a : ℝ} :
filter.tendsto m f (nhds a) → filter.tendsto (λ (a : α), ennreal.of_real (m a)) f (nhds (ennreal.of_real a))

theorem ennreal.​tendsto_nhds_top {α : Type u_1} {m : α → ennreal} {f : filter α} :
(∀ (n : ℕ), ∀ᶠ (a : α) in f, ↑n < m a) → filter.tendsto m f (nhds ⊤)

theorem ennreal.​nhds_top  :
nhds ⊤ = ⨅ (a : ennreal) (H : a ≠ ⊤), filter.principal (set.Ioi a)

theorem ennreal.​nhds_zero  :
nhds 0 = ⨅ (a : ennreal) (H : a ≠ 0), filter.principal (set.Iio a)

The set of finite ennreal numbers is homeomorphic to nnreal.

Equations

The set of finite ennreal numbers is homeomorphic to nnreal.

Equations
theorem ennreal.​Icc_mem_nhds {x ε : ennreal} :
x ≠ ⊤ → 0 < ε → set.Icc (x - ε) (x + ε) ∈ nhds x

theorem ennreal.​nhds_of_ne_top {x : ennreal} :
x ≠ ⊤ → (nhds x = ⨅ (ε : ennreal) (H : ε > 0), filter.principal (set.Icc (x - ε) (x + ε)))

theorem ennreal.​tendsto_nhds {α : Type u_1} {f : filter α} {u : α → ennreal} {a : ennreal} :
a ≠ ⊤ → (filter.tendsto u f (nhds a) ↔ ∀ (ε : ennreal), ε > 0 → (∀ᶠ (x : α) in f, u x ∈ set.Icc (a - ε) (a + ε)))

Characterization of neighborhoods for ennreal numbers. See also tendsto_order for a version with strict inequalities.

theorem ennreal.​tendsto_at_top {β : Type u_2} [nonempty β] [semilattice_sup β] {f : β → ennreal} {a : ennreal} :
a ≠ ⊤ → (filter.tendsto f filter.at_top (nhds a) ↔ ∀ (ε : ennreal), ε > 0 → (∃ (N : β), ∀ (n : β), n ≥ N → f n ∈ set.Icc (a - ε) (a + ε)))

theorem ennreal.​tendsto_coe_nnreal_nhds_top {α : Type u_1} {l : filter α} {f : α → nnreal} :
filter.tendsto f l filter.at_top → filter.tendsto (λ (a : α), ↑(f a)) l (nhds ⊤)

theorem ennreal.​tendsto_mul {a b : ennreal} :
a ≠ 0 ∨ b ≠ ⊤ → b ≠ 0 ∨ a ≠ ⊤ → filter.tendsto (λ (p : ennreal × ennreal), p.fst * p.snd) (nhds (a, b)) (nhds (a * b))

theorem ennreal.​tendsto.​mul {α : Type u_1} {f : filter α} {ma mb : α → ennreal} {a b : ennreal} :
filter.tendsto ma f (nhds a) → a ≠ 0 ∨ b ≠ ⊤ → filter.tendsto mb f (nhds b) → b ≠ 0 ∨ a ≠ ⊤ → filter.tendsto (λ (a : α), ma a * mb a) f (nhds (a * b))

theorem ennreal.​tendsto.​const_mul {α : Type u_1} {f : filter α} {m : α → ennreal} {a b : ennreal} :
filter.tendsto m f (nhds b) → b ≠ 0 ∨ a ≠ ⊤ → filter.tendsto (λ (b : α), a * m b) f (nhds (a * b))

theorem ennreal.​tendsto.​mul_const {α : Type u_1} {f : filter α} {m : α → ennreal} {a b : ennreal} :
filter.tendsto m f (nhds a) → a ≠ 0 ∨ b ≠ ⊤ → filter.tendsto (λ (x : α), m x * b) f (nhds (a * b))

theorem ennreal.​continuous_at_mul_const {a b : ennreal} :
a ≠ ⊤ ∨ b ≠ 0 → continuous_at (λ (x : ennreal), x * a) b

theorem ennreal.​continuous_mul_const {a : ennreal} :
a ≠ ⊤ → continuous (λ (x : ennreal), x * a)

theorem ennreal.​infi_mul_left {ι : Sort u_1} [nonempty ι] {f : ι → ennreal} {a : ennreal} :
(a = ⊤ → (⨅ (i : ι), f i) = 0 → (∃ (i : ι), f i = 0)) → ((⨅ (i : ι), a * f i) = a * ⨅ (i : ι), f i)

theorem ennreal.​infi_mul_right {ι : Sort u_1} [nonempty ι] {f : ι → ennreal} {a : ennreal} :
(a = ⊤ → (⨅ (i : ι), f i) = 0 → (∃ (i : ι), f i = 0)) → (⨅ (i : ι), f i * a) = (⨅ (i : ι), f i) * a

@[simp]
theorem ennreal.​tendsto_inv_iff {α : Type u_1} {f : filter α} {m : α → ennreal} {a : ennreal} :
filter.tendsto (λ (x : α), (m x)⁻¹) f (nhds a⁻¹) ↔ filter.tendsto m f (nhds a)

theorem ennreal.​tendsto.​div {α : Type u_1} {f : filter α} {ma mb : α → ennreal} {a b : ennreal} :
filter.tendsto ma f (nhds a) → a ≠ 0 ∨ b ≠ 0 → filter.tendsto mb f (nhds b) → b ≠ ⊤ ∨ a ≠ ⊤ → filter.tendsto (λ (a : α), ma a / mb a) f (nhds (a / b))

theorem ennreal.​tendsto.​const_div {α : Type u_1} {f : filter α} {m : α → ennreal} {a b : ennreal} :
filter.tendsto m f (nhds b) → b ≠ ⊤ ∨ a ≠ ⊤ → filter.tendsto (λ (b : α), a / m b) f (nhds (a / b))

theorem ennreal.​tendsto.​div_const {α : Type u_1} {f : filter α} {m : α → ennreal} {a b : ennreal} :
filter.tendsto m f (nhds a) → a ≠ 0 ∨ b ≠ 0 → filter.tendsto (λ (x : α), m x / b) f (nhds (a / b))

theorem ennreal.​Sup_add {a : ennreal} {s : set ennreal} :
s.nonempty → (has_Sup.Sup s + a = ⨆ (b : ennreal) (H : b ∈ s), b + a)

theorem ennreal.​supr_add {a : ennreal} {ι : Sort u_1} {s : ι → ennreal} [h : nonempty ι] :
supr s + a = ⨆ (b : ι), s b + a

theorem ennreal.​add_supr {a : ennreal} {ι : Sort u_1} {s : ι → ennreal} [h : nonempty ι] :
a + supr s = ⨆ (b : ι), a + s b

theorem ennreal.​supr_add_supr {ι : Sort u_1} {f g : ι → ennreal} :
(∀ (i j : ι), ∃ (k : ι), f i + g j ≤ f k + g k) → (supr f + supr g = ⨆ (a : ι), f a + g a)

theorem ennreal.​supr_add_supr_of_monotone {ι : Type u_1} [semilattice_sup ι] {f g : ι → ennreal} :
monotone f → monotone g → (supr f + supr g = ⨆ (a : ι), f a + g a)

theorem ennreal.​finset_sum_supr_nat {α : Type u_1} {ι : Type u_2} [semilattice_sup ι] {s : finset α} {f : α → ι → ennreal} :
(∀ (a : α), monotone (f a)) → (s.sum (λ (a : α), supr (f a)) = ⨆ (n : ι), s.sum (λ (a : α), f a n))

theorem ennreal.​mul_Sup {s : set ennreal} {a : ennreal} :
a * has_Sup.Sup s = ⨆ (i : ennreal) (H : i ∈ s), a * i

theorem ennreal.​mul_supr {ι : Sort u_1} {f : ι → ennreal} {a : ennreal} :
a * supr f = ⨆ (i : ι), a * f i

theorem ennreal.​supr_mul {ι : Sort u_1} {f : ι → ennreal} {a : ennreal} :
supr f * a = ⨆ (i : ι), f i * a

theorem ennreal.​tendsto_coe_sub {r : nnreal} {b : ennreal} :
filter.tendsto (λ (b : ennreal), ↑r - b) (nhds b) (nhds (↑r - b))

theorem ennreal.​sub_supr {a : ennreal} {ι : Sort u_1} [hι : nonempty ι] {b : ι → ennreal} :
a < ⊤ → ((a - ⨆ (i : ι), b i) = ⨅ (i : ι), a - b i)

theorem ennreal.​has_sum_coe {α : Type u_1} {f : α → nnreal} {r : nnreal} :
has_sum (λ (a : α), ↑(f a)) ↑r ↔ has_sum f r

theorem ennreal.​tsum_coe_eq {α : Type u_1} {r : nnreal} {f : α → nnreal} :
has_sum f r → (∑' (a : α), ↑(f a)) = ↑r

theorem ennreal.​coe_tsum {α : Type u_1} {f : α → nnreal} :
summable f → (↑(tsum f) = ∑' (a : α), ↑(f a))

theorem ennreal.​has_sum {α : Type u_1} {f : α → ennreal} :
has_sum f (⨆ (s : finset α), s.sum (λ (a : α), f a))

@[simp]
theorem ennreal.​summable {α : Type u_1} {f : α → ennreal} :

theorem ennreal.​tsum_coe_ne_top_iff_summable {β : Type u_2} {f : β → nnreal} :
(∑' (b : β), ↑(f b)) ≠ ⊤ ↔ summable f

theorem ennreal.​tsum_eq_supr_sum {α : Type u_1} {f : α → ennreal} :
(∑' (a : α), f a) = ⨆ (s : finset α), s.sum (λ (a : α), f a)

theorem ennreal.​tsum_eq_supr_sum' {α : Type u_1} {f : α → ennreal} {ι : Type u_2} (s : ι → finset α) :
(∀ (t : finset α), ∃ (i : ι), t ⊆ s i) → ((∑' (a : α), f a) = ⨆ (i : ι), (s i).sum (λ (a : α), f a))

theorem ennreal.​tsum_sigma {α : Type u_1} {β : α → Type u_2} (f : Π (a : α), β a → ennreal) :
(∑' (p : Σ (a : α), β a), f p.fst p.snd) = ∑' (a : α) (b : β a), f a b

theorem ennreal.​tsum_sigma' {α : Type u_1} {β : α → Type u_2} (f : (Σ (a : α), β a) → ennreal) :
(∑' (p : Σ (a : α), β a), f p) = ∑' (a : α) (b : β a), f ⟨a, b⟩

theorem ennreal.​tsum_prod {α : Type u_1} {β : Type u_2} {f : α → β → ennreal} :
(∑' (p : α × β), f p.fst p.snd) = ∑' (a : α) (b : β), f a b

theorem ennreal.​tsum_comm {α : Type u_1} {β : Type u_2} {f : α → β → ennreal} :
(∑' (a : α) (b : β), f a b) = ∑' (b : β) (a : α), f a b

theorem ennreal.​tsum_add {α : Type u_1} {f g : α → ennreal} :
(∑' (a : α), f a + g a) = (∑' (a : α), f a) + ∑' (a : α), g a

theorem ennreal.​tsum_le_tsum {α : Type u_1} {f g : α → ennreal} :
(∀ (a : α), f a ≤ g a) → ((∑' (a : α), f a) ≤ ∑' (a : α), g a)

theorem ennreal.​sum_le_tsum {α : Type u_1} {f : α → ennreal} (s : finset α) :
s.sum (λ (x : α), f x) ≤ ∑' (x : α), f x

theorem ennreal.​tsum_eq_supr_nat {f : ℕ → ennreal} :
(∑' (i : ℕ), f i) = ⨆ (i : ℕ), (finset.range i).sum (λ (a : ℕ), f a)

theorem ennreal.​le_tsum {α : Type u_1} {f : α → ennreal} (a : α) :
f a ≤ ∑' (a : α), f a

theorem ennreal.​tsum_eq_top_of_eq_top {α : Type u_1} {f : α → ennreal} :
(∃ (a : α), f a = ⊤) → (∑' (a : α), f a) = ⊤

theorem ennreal.​ne_top_of_tsum_ne_top {α : Type u_1} {f : α → ennreal} (h : (∑' (a : α), f a) ≠ ⊤) (a : α) :
f a ≠ ⊤

theorem ennreal.​tsum_mul_left {α : Type u_1} {a : ennreal} {f : α → ennreal} :
(∑' (i : α), a * f i) = a * ∑' (i : α), f i

theorem ennreal.​tsum_mul_right {α : Type u_1} {a : ennreal} {f : α → ennreal} :
(∑' (i : α), f i * a) = (∑' (i : α), f i) * a

@[simp]
theorem ennreal.​tsum_supr_eq {α : Type u_1} (a : α) {f : α → ennreal} :
(∑' (b : α), ⨆ (h : a = b), f b) = f a

theorem ennreal.​has_sum_iff_tendsto_nat {f : ℕ → ennreal} (r : ennreal) :
has_sum f r ↔ filter.tendsto (λ (n : ℕ), (finset.range n).sum (λ (i : ℕ), f i)) filter.at_top (nhds r)

theorem nnreal.​exists_le_has_sum_of_le {β : Type u_2} {f g : β → nnreal} {r : nnreal} :
(∀ (b : β), g b ≤ f b) → has_sum f r → (∃ (p : nnreal) (H : p ≤ r), has_sum g p)

theorem nnreal.​summable_of_le {β : Type u_2} {f g : β → nnreal} :
(∀ (b : β), g b ≤ f b) → summable f → summable g

theorem nnreal.​has_sum_iff_tendsto_nat {f : ℕ → nnreal} (r : nnreal) :
has_sum f r ↔ filter.tendsto (λ (n : ℕ), (finset.range n).sum (λ (i : ℕ), f i)) filter.at_top (nhds r)

theorem nnreal.​tsum_comp_le_tsum_of_inj {α : Type u_1} {β : Type u_2} {f : α → nnreal} (hf : summable f) {i : β → α} :

theorem tsum_comp_le_tsum_of_inj {α : Type u_1} {β : Type u_2} {f : α → ℝ} (hf : summable f) (hn : ∀ (a : α), 0 ≤ f a) {i : β → α} :

theorem summable_of_nonneg_of_le {β : Type u_2} {f g : β → ℝ} :
(∀ (b : β), 0 ≤ g b) → (∀ (b : β), g b ≤ f b) → summable f → summable g

theorem has_sum_iff_tendsto_nat_of_nonneg {f : ℕ → ℝ} (hf : ∀ (i : ℕ), 0 ≤ f i) (r : ℝ) :
has_sum f r ↔ filter.tendsto (λ (n : ℕ), (finset.range n).sum (λ (i : ℕ), f i)) filter.at_top (nhds r)

theorem infi_real_pos_eq_infi_nnreal_pos {α : Type u_1} [complete_lattice α] {f : ℝ → α} :
(⨅ (n : ℝ) (h : 0 < n), f n) = ⨅ (n : nnreal) (h : 0 < n), f ↑n

theorem edist_ne_top_of_mem_ball {β : Type u_2} [emetric_space β] {a : β} {r : ennreal} (x y : ↥(emetric.ball a r)) :

In an emetric ball, the distance between points is everywhere finite

def metric_space_emetric_ball {β : Type u_2} [emetric_space β] (a : β) (r : ennreal) :

Each ball in an extended metric space gives us a metric space, as the edist is everywhere finite.

Equations
theorem nhds_eq_nhds_emetric_ball {β : Type u_2} [emetric_space β] (a x : β) (r : ennreal) (h : x ∈ emetric.ball a r) :

theorem tendsto_iff_edist_tendsto_0 {α : Type u_1} {β : Type u_2} [emetric_space α] {l : filter β} {f : β → α} {y : α} :
filter.tendsto f l (nhds y) ↔ filter.tendsto (λ (x : β), has_edist.edist (f x) y) l (nhds 0)

theorem emetric.​cauchy_seq_iff_le_tendsto_0 {α : Type u_1} {β : Type u_2} [emetric_space α] [nonempty β] [semilattice_sup β] {s : β → α} :
cauchy_seq s ↔ ∃ (b : β → ennreal), (∀ (n m N : β), N ≤ n → N ≤ m → has_edist.edist (s n) (s m) ≤ b N) ∧ filter.tendsto b filter.at_top (nhds 0)

Yet another metric characterization of Cauchy sequences on integers. This one is often the most efficient.

theorem continuous_of_le_add_edist {α : Type u_1} [emetric_space α] {f : α → ennreal} (C : ennreal) :
C ≠ ⊤ → (∀ (x y : α), f x ≤ f y + C * has_edist.edist x y) → continuous f

theorem continuous_edist {α : Type u_1} [emetric_space α] :
continuous (λ (p : α × α), has_edist.edist p.fst p.snd)

theorem continuous.​edist {α : Type u_1} {β : Type u_2} [emetric_space α] [topological_space β] {f g : β → α} :
continuous f → continuous g → continuous (λ (b : β), has_edist.edist (f b) (g b))

theorem filter.​tendsto.​edist {α : Type u_1} {β : Type u_2} [emetric_space α] {f g : β → α} {x : filter β} {a b : α} :
filter.tendsto f x (nhds a) → filter.tendsto g x (nhds b) → filter.tendsto (λ (x : β), has_edist.edist (f x) (g x)) x (nhds (has_edist.edist a b))

theorem cauchy_seq_of_edist_le_of_tsum_ne_top {α : Type u_1} [emetric_space α] {f : ℕ → α} (d : ℕ → ennreal) :
(∀ (n : ℕ), has_edist.edist (f n) (f n.succ) ≤ d n) → tsum d ≠ ⊤ → cauchy_seq f

theorem emetric.​is_closed_ball {α : Type u_1} [emetric_space α] {a : α} {r : ennreal} :

theorem edist_le_tsum_of_edist_le_of_tendsto {α : Type u_1} [emetric_space α] {f : ℕ → α} (d : ℕ → ennreal) (hf : ∀ (n : ℕ), has_edist.edist (f n) (f n.succ) ≤ d n) {a : α} (ha : filter.tendsto f filter.at_top (nhds a)) (n : ℕ) :
has_edist.edist (f n) a ≤ ∑' (m : ℕ), d (n + m)

If edist (f n) (f (n+1)) is bounded above by a function d : ℕ → ennreal, then the distance from f n to the limit is bounded by ∑'_{k=n}^∞ d k.

theorem edist_le_tsum_of_edist_le_of_tendsto₀ {α : Type u_1} [emetric_space α] {f : ℕ → α} (d : ℕ → ennreal) (hf : ∀ (n : ℕ), has_edist.edist (f n) (f n.succ) ≤ d n) {a : α} :
filter.tendsto f filter.at_top (nhds a) → (has_edist.edist (f 0) a ≤ ∑' (m : ℕ), d m)

If edist (f n) (f (n+1)) is bounded above by a function d : ℕ → ennreal, then the distance from f 0 to the limit is bounded by ∑'_{k=0}^∞ d k.