Extended non-negative reals #
We define ennreal = ℝ≥0∞ := with_top ℝ≥0 to be the type of extended nonnegative real numbers,
i.e., the interval [0, +∞]. This type is used as the codomain of a measure_theory.measure,
and of the extended distance edist in a emetric_space.
In this file we define some algebraic operations and a linear order on ℝ≥0∞
and prove basic properties of these operations, order, and conversions to/from ℝ, ℝ≥0, and ℕ.
Main definitions #
-
ℝ≥0∞: the extended nonnegative real numbers[0, ∞]; defined aswith_top ℝ≥0; it is equipped with the following structures:-
coercion from
ℝ≥0defined in the natural way; -
the natural structure of a complete dense linear order:
↑p ≤ ↑q ↔ p ≤ qand∀ a, a ≤ ∞; -
a + bis defined so that↑p + ↑q = ↑(p + q)for(p q : ℝ≥0)anda + ∞ = ∞ + a = ∞; -
a * bis defined so that↑p * ↑q = ↑(p * q)for(p q : ℝ≥0),0 * ∞ = ∞ * 0 = 0, anda * ∞ = ∞ * a = ∞fora ≠ 0; -
a - bis defined as the minimaldsuch thata ≤ d + b; this way we have↑p - ↑q = ↑(p - q),∞ - ↑p = ∞,↑p - ∞ = ∞ - ∞ = 0; note that there is no negation, only subtraction; -
a⁻¹is defined asInf {b | 1 ≤ a * b}. This way we have(↑p)⁻¹ = ↑(p⁻¹)forp : ℝ≥0,p ≠ 0,0⁻¹ = ∞, and∞⁻¹ = 0. -
a / bis defined asa * b⁻¹.
The addition and multiplication defined this way together with
0 = ↑0and1 = ↑1turnℝ≥0∞into a canonically ordered commutative semiring of characteristic zero. -
-
Coercions to/from other types:
-
coercion
ℝ≥0 → ℝ≥0∞is defined ashas_coe, so one can use(p : ℝ≥0)in a context that expectsa : ℝ≥0∞, and Lean will applycoeautomatically; -
ennreal.to_nnrealsends↑ptopand∞to0; -
ennreal.to_real := coe ∘ ennreal.to_nnrealsends↑p,p : ℝ≥0to(↑p : ℝ)and∞to0; -
ennreal.of_real := coe ∘ real.to_nnrealsendsx : ℝto↑⟨max x 0, _⟩ -
ennreal.ne_top_equiv_nnrealis an equivalence between{a : ℝ≥0∞ // a ≠ 0}andℝ≥0.
-
Implementation notes #
We define a can_lift ℝ≥0∞ ℝ≥0 instance, so one of the ways to prove theorems about an ℝ≥0∞
number a is to consider the cases a = ∞ and a ≠ ∞, and use the tactic lift a to ℝ≥0 using ha
in the second case. This instance is even more useful if one already has ha : a ≠ ∞ in the
context, or if we have (f : α → ℝ≥0∞) (hf : ∀ x, f x ≠ ∞).
Notations #
ℝ≥0∞: the type of the extended nonnegative real numbers;ℝ≥0: the type of nonnegative real numbers[0, ∞); defined indata.real.nnreal;∞: a localized notation inℝ≥0∞for⊤ : ℝ≥0∞.
Equations
- ennreal.inhabited = {default := 0}
to_nnreal x returns x if it is real, otherwise 0.
Equations
- ennreal.to_nnreal (some r) = r
- ennreal.to_nnreal none = 0
of_real x returns x if it is nonnegative, 0 otherwise.
Equations
- ennreal.of_real r = ↑(r.to_nnreal)
(1 : ℝ≥0∞) ≤ 1, recorded as a fact for use with Lp spaces.
(1 : ℝ≥0∞) ≤ 2, recorded as a fact for use with Lp spaces.
The set of numbers in ℝ≥0∞ that are not equal to ∞ is equivalent to ℝ≥0.
Coercion ℝ≥0 → ℝ≥0∞ as a ring_hom.
Equations
- ennreal.of_nnreal_hom = {to_fun := coe coe_to_lift, map_one' := ennreal.coe_one, map_mul' := ennreal.of_nnreal_hom._proof_1, map_zero' := ennreal.coe_zero, map_add' := ennreal.of_nnreal_hom._proof_2}
A mul_action over ℝ≥0∞ restricts to a mul_action over ℝ≥0.
A distrib_mul_action over ℝ≥0∞ restricts to a distrib_mul_action over ℝ≥0.
An algebra over ℝ≥0∞ restricts to an algebra over ℝ≥0.
Equations
- ennreal.algebra = {to_has_scalar := {smul := has_scalar.smul smul_with_zero.to_has_scalar}, to_ring_hom := (algebra_map ℝ≥0∞ A).comp ennreal.of_nnreal_hom, commutes' := _, smul_def' := _}
An element a is add_le_cancellable if a + b ≤ a + c implies b ≤ c for all b and c.
This is true in ℝ≥0∞ for all elements except ∞.
This lemma has an abbreviated name because it is used frequently.
This lemma has an abbreviated name because it is used frequently.
This lemma has an abbreviated name because it is used frequently.
This lemma has an abbreviated name because it is used frequently.
This is a special case of with_top.top_sub_coe in the ennreal namespace
This is a special case of with_top.sub_top in the ennreal namespace
Equations
- ennreal.div_inv_monoid = {mul := monoid.mul infer_instance, mul_assoc := ennreal.div_inv_monoid._proof_1, one := monoid.one infer_instance, one_mul := ennreal.div_inv_monoid._proof_2, mul_one := ennreal.div_inv_monoid._proof_3, npow := monoid.npow infer_instance, npow_zero' := ennreal.div_inv_monoid._proof_4, npow_succ' := ennreal.div_inv_monoid._proof_5, inv := has_inv.inv ennreal.has_inv, div := λ (a b : ℝ≥0∞), monoid.mul a b⁻¹, div_eq_mul_inv := ennreal.div_inv_monoid._proof_6, zpow := zpow_rec {inv := has_inv.inv ennreal.has_inv}, zpow_zero' := ennreal.div_inv_monoid._proof_12, zpow_succ' := ennreal.div_inv_monoid._proof_13, zpow_neg' := ennreal.div_inv_monoid._proof_14}
Equations
- ennreal.has_involutive_inv = {inv := has_inv.inv ennreal.has_inv, inv_inv := ennreal.has_involutive_inv._proof_1}
The inverse map λ x, x⁻¹ is an order isomorphism between ℝ≥0∞ and its order_dual
Equations
- order_iso.inv_ennreal = {to_equiv := {to_fun := λ (x : ℝ≥0∞), x⁻¹, inv_fun := λ (x : order_dual ℝ≥0∞), x⁻¹, left_inv := order_iso.inv_ennreal._proof_1, right_inv := order_iso.inv_ennreal._proof_2}, map_rel_iff' := order_iso.inv_ennreal._proof_3}
ennreal.to_nnreal as a monoid_hom.
Equations
- ennreal.to_nnreal_hom = {to_fun := ennreal.to_nnreal, map_one' := ennreal.to_nnreal_hom._proof_1, map_mul' := ennreal.to_nnreal_hom._proof_2}
ennreal.to_real as a monoid_hom.
If x ≠ ∞, then right multiplication by x maps infimum over a nonempty type to infimum. See
also ennreal.infi_mul_of_ne that assumes x ≠ 0 but does not require [nonempty ι].
If x ≠ ∞, then left multiplication by x maps infimum over a nonempty type to infimum. See
also ennreal.mul_infi_of_ne that assumes x ≠ 0 but does not require [nonempty ι].
supr_mul, mul_supr and variants are in topology.instances.ennreal.