Documentation

Mathlib.Analysis.Real.Hyperreal

Construction of the hyperreal numbers as an ultraproduct of real sequences #

We define the Hyperreal numbers as quotients of sequences ℕ → ℝ by an ultrafilter. These form a field, and we prove some of their basic properties.

Note that most of the machinery that is usually defined for the specific purpose of non-standard analysis (infinitesimal and infinite elements, standard parts) has been generalized to other non-archimedean fields. In particular:

Todo #

Use Łoś's Theorem FirstOrder.Language.Ultraproduct.sentence_realize to formalize the transfer principle on Hyperreal.

Hyperreal numbers on the ultrafilter extending the cofinite filter.

Equations
Instances For
    @[instance_reducible]
    noncomputable instance instInhabitedHyperreal :
    Equations

    Hyperreal numbers on the ultrafilter extending the cofinite filter.

    Equations
    Instances For
      @[instance_reducible]
      noncomputable instance Hyperreal.instField :
      Equations
      • One or more equations did not get rendered due to their size.
      @[instance_reducible]
      Equations
      • One or more equations did not get rendered due to their size.
      noncomputable def Hyperreal.ofReal :
      ℝ → ℝ*

      Natural embedding ℝ → ℝ*.

      Equations
      Instances For
        @[instance_reducible]
        noncomputable instance Hyperreal.instCoeTCReal :
        Equations
        @[simp]
        theorem Hyperreal.coe_eq_coe {x y : ℝ} :
        ↑x = ↑y ↔ x = y
        theorem Hyperreal.coe_ne_coe {x y : ℝ} :
        ↑x ≠ ↑y ↔ x ≠ y
        @[simp]
        theorem Hyperreal.coe_eq_zero {x : ℝ} :
        ↑x = 0 ↔ x = 0
        @[simp]
        theorem Hyperreal.coe_eq_one {x : ℝ} :
        ↑x = 1 ↔ x = 1
        theorem Hyperreal.coe_ne_zero {x : ℝ} :
        ↑x ≠ 0 ↔ x ≠ 0
        theorem Hyperreal.coe_ne_one {x : ℝ} :
        ↑x ≠ 1 ↔ x ≠ 1
        @[simp]
        theorem Hyperreal.coe_one :
        ↑1 = 1
        @[simp]
        theorem Hyperreal.coe_zero :
        ↑0 = 0
        @[simp]
        theorem Hyperreal.coe_inv (x : ℝ) :
        ↑x⁻¹ = (↑x)⁻¹
        @[simp]
        theorem Hyperreal.coe_neg (x : ℝ) :
        ↑(-x) = -↑x
        @[simp]
        theorem Hyperreal.coe_add (x y : ℝ) :
        ↑(x + y) = ↑x + ↑y
        @[simp]
        @[simp]
        theorem Hyperreal.coe_mul (x y : ℝ) :
        ↑(x * y) = ↑x * ↑y
        @[simp]
        theorem Hyperreal.coe_div (x y : ℝ) :
        ↑(x / y) = ↑x / ↑y
        @[simp]
        theorem Hyperreal.coe_sub (x y : ℝ) :
        ↑(x - y) = ↑x - ↑y
        @[simp]
        theorem Hyperreal.coe_le_coe {x y : ℝ} :
        ↑x ≤ ↑y ↔ x ≤ y
        @[simp]
        theorem Hyperreal.coe_lt_coe {x y : ℝ} :
        ↑x < ↑y ↔ x < y
        @[simp]
        theorem Hyperreal.coe_nonneg {x : ℝ} :
        0 ≤ ↑x ↔ 0 ≤ x
        @[simp]
        theorem Hyperreal.coe_pos {x : ℝ} :
        0 < ↑x ↔ 0 < x
        @[simp]
        theorem Hyperreal.coe_abs (x : ℝ) :
        ↑|x| = |↑x|
        @[simp]
        theorem Hyperreal.coe_max (x y : ℝ) :
        ↑(max x y) = max ↑x ↑y
        @[simp]
        theorem Hyperreal.coe_min (x y : ℝ) :
        ↑(min x y) = min ↑x ↑y
        noncomputable def Hyperreal.coeRingHom :

        The canonical map ℝ → ℝ* as an OrderRingHom.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[simp]
          @[simp]

          Basic constants #

          noncomputable def Hyperreal.ofSeq (f : ℕ → ℝ) :

          Construct a hyperreal number from a sequence of real numbers.

          Equations
          Instances For
            theorem Hyperreal.ofSeq_lt_ofSeq {f g : ℕ → ℝ} :
            ofSeq f < ofSeq g ↔ ∀ᶠ (n : ℕ) in ↑(Filter.hyperfilter ℕ), f n < g n

            ω #

            noncomputable def Hyperreal.omega :

            A sample infinite hyperreal ω = ⟦(0, 1, 2, 3, ⋯)⟧.

            Conventions for notations in identifiers:

            • The recommended spelling of ω in identifiers is omega.
            Equations
            Instances For

              A sample infinite hyperreal ω = ⟦(0, 1, 2, 3, ⋯)⟧.

              Conventions for notations in identifiers:

              • The recommended spelling of ω in identifiers is omega.
              Equations
              Instances For

                ε #

                noncomputable def Hyperreal.epsilon :

                A sample infinitesimal hyperreal ε = ⟦(0, 1, 1/2, 1/3, ⋯)⟧.

                Conventions for notations in identifiers:

                • The recommended spelling of ε in identifiers is epsilon.
                Equations
                Instances For

                  A sample infinitesimal hyperreal ε = ⟦(0, 1, 1/2, 1/3, ⋯)⟧.

                  Conventions for notations in identifiers:

                  • The recommended spelling of ε in identifiers is epsilon.
                  Equations
                  Instances For

                    Some facts about Tendsto #

                    theorem Hyperreal.stdPart_map {x : ℝ*} {r : ℝ} {f : ℝ → ℝ} (hf : ContinuousAt f r) (hxr : Filter.Germ.Tendsto x (nhds r)) :
                    theorem Hyperreal.stdPart_map₂ {x y : ℝ*} {r s : ℝ} {f : ℝ → ℝ → ℝ} (hxr : Filter.Germ.Tendsto x (nhds r)) (hys : Filter.Germ.Tendsto y (nhds s)) (hf : ContinuousAt (Function.uncurry f) (r, s)) :
                    (Filter.Germ.map₂ f x y).Tendsto (nhds (f r s))
                    theorem Hyperreal.tendsto_iff_forall {x : ℝ*} {r : ℝ} :
                    Filter.Germ.Tendsto x (nhds r) ↔ (∀ s < r, ↑s ≤ x) ∧ ∀ s > r, x ≤ ↑s
                    theorem Hyperreal.epsilon_lt_of_pos {r : ℝ} :
                    0 < r → epsilon < ↑r
                    theorem Hyperreal.epsilon_lt_of_neg {r : ℝ} :
                    r < 0 → ↑r < epsilon
                    @[deprecated Hyperreal.epsilon_lt_of_pos (since := "2026-01-05")]
                    theorem Hyperreal.epsilon_lt_pos {r : ℝ} :
                    0 < r → epsilon < ↑r

                    Alias of Hyperreal.epsilon_lt_of_pos.

                    @[deprecated Hyperreal.archimedeanClassMk_pos_of_tendsto (since := "2026-01-05")]
                    theorem Hyperreal.lt_of_tendsto_zero_of_pos {f : ℕ → ℝ} (hf : Filter.Tendsto f Filter.atTop (nhds 0)) {r : ℝ} :
                    0 < r → ofSeq f < ↑r
                    @[deprecated Hyperreal.archimedeanClassMk_pos_of_tendsto (since := "2026-01-05")]
                    theorem Hyperreal.neg_lt_of_tendsto_zero_of_pos {f : ℕ → ℝ} (hf : Filter.Tendsto f Filter.atTop (nhds 0)) {r : ℝ} :
                    0 < r → -↑r < ofSeq f
                    @[deprecated Hyperreal.archimedeanClassMk_pos_of_tendsto (since := "2026-01-05")]
                    theorem Hyperreal.gt_of_tendsto_zero_of_neg {f : ℕ → ℝ} (hf : Filter.Tendsto f Filter.atTop (nhds 0)) {r : ℝ} :
                    r < 0 → ↑r < ofSeq f
                    @[deprecated ArchimedeanClass.stdPart (since := "2026-01-05")]
                    def Hyperreal.IsSt (x : ℝ*) (r : ℝ) :

                    Standard part predicate. Do not use. This is equivalent to the conjunction of 0 ≤ ArchimedeanClass.mk x and ArchimedeanClass.stdPart x = r.

                    Equations
                    Instances For
                      @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                      @[deprecated ArchimedeanClass.stdPart (since := "2026-01-05")]
                      noncomputable def Hyperreal.st :
                      ℝ* → ℝ

                      Standard part function: like a "round" to ℝ instead of ℤ

                      Equations
                      Instances For
                        @[deprecated "`st` is deprecated" (since := "2026-01-05")]
                        @[deprecated ArchimedeanClass.mk (since := "2026-01-05")]

                        A hyperreal number is infinitesimal if its standard part is 0. Do not use. Write 0 < ArchimedeanClass.mk x instead.

                        Equations
                        Instances For
                          @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                          @[deprecated ArchimedeanClass.mk (since := "2026-01-05")]

                          A hyperreal number is positive infinite if it is larger than all real numbers. Do not use. Write 0 < x ∧ ArchimedeanClass.mk x < 0 instead.

                          Equations
                          Instances For
                            @[deprecated "`InfinitePos` is deprecated" (since := "2026-01-05")]
                            @[deprecated ArchimedeanClass.mk (since := "2026-01-05")]

                            A hyperreal number is negative infinite if it is smaller than all real numbers. Do not use. Write x < 0 ∧ ArchimedeanClass.mk x < 0 instead.

                            Equations
                            Instances For
                              @[deprecated "`InfiniteNeg` is deprecated" (since := "2026-01-05")]
                              @[deprecated ArchimedeanClass.mk (since := "2026-01-05")]

                              A hyperreal number is infinite if it is infinite positive or infinite negative. Do not use. Write ArchimedeanClass.mk x < 0 instead.

                              Equations
                              Instances For
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated Hyperreal.tendsto_iff_forall (since := "2026-01-05")]
                                @[deprecated Hyperreal.tendsto_iff_forall (since := "2026-01-05")]
                                @[deprecated Hyperreal.stdPart_of_tendsto (since := "2026-01-05")]
                                theorem Hyperreal.isSt_of_tendsto {f : ℕ → ℝ} {r : ℝ} (hf : Filter.Tendsto f Filter.atTop (nhds r)) :
                                (ofSeq f).IsSt r
                                @[deprecated "Use `stdPart_monotoneOn` and `MonotoneOn.reflect_lt`" (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.lt {x y : ℝ*} {r s : ℝ} (hxr : x.IsSt r) (hys : y.IsSt s) (hrs : r < s) :
                                x < y
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.unique {x : ℝ*} {r s : ℝ} (hr : x.IsSt r) (hs : x.IsSt s) :
                                r = s
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.st_eq {x : ℝ*} {r : ℝ} (hxr : x.IsSt r) :
                                x.st = r
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.not_infinite {x : ℝ*} {r : ℝ} (h : x.IsSt r) :
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.not_infinite_of_exists_st {x : ℝ*} :
                                (∃ (r : ℝ), x.IsSt r) → ¬x.Infinite
                                @[deprecated ArchimedeanClass.stdPart_eq_zero (since := "2026-01-05")]
                                theorem Hyperreal.Infinite.st_eq {x : ℝ*} (hi : x.Infinite) :
                                x.st = 0
                                @[deprecated ArchimedeanClass.stdPart_eq_sSup (since := "2026-01-05")]
                                theorem Hyperreal.isSt_sSup {x : ℝ*} (hni : ¬x.Infinite) :
                                x.IsSt (sSup {y : ℝ | ↑y < x})
                                @[deprecated ArchimedeanClass.stdPart_eq_sSup (since := "2026-01-05")]
                                theorem Hyperreal.exists_st_of_not_infinite {x : ℝ*} (hni : ¬x.Infinite) :
                                ∃ (r : ℝ), x.IsSt r
                                @[deprecated ArchimedeanClass.stdPart_eq_sSup (since := "2026-01-05")]
                                theorem Hyperreal.st_eq_sSup {x : ℝ*} :
                                x.st = sSup {y : ℝ | ↑y < x}
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.isSt_st {x : ℝ*} {r : ℝ} (hxr : x.IsSt r) :
                                x.IsSt x.st
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.isSt_st_of_exists_st {x : ℝ*} (hx : ∃ (r : ℝ), x.IsSt r) :
                                x.IsSt x.st
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.isSt_st' {x : ℝ*} (hx : ¬x.Infinite) :
                                x.IsSt x.st
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.isSt_st {x : ℝ*} (hx : x.st ≠ 0) :
                                x.IsSt x.st
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.isSt_refl_real (r : ℝ) :
                                (↑r).IsSt r
                                @[deprecated Hyperreal.stdPart_coe (since := "2026-01-05")]
                                theorem Hyperreal.st_id_real (r : ℝ) :
                                (↑r).st = r
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.eq_of_isSt_real {r s : ℝ} :
                                (↑r).IsSt s → r = s
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.isSt_real_iff_eq {r s : ℝ} :
                                (↑r).IsSt s ↔ r = s
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.isSt_symm_real {r s : ℝ} :
                                (↑r).IsSt s ↔ (↑s).IsSt r
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.isSt_trans_real {r s t : ℝ} :
                                (↑r).IsSt s → (↑s).IsSt t → (↑r).IsSt t
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.isSt_inj_real {r₁ r₂ s : ℝ} (h1 : (↑r₁).IsSt s) (h2 : (↑r₂).IsSt s) :
                                r₁ = r₂
                                @[deprecated "`IsSt` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.isSt_iff_abs_sub_lt_delta {x : ℝ*} {r : ℝ} :
                                x.IsSt r ↔ ∀ (δ : ℝ), 0 < δ → |x - ↑r| < ↑δ
                                @[deprecated Hyperreal.stdPart_map (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.map {x : ℝ*} {r : ℝ} (hxr : x.IsSt r) {f : ℝ → ℝ} (hf : ContinuousAt f r) :
                                IsSt (Filter.Germ.map f x) (f r)
                                @[deprecated Hyperreal.stdPart_map₂ (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.map₂ {x y : ℝ*} {r s : ℝ} (hxr : x.IsSt r) (hys : y.IsSt s) {f : ℝ → ℝ → ℝ} (hf : ContinuousAt (Function.uncurry f) (r, s)) :
                                IsSt (Filter.Germ.map₂ f x y) (f r s)
                                @[deprecated ArchimedeanClass.stdPart_add (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.add {x y : ℝ*} {r s : ℝ} (hxr : x.IsSt r) (hys : y.IsSt s) :
                                (x + y).IsSt (r + s)
                                @[deprecated ArchimedeanClass.stdPart_neg (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.neg {x : ℝ*} {r : ℝ} (hxr : x.IsSt r) :
                                (-x).IsSt (-r)
                                @[deprecated ArchimedeanClass.stdPart_sub (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.sub {x y : ℝ*} {r s : ℝ} (hxr : x.IsSt r) (hys : y.IsSt s) :
                                (x - y).IsSt (r - s)
                                @[deprecated ArchimedeanClass.stdPart_monotoneOn (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.le {x y : ℝ*} {r s : ℝ} (hrx : x.IsSt r) (hsy : y.IsSt s) (hxy : x ≤ y) :
                                r ≤ s
                                @[deprecated ArchimedeanClass.stdPart_monotoneOn (since := "2026-01-05")]
                                theorem Hyperreal.st_le_of_le {x y : ℝ*} (hix : ¬x.Infinite) (hiy : ¬y.Infinite) :
                                x ≤ y → x.st ≤ y.st
                                @[deprecated ArchimedeanClass.stdPart_monotoneOn (since := "2026-01-05")]
                                theorem Hyperreal.lt_of_st_lt {x y : ℝ*} (hix : ¬x.Infinite) (hiy : ¬y.Infinite) :
                                x.st < y.st → x < y
                                @[deprecated "`InfinitePos` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.infinitePos_def {x : ℝ*} :
                                x.InfinitePos ↔ ∀ (r : ℝ), ↑r < x
                                @[deprecated "`InfiniteNeg` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.infiniteNeg_def {x : ℝ*} :
                                x.InfiniteNeg ↔ ∀ (r : ℝ), x < ↑r
                                @[deprecated "`InfinitePos` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.InfinitePos.pos {x : ℝ*} (hip : x.InfinitePos) :
                                0 < x
                                @[deprecated "`InfiniteNeg` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.Infinite.ne_zero {x : ℝ*} (hI : x.Infinite) :
                                x ≠ 0
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.infinite_iff_abs_lt_abs {x : ℝ*} :
                                x.Infinite ↔ ∀ (r : ℝ), |↑r| < |x|
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` and `InfiniteNeg` are deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfinitePos` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`InfiniteNeg` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.not_infinite_add {x y : ℝ*} (hx : ¬x.Infinite) (hy : ¬y.Infinite) :
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.not_infinite_iff_exist_lt_gt {x : ℝ*} :
                                ¬x.Infinite ↔ ∃ (r : ℝ) (s : ℝ), ↑r < x ∧ x < ↑s
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.Infinite.ne_real {x : ℝ*} :
                                x.Infinite → ∀ (r : ℝ), x ≠ ↑r

                                Facts about st that require some infinite machinery #

                                @[deprecated ArchimedeanClass.stdPart_mul (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.mul {x y : ℝ*} {r s : ℝ} (hxr : x.IsSt r) (hys : y.IsSt s) :
                                (x * y).IsSt (r * s)
                                @[deprecated ArchimedeanClass.mk_mul (since := "2026-01-05")]
                                theorem Hyperreal.not_infinite_mul {x y : ℝ*} (hx : ¬x.Infinite) (hy : ¬y.Infinite) :
                                @[deprecated ArchimedeanClass.stdPart_add (since := "2026-01-05")]
                                theorem Hyperreal.st_add {x y : ℝ*} (hx : ¬x.Infinite) (hy : ¬y.Infinite) :
                                (x + y).st = x.st + y.st
                                @[deprecated ArchimedeanClass.stdPart_neg (since := "2026-01-05")]
                                theorem Hyperreal.st_neg (x : ℝ*) :
                                (-x).st = -x.st
                                @[deprecated ArchimedeanClass.stdPart_mul (since := "2026-01-05")]
                                theorem Hyperreal.st_mul {x y : ℝ*} (hx : ¬x.Infinite) (hy : ¬y.Infinite) :
                                (x * y).st = x.st * y.st

                                Basic lemmas about infinitesimal #

                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.infinitesimal_def {x : ℝ*} :
                                x.Infinitesimal ↔ ∀ (r : ℝ), 0 < r → -↑r < x ∧ x < ↑r
                                @[deprecated ArchimedeanClass.lt_of_pos_of_archimedean (since := "2026-01-05")]
                                theorem Hyperreal.lt_of_pos_of_infinitesimal {x : ℝ*} :
                                x.Infinitesimal → ∀ (r : ℝ), 0 < r → x < ↑r
                                @[deprecated ArchimedeanClass.lt_of_neg_of_archimedean (since := "2026-01-05")]
                                theorem Hyperreal.lt_neg_of_pos_of_infinitesimal {x : ℝ*} :
                                x.Infinitesimal → ∀ (r : ℝ), 0 < r → -↑r < x
                                @[deprecated ArchimedeanClass.lt_of_neg_of_archimedean (since := "2026-01-05")]
                                theorem Hyperreal.gt_of_neg_of_infinitesimal {x : ℝ*} (hi : x.Infinitesimal) (r : ℝ) (hr : r < 0) :
                                ↑r < x
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.abs_lt_real_iff_infinitesimal {x : ℝ*} :
                                x.Infinitesimal ↔ ∀ (r : ℝ), r ≠ 0 → |x| < |↑r|
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.Infinitesimal.eq_zero {r : ℝ} :
                                (↑r).Infinitesimal → r = 0
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.not_real_of_infinitesimal_ne_zero (x : ℝ*) :
                                x.Infinitesimal → x ≠ 0 → ∀ (r : ℝ), x ≠ ↑r
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.infinitesimal_sub {x : ℝ*} {r : ℝ} (hxr : x.IsSt r) :
                                (x - ↑r).Infinitesimal
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated ArchimedeanClass.stdPart_inv (since := "2026-01-05")]
                                theorem Hyperreal.IsSt.inv {x : ℝ*} {r : ℝ} (hi : ¬x.Infinitesimal) (hr : x.IsSt r) :
                                @[deprecated ArchimedeanClass.stdPart_inv (since := "2026-01-05")]
                                @[deprecated Hyperreal.archimedeanClassMk_omega_neg (since := "2026-01-05")]
                                @[deprecated Hyperreal.archimedeanClassMk_omega_neg (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinitesimal` is deprecated" (since := "2026-01-05")]
                                @[deprecated "`Infinite` is deprecated" (since := "2026-01-05")]
                                theorem Hyperreal.Infinite.mul {x y : ℝ*} :
                                x.Infinite → y.Infinite → (x * y).Infinite