Construction of the hyperreal numbers as an ultraproduct of real sequences. #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Hyperreal numbers on the ultrafilter extending the cofinite filter
Instances for hyperreal
@[protected, instance]
@[simp, norm_cast]
@[simp, norm_cast]
Construct a hyperreal number from a sequence of real numbers.
Equations
- hyperreal.of_seq f = ↑f
A sample infinitesimal hyperreal
Equations
- hyperreal.epsilon = hyperreal.of_seq (λ (n : ℕ), (↑n)⁻¹)
A sample infinite hyperreal
Equations
theorem
hyperreal.lt_of_tendsto_zero_of_pos
{f : ℕ → ℝ}
(hf : filter.tendsto f filter.at_top (nhds 0))
{r : ℝ} :
0 < r → hyperreal.of_seq f < ↑r
theorem
hyperreal.neg_lt_of_tendsto_zero_of_pos
{f : ℕ → ℝ}
(hf : filter.tendsto f filter.at_top (nhds 0))
{r : ℝ} :
theorem
hyperreal.gt_of_tendsto_zero_of_neg
{f : ℕ → ℝ}
(hf : filter.tendsto f filter.at_top (nhds 0))
{r : ℝ} :
r < 0 → ↑r < hyperreal.of_seq f
A hyperreal number is infinitesimal if its standard part is 0
Equations
- x.infinitesimal = x.is_st 0
A hyperreal number is positive infinite if it is larger than all real numbers
A hyperreal number is negative infinite if it is smaller than all real numbers
A hyperreal number is infinite if it is infinite positive or infinite negative
Equations
- x.infinite = (x.infinite_pos ∨ x.infinite_neg)
Some facts about st
#
Basic lemmas about infinite #
theorem
hyperreal.infinite_pos_iff_infinite_of_pos
{x : ℝ*}
(hp : 0 < x) :
x.infinite_pos ↔ x.infinite
theorem
hyperreal.infinite_pos_iff_infinite_of_nonneg
{x : ℝ*}
(hp : 0 ≤ x) :
x.infinite_pos ↔ x.infinite
theorem
hyperreal.infinite_neg_iff_infinite_of_neg
{x : ℝ*}
(hn : x < 0) :
x.infinite_neg ↔ x.infinite
theorem
hyperreal.infinite_pos_add_not_infinite_neg
{x y : ℝ*} :
x.infinite_pos → ¬y.infinite_neg → (x + y).infinite_pos
theorem
hyperreal.not_infinite_neg_add_infinite_pos
{x y : ℝ*} :
¬x.infinite_neg → y.infinite_pos → (x + y).infinite_pos
theorem
hyperreal.infinite_neg_add_not_infinite_pos
{x y : ℝ*} :
x.infinite_neg → ¬y.infinite_pos → (x + y).infinite_neg
theorem
hyperreal.not_infinite_pos_add_infinite_neg
{x y : ℝ*} :
¬x.infinite_pos → y.infinite_neg → (x + y).infinite_neg
theorem
hyperreal.infinite_pos_add_infinite_pos
{x y : ℝ*} :
x.infinite_pos → y.infinite_pos → (x + y).infinite_pos
theorem
hyperreal.infinite_neg_add_infinite_neg
{x y : ℝ*} :
x.infinite_neg → y.infinite_neg → (x + y).infinite_neg
theorem
hyperreal.infinite_pos_add_not_infinite
{x y : ℝ*} :
x.infinite_pos → ¬y.infinite → (x + y).infinite_pos
theorem
hyperreal.infinite_neg_add_not_infinite
{x y : ℝ*} :
x.infinite_neg → ¬y.infinite → (x + y).infinite_neg
theorem
hyperreal.infinite_pos_of_tendsto_top
{f : ℕ → ℝ}
(hf : filter.tendsto f filter.at_top filter.at_top) :
theorem
hyperreal.infinite_neg_of_tendsto_bot
{f : ℕ → ℝ}
(hf : filter.tendsto f filter.at_top filter.at_bot) :
Facts about st
that require some infinite machinery #
Basic lemmas about infinitesimal #
theorem
hyperreal.infinitesimal_add
{x y : ℝ*}
(hx : x.infinitesimal)
(hy : y.infinitesimal) :
(x + y).infinitesimal
theorem
hyperreal.infinitesimal_mul
{x y : ℝ*}
(hx : x.infinitesimal)
(hy : y.infinitesimal) :
(x * y).infinitesimal
theorem
hyperreal.infinitesimal_sub_is_st
{x : ℝ*}
{r : ℝ}
(hxr : x.is_st r) :
(x - ↑r).infinitesimal
theorem
hyperreal.infinite_pos_iff_infinitesimal_inv_pos
{x : ℝ*} :
x.infinite_pos ↔ x⁻¹.infinitesimal ∧ 0 < x⁻¹
theorem
hyperreal.infinite_neg_iff_infinitesimal_inv_neg
{x : ℝ*} :
x.infinite_neg ↔ x⁻¹.infinitesimal ∧ x⁻¹ < 0
theorem
hyperreal.infinite_of_infinitesimal_inv
{x : ℝ*}
(h0 : x ≠ 0)
(hi : x⁻¹.infinitesimal) :
x.infinite
theorem
hyperreal.infinite_iff_infinitesimal_inv
{x : ℝ*}
(h0 : x ≠ 0) :
x.infinite ↔ x⁻¹.infinitesimal
theorem
hyperreal.infinitesimal_pos_iff_infinite_pos_inv
{x : ℝ*} :
x⁻¹.infinite_pos ↔ x.infinitesimal ∧ 0 < x
theorem
hyperreal.infinitesimal_neg_iff_infinite_neg_inv
{x : ℝ*} :
x⁻¹.infinite_neg ↔ x.infinitesimal ∧ x < 0
theorem
hyperreal.infinitesimal_iff_infinite_inv
{x : ℝ*}
(h : x ≠ 0) :
x.infinitesimal ↔ x⁻¹.infinite
st
stuff that requires infinitesimal machinery #
theorem
hyperreal.is_st_of_tendsto
{f : ℕ → ℝ}
{r : ℝ}
(hf : filter.tendsto f filter.at_top (nhds r)) :
(hyperreal.of_seq f).is_st r
Infinite stuff that requires infinitesimal machinery #
theorem
hyperreal.infinite_pos_mul_of_infinite_pos_not_infinitesimal_pos
{x y : ℝ*} :
x.infinite_pos → ¬y.infinitesimal → 0 < y → (x * y).infinite_pos
theorem
hyperreal.infinite_pos_mul_of_not_infinitesimal_pos_infinite_pos
{x y : ℝ*} :
¬x.infinitesimal → 0 < x → y.infinite_pos → (x * y).infinite_pos
theorem
hyperreal.infinite_pos_mul_of_infinite_neg_not_infinitesimal_neg
{x y : ℝ*} :
x.infinite_neg → ¬y.infinitesimal → y < 0 → (x * y).infinite_pos
theorem
hyperreal.infinite_pos_mul_of_not_infinitesimal_neg_infinite_neg
{x y : ℝ*} :
¬x.infinitesimal → x < 0 → y.infinite_neg → (x * y).infinite_pos
theorem
hyperreal.infinite_neg_mul_of_infinite_pos_not_infinitesimal_neg
{x y : ℝ*} :
x.infinite_pos → ¬y.infinitesimal → y < 0 → (x * y).infinite_neg
theorem
hyperreal.infinite_neg_mul_of_not_infinitesimal_neg_infinite_pos
{x y : ℝ*} :
¬x.infinitesimal → x < 0 → y.infinite_pos → (x * y).infinite_neg
theorem
hyperreal.infinite_neg_mul_of_infinite_neg_not_infinitesimal_pos
{x y : ℝ*} :
x.infinite_neg → ¬y.infinitesimal → 0 < y → (x * y).infinite_neg
theorem
hyperreal.infinite_neg_mul_of_not_infinitesimal_pos_infinite_neg
{x y : ℝ*} :
¬x.infinitesimal → 0 < x → y.infinite_neg → (x * y).infinite_neg
theorem
hyperreal.infinite_pos_mul_infinite_pos
{x y : ℝ*} :
x.infinite_pos → y.infinite_pos → (x * y).infinite_pos
theorem
hyperreal.infinite_neg_mul_infinite_neg
{x y : ℝ*} :
x.infinite_neg → y.infinite_neg → (x * y).infinite_pos
theorem
hyperreal.infinite_pos_mul_infinite_neg
{x y : ℝ*} :
x.infinite_pos → y.infinite_neg → (x * y).infinite_neg
theorem
hyperreal.infinite_neg_mul_infinite_pos
{x y : ℝ*} :
x.infinite_neg → y.infinite_pos → (x * y).infinite_neg