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)⁻¹)
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 : ℝ} :
0 < r → -↑r < hyperreal.of_seq f
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
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_pos_iff_infinite_of_pos
{x : ℝ*} :
0 < x → (x.infinite_pos ↔ x.infinite)
theorem
hyperreal.infinite_pos_iff_infinite_of_nonneg
{x : ℝ*} :
0 ≤ x → (x.infinite_pos ↔ x.infinite)
theorem
hyperreal.infinite_neg_iff_infinite_of_neg
{x : ℝ*} :
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 : ℝ*} :
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
Facts about st
that require some infinite machinery
Basic lemmas about infinitesimal
theorem
hyperreal.infinitesimal_add
{x y : ℝ*} :
x.infinitesimal → y.infinitesimal → (x + y).infinitesimal
theorem
hyperreal.infinitesimal_mul
{x y : ℝ*} :
x.infinitesimal → y.infinitesimal → (x * y).infinitesimal
theorem
hyperreal.infinitesimal_of_tendsto_zero
{f : ℕ → ℝ} :
filter.tendsto f filter.at_top (nhds 0) → (hyperreal.of_seq f).infinitesimal
theorem
hyperreal.not_real_of_infinitesimal_ne_zero
(x : ℝ*)
(a : x.infinitesimal)
(a_1 : x ≠ 0)
(r : ℝ) :
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_iff_infinitesimal_inv
{x : ℝ*} :
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 : ℝ*} :
x ≠ 0 → (x.infinitesimal ↔ x⁻¹.infinite)
st
stuff that requires infinitesimal machinery
theorem
hyperreal.is_st_of_tendsto
{f : ℕ → ℝ}
{r : ℝ} :
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
theorem
hyperreal.infinite_mul_of_infinite_not_infinitesimal
{x y : ℝ*} :
x.infinite → ¬y.infinitesimal → (x * y).infinite
theorem
hyperreal.infinite_mul_of_not_infinitesimal_infinite
{x y : ℝ*} :
¬x.infinitesimal → y.infinite → (x * y).infinite