Construction of the hyperreal numbers as an ultraproduct of real sequences. #
Hyperreal numbers on the ultrafilter extending the cofinite filter
Equations
Instances For
Hyperreal numbers on the ultrafilter extending the cofinite filter
Equations
- Hyperreal.«termℝ*» = Lean.ParserDescr.node `Hyperreal.termℝ* 1024 (Lean.ParserDescr.symbol "ℝ*")
Instances For
Equations
- Hyperreal.instCoeTCRealHyperreal = { coe := Hyperreal.ofReal }
@[simp]
Construct a hyperreal number from a sequence of real numbers.
Equations
- Hyperreal.ofSeq f = ↑f
Instances For
theorem
Hyperreal.ofSeq_lt_ofSeq
{f : ℕ → ℝ}
{g : ℕ → ℝ}
:
Hyperreal.ofSeq f < Hyperreal.ofSeq g ↔ ∀ᶠ (n : ℕ) in ↑(Filter.hyperfilter ℕ), f n < g n
A sample infinitesimal hyperreal
Equations
- Hyperreal.epsilon = Hyperreal.ofSeq fun (n : ℕ) => (↑n)⁻¹
Instances For
A sample infinitesimal hyperreal
Equations
- Hyperreal.termε = Lean.ParserDescr.node `Hyperreal.termε 1024 (Lean.ParserDescr.symbol "ε")
Instances For
A sample infinite hyperreal
Equations
- Hyperreal.termω = Lean.ParserDescr.node `Hyperreal.termω 1024 (Lean.ParserDescr.symbol "ω")
Instances For
theorem
Hyperreal.lt_of_tendsto_zero_of_pos
{f : ℕ → ℝ}
(hf : Filter.Tendsto f Filter.atTop (nhds 0))
{r : ℝ}
:
0 < r → Hyperreal.ofSeq f < ↑r
theorem
Hyperreal.neg_lt_of_tendsto_zero_of_pos
{f : ℕ → ℝ}
(hf : Filter.Tendsto f Filter.atTop (nhds 0))
{r : ℝ}
:
0 < r → -↑r < Hyperreal.ofSeq f
theorem
Hyperreal.gt_of_tendsto_zero_of_neg
{f : ℕ → ℝ}
(hf : Filter.Tendsto f Filter.atTop (nhds 0))
{r : ℝ}
:
r < 0 → ↑r < Hyperreal.ofSeq f
Standard part function: like a "round" to ℝ instead of ℤ
Equations
- Hyperreal.st x = if h : ∃ (r : ℝ), Hyperreal.IsSt x r then Classical.choose h else 0
Instances For
A hyperreal number is infinitesimal if its standard part is 0
Equations
Instances For
A hyperreal number is positive infinite if it is larger than all real numbers
Equations
- Hyperreal.InfinitePos x = ∀ (r : ℝ), ↑r < x
Instances For
A hyperreal number is negative infinite if it is smaller than all real numbers
Equations
- Hyperreal.InfiniteNeg x = ∀ (r : ℝ), x < ↑r
Instances For
A hyperreal number is infinite if it is infinite positive or infinite negative
Equations
Instances For
theorem
Hyperreal.isSt_ofSeq_iff_tendsto
{f : ℕ → ℝ}
{r : ℝ}
:
Hyperreal.IsSt (Hyperreal.ofSeq f) r ↔ Filter.Tendsto f (↑(Filter.hyperfilter ℕ)) (nhds r)
theorem
Hyperreal.isSt_iff_tendsto
{x : ℝ*}
{r : ℝ}
:
Hyperreal.IsSt x r ↔ Filter.Germ.Tendsto x (nhds r)
theorem
Hyperreal.isSt_of_tendsto
{f : ℕ → ℝ}
{r : ℝ}
(hf : Filter.Tendsto f Filter.atTop (nhds r))
:
theorem
Hyperreal.IsSt.lt
{x : ℝ*}
{y : ℝ*}
{r : ℝ}
{s : ℝ}
(hxr : Hyperreal.IsSt x r)
(hys : Hyperreal.IsSt y s)
(hrs : r < s)
:
x < y
theorem
Hyperreal.IsSt.unique
{x : ℝ*}
{r : ℝ}
{s : ℝ}
(hr : Hyperreal.IsSt x r)
(hs : Hyperreal.IsSt x s)
:
r = s
theorem
Hyperreal.not_infinite_of_exists_st
{x : ℝ*}
:
(∃ (r : ℝ), Hyperreal.IsSt x r) → ¬Hyperreal.Infinite x
theorem
Hyperreal.isSt_sSup
{x : ℝ*}
(hni : ¬Hyperreal.Infinite x)
:
Hyperreal.IsSt x (sSup {y : ℝ | ↑y < x})
theorem
Hyperreal.exists_st_of_not_infinite
{x : ℝ*}
(hni : ¬Hyperreal.Infinite x)
:
∃ (r : ℝ), Hyperreal.IsSt x r
theorem
Hyperreal.exists_st_iff_not_infinite
{x : ℝ*}
:
(∃ (r : ℝ), Hyperreal.IsSt x r) ↔ ¬Hyperreal.Infinite x
theorem
Hyperreal.infinite_iff_not_exists_st
{x : ℝ*}
:
Hyperreal.Infinite x ↔ ¬∃ (r : ℝ), Hyperreal.IsSt x r
theorem
Hyperreal.IsSt.isSt_st
{x : ℝ*}
{r : ℝ}
(hxr : Hyperreal.IsSt x r)
:
Hyperreal.IsSt x (Hyperreal.st x)
theorem
Hyperreal.isSt_st_of_exists_st
{x : ℝ*}
(hx : ∃ (r : ℝ), Hyperreal.IsSt x r)
:
Hyperreal.IsSt x (Hyperreal.st x)
theorem
Hyperreal.isSt_trans_real
{r : ℝ}
{s : ℝ}
{t : ℝ}
:
Hyperreal.IsSt (↑r) s → Hyperreal.IsSt (↑s) t → Hyperreal.IsSt (↑r) t
theorem
Hyperreal.isSt_inj_real
{r₁ : ℝ}
{r₂ : ℝ}
{s : ℝ}
(h1 : Hyperreal.IsSt (↑r₁) s)
(h2 : Hyperreal.IsSt (↑r₂) s)
:
r₁ = r₂
theorem
Hyperreal.IsSt.map
{x : ℝ*}
{r : ℝ}
(hxr : Hyperreal.IsSt x r)
{f : ℝ → ℝ}
(hf : ContinuousAt f r)
:
Hyperreal.IsSt (Filter.Germ.map f x) (f r)
theorem
Hyperreal.IsSt.map₂
{x : ℝ*}
{y : ℝ*}
{r : ℝ}
{s : ℝ}
(hxr : Hyperreal.IsSt x r)
(hys : Hyperreal.IsSt y s)
{f : ℝ → ℝ → ℝ}
(hf : ContinuousAt (Function.uncurry f) (r, s))
:
Hyperreal.IsSt (Filter.Germ.map₂ f x y) (f r s)
theorem
Hyperreal.IsSt.add
{x : ℝ*}
{y : ℝ*}
{r : ℝ}
{s : ℝ}
(hxr : Hyperreal.IsSt x r)
(hys : Hyperreal.IsSt y s)
:
Hyperreal.IsSt (x + y) (r + s)
theorem
Hyperreal.IsSt.sub
{x : ℝ*}
{y : ℝ*}
{r : ℝ}
{s : ℝ}
(hxr : Hyperreal.IsSt x r)
(hys : Hyperreal.IsSt y s)
:
Hyperreal.IsSt (x - y) (r - s)
theorem
Hyperreal.IsSt.le
{x : ℝ*}
{y : ℝ*}
{r : ℝ}
{s : ℝ}
(hrx : Hyperreal.IsSt x r)
(hsy : Hyperreal.IsSt y s)
(hxy : x ≤ y)
:
r ≤ s
theorem
Hyperreal.st_le_of_le
{x : ℝ*}
{y : ℝ*}
(hix : ¬Hyperreal.Infinite x)
(hiy : ¬Hyperreal.Infinite y)
:
x ≤ y → Hyperreal.st x ≤ Hyperreal.st y
theorem
Hyperreal.lt_of_st_lt
{x : ℝ*}
{y : ℝ*}
(hix : ¬Hyperreal.Infinite x)
(hiy : ¬Hyperreal.Infinite y)
:
Hyperreal.st x < Hyperreal.st y → x < y
Basic lemmas about infinite #
@[simp]
@[simp]
@[simp]
theorem
Hyperreal.infinitePos_iff_infinite_and_pos
{x : ℝ*}
:
Hyperreal.InfinitePos x ↔ Hyperreal.Infinite x ∧ 0 < x
theorem
Hyperreal.infiniteNeg_iff_infinite_and_neg
{x : ℝ*}
:
Hyperreal.InfiniteNeg x ↔ Hyperreal.Infinite x ∧ x < 0
theorem
Hyperreal.infinitePos_abs_iff_infinite_abs
{x : ℝ*}
:
Hyperreal.InfinitePos |x| ↔ Hyperreal.Infinite |x|
@[simp]
@[simp]
theorem
Hyperreal.infinitePos_add_not_infiniteNeg
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfinitePos x → ¬Hyperreal.InfiniteNeg y → Hyperreal.InfinitePos (x + y)
theorem
Hyperreal.not_infiniteNeg_add_infinitePos
{x : ℝ*}
{y : ℝ*}
:
¬Hyperreal.InfiniteNeg x → Hyperreal.InfinitePos y → Hyperreal.InfinitePos (x + y)
theorem
Hyperreal.infiniteNeg_add_not_infinitePos
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfiniteNeg x → ¬Hyperreal.InfinitePos y → Hyperreal.InfiniteNeg (x + y)
theorem
Hyperreal.not_infinitePos_add_infiniteNeg
{x : ℝ*}
{y : ℝ*}
:
¬Hyperreal.InfinitePos x → Hyperreal.InfiniteNeg y → Hyperreal.InfiniteNeg (x + y)
theorem
Hyperreal.infinitePos_add_infinitePos
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfinitePos x → Hyperreal.InfinitePos y → Hyperreal.InfinitePos (x + y)
theorem
Hyperreal.infiniteNeg_add_infiniteNeg
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfiniteNeg x → Hyperreal.InfiniteNeg y → Hyperreal.InfiniteNeg (x + y)
theorem
Hyperreal.infinitePos_add_not_infinite
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfinitePos x → ¬Hyperreal.Infinite y → Hyperreal.InfinitePos (x + y)
theorem
Hyperreal.infiniteNeg_add_not_infinite
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfiniteNeg x → ¬Hyperreal.Infinite y → Hyperreal.InfiniteNeg (x + y)
theorem
Hyperreal.infinitePos_of_tendsto_top
{f : ℕ → ℝ}
(hf : Filter.Tendsto f Filter.atTop Filter.atTop)
:
theorem
Hyperreal.infiniteNeg_of_tendsto_bot
{f : ℕ → ℝ}
(hf : Filter.Tendsto f Filter.atTop Filter.atBot)
:
theorem
Hyperreal.not_infinite_add
{x : ℝ*}
{y : ℝ*}
(hx : ¬Hyperreal.Infinite x)
(hy : ¬Hyperreal.Infinite y)
:
¬Hyperreal.Infinite (x + y)
theorem
Hyperreal.IsSt.mul
{x : ℝ*}
{y : ℝ*}
{r : ℝ}
{s : ℝ}
(hxr : Hyperreal.IsSt x r)
(hys : Hyperreal.IsSt y s)
:
Hyperreal.IsSt (x * y) (r * s)
theorem
Hyperreal.not_infinite_mul
{x : ℝ*}
{y : ℝ*}
(hx : ¬Hyperreal.Infinite x)
(hy : ¬Hyperreal.Infinite y)
:
¬Hyperreal.Infinite (x * y)
theorem
Hyperreal.st_add
{x : ℝ*}
{y : ℝ*}
(hx : ¬Hyperreal.Infinite x)
(hy : ¬Hyperreal.Infinite y)
:
Hyperreal.st (x + y) = Hyperreal.st x + Hyperreal.st y
theorem
Hyperreal.st_mul
{x : ℝ*}
{y : ℝ*}
(hx : ¬Hyperreal.Infinite x)
(hy : ¬Hyperreal.Infinite y)
:
Hyperreal.st (x * y) = Hyperreal.st x * Hyperreal.st y
Basic lemmas about infinitesimal #
theorem
Hyperreal.lt_of_pos_of_infinitesimal
{x : ℝ*}
:
Hyperreal.Infinitesimal x → ∀ (r : ℝ), 0 < r → x < ↑r
theorem
Hyperreal.lt_neg_of_pos_of_infinitesimal
{x : ℝ*}
:
Hyperreal.Infinitesimal x → ∀ (r : ℝ), 0 < r → -↑r < x
theorem
Hyperreal.gt_of_neg_of_infinitesimal
{x : ℝ*}
(hi : Hyperreal.Infinitesimal x)
(r : ℝ)
(hr : r < 0)
:
↑r < x
theorem
Hyperreal.abs_lt_real_iff_infinitesimal
{x : ℝ*}
:
Hyperreal.Infinitesimal x ↔ ∀ (r : ℝ), r ≠ 0 → |x| < |↑r|
theorem
Hyperreal.Infinitesimal.add
{x : ℝ*}
{y : ℝ*}
(hx : Hyperreal.Infinitesimal x)
(hy : Hyperreal.Infinitesimal y)
:
Hyperreal.Infinitesimal (x + y)
@[simp]
theorem
Hyperreal.Infinitesimal.mul
{x : ℝ*}
{y : ℝ*}
(hx : Hyperreal.Infinitesimal x)
(hy : Hyperreal.Infinitesimal y)
:
Hyperreal.Infinitesimal (x * y)
theorem
Hyperreal.infinitesimal_of_tendsto_zero
{f : ℕ → ℝ}
(h : Filter.Tendsto f Filter.atTop (nhds 0))
:
theorem
Hyperreal.not_real_of_infinitesimal_ne_zero
(x : ℝ*)
:
Hyperreal.Infinitesimal x → x ≠ 0 → ∀ (r : ℝ), x ≠ ↑r
theorem
Hyperreal.IsSt.infinitesimal_sub
{x : ℝ*}
{r : ℝ}
(hxr : Hyperreal.IsSt x r)
:
Hyperreal.Infinitesimal (x - ↑r)
theorem
Hyperreal.infinitesimal_sub_st
{x : ℝ*}
(hx : ¬Hyperreal.Infinite x)
:
Hyperreal.Infinitesimal (x - ↑(Hyperreal.st x))
theorem
Hyperreal.infinite_of_infinitesimal_inv
{x : ℝ*}
(h0 : x ≠ 0)
(hi : Hyperreal.Infinitesimal x⁻¹)
:
Hyperreal.st
stuff that requires infinitesimal machinery #
theorem
Hyperreal.IsSt.inv
{x : ℝ*}
{r : ℝ}
(hi : ¬Hyperreal.Infinitesimal x)
(hr : Hyperreal.IsSt x r)
:
Infinite stuff that requires infinitesimal machinery #
theorem
Hyperreal.infinitePos_mul_of_infinitePos_not_infinitesimal_pos
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfinitePos x → ¬Hyperreal.Infinitesimal y → 0 < y → Hyperreal.InfinitePos (x * y)
theorem
Hyperreal.infinitePos_mul_of_not_infinitesimal_pos_infinitePos
{x : ℝ*}
{y : ℝ*}
:
¬Hyperreal.Infinitesimal x → 0 < x → Hyperreal.InfinitePos y → Hyperreal.InfinitePos (x * y)
theorem
Hyperreal.infinitePos_mul_of_infiniteNeg_not_infinitesimal_neg
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfiniteNeg x → ¬Hyperreal.Infinitesimal y → y < 0 → Hyperreal.InfinitePos (x * y)
theorem
Hyperreal.infinitePos_mul_of_not_infinitesimal_neg_infiniteNeg
{x : ℝ*}
{y : ℝ*}
:
¬Hyperreal.Infinitesimal x → x < 0 → Hyperreal.InfiniteNeg y → Hyperreal.InfinitePos (x * y)
theorem
Hyperreal.infiniteNeg_mul_of_infinitePos_not_infinitesimal_neg
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfinitePos x → ¬Hyperreal.Infinitesimal y → y < 0 → Hyperreal.InfiniteNeg (x * y)
theorem
Hyperreal.infiniteNeg_mul_of_not_infinitesimal_neg_infinitePos
{x : ℝ*}
{y : ℝ*}
:
¬Hyperreal.Infinitesimal x → x < 0 → Hyperreal.InfinitePos y → Hyperreal.InfiniteNeg (x * y)
theorem
Hyperreal.infiniteNeg_mul_of_infiniteNeg_not_infinitesimal_pos
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfiniteNeg x → ¬Hyperreal.Infinitesimal y → 0 < y → Hyperreal.InfiniteNeg (x * y)
theorem
Hyperreal.infiniteNeg_mul_of_not_infinitesimal_pos_infiniteNeg
{x : ℝ*}
{y : ℝ*}
:
¬Hyperreal.Infinitesimal x → 0 < x → Hyperreal.InfiniteNeg y → Hyperreal.InfiniteNeg (x * y)
theorem
Hyperreal.infinitePos_mul_infinitePos
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfinitePos x → Hyperreal.InfinitePos y → Hyperreal.InfinitePos (x * y)
theorem
Hyperreal.infiniteNeg_mul_infiniteNeg
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfiniteNeg x → Hyperreal.InfiniteNeg y → Hyperreal.InfinitePos (x * y)
theorem
Hyperreal.infinitePos_mul_infiniteNeg
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfinitePos x → Hyperreal.InfiniteNeg y → Hyperreal.InfiniteNeg (x * y)
theorem
Hyperreal.infiniteNeg_mul_infinitePos
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.InfiniteNeg x → Hyperreal.InfinitePos y → Hyperreal.InfiniteNeg (x * y)
theorem
Hyperreal.infinite_mul_of_infinite_not_infinitesimal
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.Infinite x → ¬Hyperreal.Infinitesimal y → Hyperreal.Infinite (x * y)
theorem
Hyperreal.infinite_mul_of_not_infinitesimal_infinite
{x : ℝ*}
{y : ℝ*}
:
¬Hyperreal.Infinitesimal x → Hyperreal.Infinite y → Hyperreal.Infinite (x * y)
theorem
Hyperreal.Infinite.mul
{x : ℝ*}
{y : ℝ*}
:
Hyperreal.Infinite x → Hyperreal.Infinite y → Hyperreal.Infinite (x * y)