Construction of the hyperreal numbers as an ultraproduct of real sequences.
@[instance]
Equations
- hyperreal.inhabited = {default := 0}
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)⁻¹)
theorem
hyperreal.lt_of_tendsto_zero_of_pos
{f : ℕ → ℝ}
(hf : filter.tendsto f filter.at_top (𝓝 0))
{r : ℝ}
(a : 0 < r) :
hyperreal.of_seq f < ↑r
theorem
hyperreal.neg_lt_of_tendsto_zero_of_pos
{f : ℕ → ℝ}
(hf : filter.tendsto f filter.at_top (𝓝 0))
{r : ℝ}
(a : 0 < r) :
-↑r < hyperreal.of_seq f
theorem
hyperreal.gt_of_tendsto_zero_of_neg
{f : ℕ → ℝ}
(hf : filter.tendsto f filter.at_top (𝓝 0))
{r : ℝ}
(a : 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
Equations
- x.infinite_pos = ∀ (r : ℝ), ↑r < x
A hyperreal number is negative infinite if it is smaller than all real numbers
Equations
- x.infinite_neg = ∀ (r : ℝ), x < ↑r
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_neg_neg_of_infinite_pos
{x : ℝ*}
(a : x.infinite_pos) :
(-x).infinite_neg
theorem
hyperreal.infinite_pos_neg_of_infinite_neg
{x : ℝ*}
(a : x.infinite_neg) :
(-x).infinite_pos
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_abs_iff_infinite_abs
{x : ℝ*} :
(abs x).infinite_pos ↔ (abs x).infinite
theorem
hyperreal.infinite_pos_add_not_infinite_neg
{x y : ℝ*}
(a : x.infinite_pos)
(a_1 : ¬y.infinite_neg) :
(x + y).infinite_pos
theorem
hyperreal.not_infinite_neg_add_infinite_pos
{x y : ℝ*}
(a : ¬x.infinite_neg)
(a_1 : y.infinite_pos) :
(x + y).infinite_pos
theorem
hyperreal.infinite_neg_add_not_infinite_pos
{x y : ℝ*}
(a : x.infinite_neg)
(a_1 : ¬y.infinite_pos) :
(x + y).infinite_neg
theorem
hyperreal.not_infinite_pos_add_infinite_neg
{x y : ℝ*}
(a : ¬x.infinite_pos)
(a_1 : y.infinite_neg) :
(x + y).infinite_neg
theorem
hyperreal.infinite_pos_add_infinite_pos
{x y : ℝ*}
(a : x.infinite_pos)
(a_1 : y.infinite_pos) :
(x + y).infinite_pos
theorem
hyperreal.infinite_neg_add_infinite_neg
{x y : ℝ*}
(a : x.infinite_neg)
(a_1 : y.infinite_neg) :
(x + y).infinite_neg
theorem
hyperreal.infinite_pos_add_not_infinite
{x y : ℝ*}
(a : x.infinite_pos)
(a_1 : ¬y.infinite) :
(x + y).infinite_pos
theorem
hyperreal.infinite_neg_add_not_infinite
{x y : ℝ*}
(a : x.infinite_neg)
(a_1 : ¬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.lt_neg_of_pos_of_infinitesimal
{x : ℝ*}
(a : x.infinitesimal)
(r : ℝ)
(a_1 : 0 < r) :
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_of_tendsto_zero
{f : ℕ → ℝ}
(a : filter.tendsto f filter.at_top (𝓝 0)) :
theorem
hyperreal.not_real_of_infinitesimal_ne_zero
(x : ℝ*)
(a : x.infinitesimal)
(a_1 : x ≠ 0)
(r : ℝ) :
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 (𝓝 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 : ℝ*}
(a : x.infinite_pos)
(a_1 : ¬y.infinitesimal)
(a_2 : 0 < y) :
(x * y).infinite_pos
theorem
hyperreal.infinite_pos_mul_of_not_infinitesimal_pos_infinite_pos
{x y : ℝ*}
(a : ¬x.infinitesimal)
(a_1 : 0 < x)
(a_2 : y.infinite_pos) :
(x * y).infinite_pos
theorem
hyperreal.infinite_pos_mul_of_infinite_neg_not_infinitesimal_neg
{x y : ℝ*}
(a : x.infinite_neg)
(a_1 : ¬y.infinitesimal)
(a_2 : y < 0) :
(x * y).infinite_pos
theorem
hyperreal.infinite_pos_mul_of_not_infinitesimal_neg_infinite_neg
{x y : ℝ*}
(a : ¬x.infinitesimal)
(a_1 : x < 0)
(a_2 : y.infinite_neg) :
(x * y).infinite_pos
theorem
hyperreal.infinite_neg_mul_of_infinite_pos_not_infinitesimal_neg
{x y : ℝ*}
(a : x.infinite_pos)
(a_1 : ¬y.infinitesimal)
(a_2 : y < 0) :
(x * y).infinite_neg
theorem
hyperreal.infinite_neg_mul_of_not_infinitesimal_neg_infinite_pos
{x y : ℝ*}
(a : ¬x.infinitesimal)
(a_1 : x < 0)
(a_2 : y.infinite_pos) :
(x * y).infinite_neg
theorem
hyperreal.infinite_neg_mul_of_infinite_neg_not_infinitesimal_pos
{x y : ℝ*}
(a : x.infinite_neg)
(a_1 : ¬y.infinitesimal)
(a_2 : 0 < y) :
(x * y).infinite_neg
theorem
hyperreal.infinite_neg_mul_of_not_infinitesimal_pos_infinite_neg
{x y : ℝ*}
(a : ¬x.infinitesimal)
(a_1 : 0 < x)
(a_2 : y.infinite_neg) :
(x * y).infinite_neg
theorem
hyperreal.infinite_pos_mul_infinite_pos
{x y : ℝ*}
(a : x.infinite_pos)
(a_1 : y.infinite_pos) :
(x * y).infinite_pos
theorem
hyperreal.infinite_neg_mul_infinite_neg
{x y : ℝ*}
(a : x.infinite_neg)
(a_1 : y.infinite_neg) :
(x * y).infinite_pos
theorem
hyperreal.infinite_pos_mul_infinite_neg
{x y : ℝ*}
(a : x.infinite_pos)
(a_1 : y.infinite_neg) :
(x * y).infinite_neg
theorem
hyperreal.infinite_neg_mul_infinite_pos
{x y : ℝ*}
(a : x.infinite_neg)
(a_1 : y.infinite_pos) :
(x * y).infinite_neg
theorem
hyperreal.infinite_mul_of_infinite_not_infinitesimal
{x y : ℝ*}
(a : x.infinite)
(a_1 : ¬y.infinitesimal) :
theorem
hyperreal.infinite_mul_of_not_infinitesimal_infinite
{x y : ℝ*}
(a : ¬x.infinitesimal)
(a_1 : y.infinite) :