Surreal numbers #
The basic theory of surreal numbers, built on top of the theory of combinatorial (pre-)games.
A pregame is numeric
if all the Left options are strictly smaller than all the Right options, and
all those options are themselves numeric. In terms of combinatorial games, the numeric games have
"frozen"; you can only make your position worse by playing, and Left is some definite "number" of
moves ahead (or behind) Right.
A surreal number is an equivalence class of numeric pregames.
In fact, the surreals form a complete ordered field, containing a copy of the reals (and much else besides!) but we do not yet have a complete development.
Order properties #
Surreal numbers inherit the relations ≤
and <
from games, and these relations satisfy the axioms
of a partial order (recall that x < y ↔ x ≤ y ∧ ¬ y ≤ x
did not hold for games).
Algebraic operations #
At this point, we have defined addition and negation (from pregames), and shown that surreals form an additive semigroup. It would be very little work to finish showing that the surreals form an ordered commutative group.
We define the operations of multiplication and inverse on surreals, but do not yet establish any of the necessary properties to show the surreals form an ordered field.
Embeddings #
It would be nice projects to define the group homomorphism surreal → game
, and also ℤ → surreal
,
and then the homomorphic inclusion of the dyadic rationals into surreals, and finally
via dyadic Dedekind cuts the homomorphic inclusion of the reals into the surreals.
One can also map all the ordinals into the surreals!
References #
Multiplicative operations can be defined at the level of pre-games, but as they are only useful on surreal numbers, we define them here.
The product of x = {xL | xR}
and y = {yL | yR}
is
{xL*y + x*yL - xL*yL, xR*y + x*yR - xR*yR | xL*y + x*yR - xL*yR, x*yL + xR*y - xR*yL }
.
Equations
- x.mul y = pgame.rec (λ (xl xr : Type u_1) (xL : xl → pgame) (xR : xr → pgame) (IHxl : Π (ᾰ : xl), (λ (x : pgame), pgame → pgame) (xL ᾰ)) (IHxr : Π (ᾰ : xr), (λ (x : pgame), pgame → pgame) (xR ᾰ)) (y : pgame), pgame.rec (λ (yl yr : Type u_2) (yL : yl → pgame) (yR : yr → pgame) (IHyl : Π (ᾰ : yl), (λ (y : pgame), pgame) (yL ᾰ)) (IHyr : Π (ᾰ : yr), (λ (y : pgame), pgame) (yR ᾰ)), pgame.mk (xl × yl ⊕ xr × yr) (xl × yr ⊕ xr × yl) (λ (ᾰ : xl × yl ⊕ xr × yr), ᾰ.cases_on (λ (ᾰ : xl × yl), ᾰ.cases_on (λ (i : xl) (j : yl), IHxl i (pgame.mk yl yr yL yR) + IHyl j - IHxl i (yL j))) (λ (ᾰ : xr × yr), ᾰ.cases_on (λ (i : xr) (j : yr), IHxr i (pgame.mk yl yr yL yR) + IHyr j - IHxr i (yR j)))) (λ (ᾰ : xl × yr ⊕ xr × yl), ᾰ.cases_on (λ (ᾰ : xl × yr), ᾰ.cases_on (λ (i : xl) (j : yr), IHxl i (pgame.mk yl yr yL yR) + IHyr j - IHxl i (yR j))) (λ (ᾰ : xr × yl), ᾰ.cases_on (λ (i : xr) (j : yl), IHxr i (pgame.mk yl yr yL yR) + IHyl j - IHxr i (yL j))))) y) x y
Equations
- pgame.has_mul = {mul := pgame.mul}
An explicit description of the moves for Left in x * y
.
Equations
- x.left_moves_mul y = x.cases_on (λ (x_α x_β : Type u_1) (x_ᾰ : x_α → pgame) (x_ᾰ_1 : x_β → pgame), y.cases_on (λ (y_α y_β : Type u_1) (y_ᾰ : y_α → pgame) (y_ᾰ_1 : y_β → pgame), equiv.refl ((pgame.mk x_α x_β x_ᾰ x_ᾰ_1) * pgame.mk y_α y_β y_ᾰ y_ᾰ_1).left_moves))
An explicit description of the moves for Right in x * y
.
Equations
- x.right_moves_mul y = x.cases_on (λ (x_α x_β : Type u_1) (x_ᾰ : x_α → pgame) (x_ᾰ_1 : x_β → pgame), y.cases_on (λ (y_α y_β : Type u_1) (y_ᾰ : y_α → pgame) (y_ᾰ_1 : y_β → pgame), equiv.refl ((pgame.mk x_α x_β x_ᾰ x_ᾰ_1) * pgame.mk y_α y_β y_ᾰ y_ᾰ_1).right_moves))
If a
has the same moves as x
, b
has the same moves as y
,
and c
has the same moves as z
, then a + b - c
has the same moves as x + y - z
.
This lemma is repeatedly used for simplifying multiplication of surreal numbers.
Equations
- pgame.add_sub_relabelling h₁ h₂ h₃ = (h₁.add_congr h₂).sub_congr h₃
If a
has the same moves as x
, b
has the same moves as y
,
and c
has the same moves as z
, then a + b - c
has the same moves as y + x - z
.
This lemma is repeatedly used for simplifying multiplication of surreal numbers.
Equations
- pgame.add_comm_sub_relabelling h₁ h₂ h₃ = ((a.add_comm_relabelling b).trans (h₂.add_congr h₁)).sub_congr h₃
x * y
has exactly the same moves as y * x
.
Equations
- x.mul_comm_relabelling y = pgame.rec (λ (xl xr : Type u) (xL : xl → pgame) (xR : xr → pgame) (IHxl : Π (ᾰ : xl), (λ (x : pgame), Π (y : pgame), (x * y).relabelling (y * x)) (xL ᾰ)) (IHxr : Π (ᾰ : xr), (λ (x : pgame), Π (y : pgame), (x * y).relabelling (y * x)) (xR ᾰ)) (y : pgame), pgame.rec (λ (yl yr : Type u) (yL : yl → pgame) (yR : yr → pgame) (IHyl : Π (ᾰ : yl), (λ (y : pgame), ((pgame.mk xl xr xL xR) * y).relabelling (y * pgame.mk xl xr xL xR)) (yL ᾰ)) (IHyr : Π (ᾰ : yr), (λ (y : pgame), ((pgame.mk xl xr xL xR) * y).relabelling (y * pgame.mk xl xr xL xR)) (yR ᾰ)), let x : pgame := pgame.mk xl xr xL xR, y : pgame := pgame.mk yl yr yL yR in pgame.relabelling.mk ((equiv.prod_comm xl yl).sum_congr (equiv.prod_comm xr yr)) ((((equiv.refl (x * y).right_moves).trans (equiv.sum_comm (xl × yr) (xr × yl))).trans ((equiv.prod_comm xr yl).sum_congr (equiv.prod_comm xl yr))).trans (equiv.refl (yl × xr ⊕ yr × xl))) (λ (i : ((pgame.mk xl xr xL xR) * pgame.mk yl yr yL yR).left_moves), sum.cases_on i (λ (i : xl × yl), i.cases_on (λ (i : xl) (j : yl), pgame.add_comm_sub_relabelling (IHxl i y) (IHyl j) (IHxl i (yL j)))) (λ (i : xr × yr), i.cases_on (λ (i : xr) (j : yr), pgame.add_comm_sub_relabelling (IHxr i y) (IHyr j) (IHxr i (yR j))))) (λ (j : ((pgame.mk yl yr yL yR) * pgame.mk xl xr xL xR).right_moves), sum.cases_on j (λ (j : yl × xr), j.cases_on (λ (i : yl) (j : xr), pgame.add_comm_sub_relabelling (IHxr j y) (IHyl i) (IHxr j (yL i)))) (λ (j : yr × xl), j.cases_on (λ (i : yr) (j : xl), pgame.add_comm_sub_relabelling (IHxl j y) (IHyr i) (IHxl j (yR i)))))) y) x y
x * 0
has exactly the same moves as 0
.
Equations
- (pgame.mk xl xr xL xR).mul_zero_relabelling = pgame.relabelling.mk {to_fun := λ (ᾰ : ((pgame.mk xl xr xL xR) * 0).left_moves), sum.cases_on ᾰ (λ (ᾰ : xl × pempty), ᾰ.cases_on (λ (ᾰ_fst : xl) (ᾰ_snd : pempty), pempty.cases_on (λ (ᾰ_snd : pempty), 0.left_moves) ᾰ_snd)) (λ (ᾰ : xr × pempty), ᾰ.cases_on (λ (ᾰ_fst : xr) (ᾰ_snd : pempty), pempty.cases_on (λ (ᾰ_snd : pempty), 0.left_moves) ᾰ_snd)), inv_fun := λ (ᾰ : 0.left_moves), pempty.cases_on (λ (ᾰ : 0.left_moves), ((pgame.mk xl xr xL xR) * 0).left_moves) ᾰ, left_inv := _, right_inv := _} {to_fun := λ (ᾰ : ((pgame.mk xl xr xL xR) * 0).right_moves), sum.cases_on ᾰ (λ (ᾰ : xl × pempty), ᾰ.cases_on (λ (ᾰ_fst : xl) (ᾰ_snd : pempty), pempty.cases_on (λ (ᾰ_snd : pempty), 0.right_moves) ᾰ_snd)) (λ (ᾰ : xr × pempty), ᾰ.cases_on (λ (ᾰ_fst : xr) (ᾰ_snd : pempty), pempty.cases_on (λ (ᾰ_snd : pempty), 0.right_moves) ᾰ_snd)), inv_fun := λ (ᾰ : 0.right_moves), pempty.cases_on (λ (ᾰ : 0.right_moves), ((pgame.mk xl xr xL xR) * 0).right_moves) ᾰ, left_inv := _, right_inv := _} (λ (i : ((pgame.mk xl xr xL xR) * 0).left_moves), sum.cases_on i (λ (i : xl × pempty), i.cases_on (λ (i_fst : xl) (i_snd : pempty), pempty.cases_on (λ (i_snd : pempty), (((pgame.mk xl xr xL xR) * 0).move_left (sum.inl (i_fst, i_snd))).relabelling (0.move_left (⇑{to_fun := λ (ᾰ : ((pgame.mk xl xr xL xR) * 0).left_moves), sum.cases_on ᾰ (λ (ᾰ : xl × pempty), ᾰ.cases_on (λ (ᾰ_fst : xl) (ᾰ_snd : pempty), pempty.cases_on (λ (ᾰ_snd : pempty), 0.left_moves) ᾰ_snd)) (λ (ᾰ : xr × pempty), ᾰ.cases_on (λ (ᾰ_fst : xr) (ᾰ_snd : pempty), pempty.cases_on (λ (ᾰ_snd : pempty), 0.left_moves) ᾰ_snd)), inv_fun := λ (ᾰ : 0.left_moves), pempty.cases_on (λ (ᾰ : 0.left_moves), ((pgame.mk xl xr xL xR) * 0).left_moves) ᾰ, left_inv := _, right_inv := _} (sum.inl (i_fst, i_snd))))) i_snd)) (λ (i : xr × pempty), i.cases_on (λ (i_fst : xr) (i_snd : pempty), pempty.cases_on (λ (i_snd : pempty), (((pgame.mk xl xr xL xR) * 0).move_left (sum.inr (i_fst, i_snd))).relabelling (0.move_left (⇑{to_fun := λ (ᾰ : ((pgame.mk xl xr xL xR) * 0).left_moves), sum.cases_on ᾰ (λ (ᾰ : xl × pempty), ᾰ.cases_on (λ (ᾰ_fst : xl) (ᾰ_snd : pempty), pempty.cases_on (λ (ᾰ_snd : pempty), 0.left_moves) ᾰ_snd)) (λ (ᾰ : xr × pempty), ᾰ.cases_on (λ (ᾰ_fst : xr) (ᾰ_snd : pempty), pempty.cases_on (λ (ᾰ_snd : pempty), 0.left_moves) ᾰ_snd)), inv_fun := λ (ᾰ : 0.left_moves), pempty.cases_on (λ (ᾰ : 0.left_moves), ((pgame.mk xl xr xL xR) * 0).left_moves) ᾰ, left_inv := _, right_inv := _} (sum.inr (i_fst, i_snd))))) i_snd))) (λ (j : 0.right_moves), pempty.cases_on (λ (j : 0.right_moves), (((pgame.mk xl xr xL xR) * 0).move_right (⇑({to_fun := λ (ᾰ : ((pgame.mk xl xr xL xR) * 0).right_moves), sum.cases_on ᾰ (λ (ᾰ : xl × pempty), ᾰ.cases_on (λ (ᾰ_fst : xl) (ᾰ_snd : pempty), pempty.cases_on (λ (ᾰ_snd : pempty), 0.right_moves) ᾰ_snd)) (λ (ᾰ : xr × pempty), ᾰ.cases_on (λ (ᾰ_fst : xr) (ᾰ_snd : pempty), pempty.cases_on (λ (ᾰ_snd : pempty), 0.right_moves) ᾰ_snd)), inv_fun := λ (ᾰ : 0.right_moves), pempty.cases_on (λ (ᾰ : 0.right_moves), ((pgame.mk xl xr xL xR) * 0).right_moves) ᾰ, left_inv := _, right_inv := _}.symm) j)).relabelling (0.move_right j)) j)
0 * x
has exactly the same moves as 0
.
Equations
- (pgame.mk xl xr xL xR).zero_mul_relabelling = pgame.relabelling.mk {to_fun := λ (ᾰ : (0 * pgame.mk xl xr xL xR).left_moves), sum.cases_on ᾰ (λ (ᾰ : pempty × xl), ᾰ.cases_on (λ (ᾰ_fst : pempty) (ᾰ_snd : xl), pempty.cases_on (λ (ᾰ_fst : pempty), 0.left_moves) ᾰ_fst)) (λ (ᾰ : pempty × xr), ᾰ.cases_on (λ (ᾰ_fst : pempty) (ᾰ_snd : xr), pempty.cases_on (λ (ᾰ_fst : pempty), 0.left_moves) ᾰ_fst)), inv_fun := λ (ᾰ : 0.left_moves), pempty.cases_on (λ (ᾰ : 0.left_moves), (0 * pgame.mk xl xr xL xR).left_moves) ᾰ, left_inv := _, right_inv := _} {to_fun := λ (ᾰ : (0 * pgame.mk xl xr xL xR).right_moves), sum.cases_on ᾰ (λ (ᾰ : pempty × xr), ᾰ.cases_on (λ (ᾰ_fst : pempty) (ᾰ_snd : xr), pempty.cases_on (λ (ᾰ_fst : pempty), 0.right_moves) ᾰ_fst)) (λ (ᾰ : pempty × xl), ᾰ.cases_on (λ (ᾰ_fst : pempty) (ᾰ_snd : xl), pempty.cases_on (λ (ᾰ_fst : pempty), 0.right_moves) ᾰ_fst)), inv_fun := λ (ᾰ : 0.right_moves), pempty.cases_on (λ (ᾰ : 0.right_moves), (0 * pgame.mk xl xr xL xR).right_moves) ᾰ, left_inv := _, right_inv := _} (λ (i : (0 * pgame.mk xl xr xL xR).left_moves), sum.cases_on i (λ (i : pempty × xl), i.cases_on (λ (i_fst : pempty) (i_snd : xl), pempty.cases_on (λ (i_fst : pempty), ((0 * pgame.mk xl xr xL xR).move_left (sum.inl (i_fst, i_snd))).relabelling (0.move_left (⇑{to_fun := λ (ᾰ : (0 * pgame.mk xl xr xL xR).left_moves), sum.cases_on ᾰ (λ (ᾰ : pempty × xl), ᾰ.cases_on (λ (ᾰ_fst : pempty) (ᾰ_snd : xl), pempty.cases_on (λ (ᾰ_fst : pempty), 0.left_moves) ᾰ_fst)) (λ (ᾰ : pempty × xr), ᾰ.cases_on (λ (ᾰ_fst : pempty) (ᾰ_snd : xr), pempty.cases_on (λ (ᾰ_fst : pempty), 0.left_moves) ᾰ_fst)), inv_fun := λ (ᾰ : 0.left_moves), pempty.cases_on (λ (ᾰ : 0.left_moves), (0 * pgame.mk xl xr xL xR).left_moves) ᾰ, left_inv := _, right_inv := _} (sum.inl (i_fst, i_snd))))) i_fst)) (λ (i : pempty × xr), i.cases_on (λ (i_fst : pempty) (i_snd : xr), pempty.cases_on (λ (i_fst : pempty), ((0 * pgame.mk xl xr xL xR).move_left (sum.inr (i_fst, i_snd))).relabelling (0.move_left (⇑{to_fun := λ (ᾰ : (0 * pgame.mk xl xr xL xR).left_moves), sum.cases_on ᾰ (λ (ᾰ : pempty × xl), ᾰ.cases_on (λ (ᾰ_fst : pempty) (ᾰ_snd : xl), pempty.cases_on (λ (ᾰ_fst : pempty), 0.left_moves) ᾰ_fst)) (λ (ᾰ : pempty × xr), ᾰ.cases_on (λ (ᾰ_fst : pempty) (ᾰ_snd : xr), pempty.cases_on (λ (ᾰ_fst : pempty), 0.left_moves) ᾰ_fst)), inv_fun := λ (ᾰ : 0.left_moves), pempty.cases_on (λ (ᾰ : 0.left_moves), (0 * pgame.mk xl xr xL xR).left_moves) ᾰ, left_inv := _, right_inv := _} (sum.inr (i_fst, i_snd))))) i_fst))) (λ (j : 0.right_moves), pempty.cases_on (λ (j : 0.right_moves), ((0 * pgame.mk xl xr xL xR).move_right (⇑({to_fun := λ (ᾰ : (0 * pgame.mk xl xr xL xR).right_moves), sum.cases_on ᾰ (λ (ᾰ : pempty × xr), ᾰ.cases_on (λ (ᾰ_fst : pempty) (ᾰ_snd : xr), pempty.cases_on (λ (ᾰ_fst : pempty), 0.right_moves) ᾰ_fst)) (λ (ᾰ : pempty × xl), ᾰ.cases_on (λ (ᾰ_fst : pempty) (ᾰ_snd : xl), pempty.cases_on (λ (ᾰ_fst : pempty), 0.right_moves) ᾰ_fst)), inv_fun := λ (ᾰ : 0.right_moves), pempty.cases_on (λ (ᾰ : 0.right_moves), (0 * pgame.mk xl xr xL xR).right_moves) ᾰ, left_inv := _, right_inv := _}.symm) j)).relabelling (0.move_right j)) j)
- zero : Π (l r : Type u), pgame.inv_ty l r ff
- left₁ : Π (l r : Type u), r → pgame.inv_ty l r ff → pgame.inv_ty l r ff
- left₂ : Π (l r : Type u), l → pgame.inv_ty l r tt → pgame.inv_ty l r ff
- right₁ : Π (l r : Type u), l → pgame.inv_ty l r ff → pgame.inv_ty l r tt
- right₂ : Π (l r : Type u), r → pgame.inv_ty l r tt → pgame.inv_ty l r tt
Because the two halves of the definition of inv
produce more elements
of each side, we have to define the two families inductively.
This is the indexing set for the function, and inv_val
is the function part.
Because the two halves of the definition of inv
produce more elements
of each side, we have to define the two families inductively.
This is the function part, defined by recursion on inv_ty
.
Equations
- pgame.inv_val L R IHl IHr (pgame.inv_ty.right₂ i j) = (1 + (R i - pgame.mk l r L R) * pgame.inv_val L R IHl IHr j) * IHr i
- pgame.inv_val L R IHl IHr (pgame.inv_ty.right₁ i j) = (1 + (L i - pgame.mk l r L R) * pgame.inv_val L R IHl IHr j) * IHl i
- pgame.inv_val L R IHl IHr (pgame.inv_ty.left₂ i j) = (1 + (L i - pgame.mk l r L R) * pgame.inv_val L R IHl IHr j) * IHl i
- pgame.inv_val L R IHl IHr (pgame.inv_ty.left₁ i j) = (1 + (R i - pgame.mk l r L R) * pgame.inv_val L R IHl IHr j) * IHr i
- pgame.inv_val L R IHl IHr pgame.inv_ty.zero = 0
The inverse of a positive surreal number x = {L | R}
is
given by x⁻¹ = {0, (1 + (R - x) * x⁻¹L) * R, (1 + (L - x) * x⁻¹R) * L | (1 + (L - x) * x⁻¹L) * L, (1 + (R - x) * x⁻¹R) * R}
.
Because the two halves x⁻¹L, x⁻¹R
of x⁻¹
are used in their own
definition, the sets and elements are inductively generated.
Equations
- (pgame.mk l r L R).inv' = let l' : Type u_1 := {i // 0 < L i}, L' : l' → pgame := λ (i : l'), L i.val, IHl' : l' → pgame := λ (i : l'), (L i.val).inv', IHr : r → pgame := λ (i : r), (R i).inv' in pgame.mk (pgame.inv_ty l' r ff) (pgame.inv_ty l' r tt) (pgame.inv_val L' R IHl' IHr) (pgame.inv_val L' R IHl' IHr)
Equations
- pgame.has_inv = {inv := pgame.inv}
A pre-game is numeric if everything in the L set is less than everything in the R set, and all the elements of L and R are also numeric.
Pre-games defined by natural numbers are numeric.
The equivalence on numeric pre-games.
Equations
- surreal.equiv x y = x.val.equiv y.val
Construct a surreal number from a numeric pre-game.
Equations
- surreal.mk x h = ⟦⟨x, h⟩⟧
Equations
- surreal.has_zero = {zero := ⟦⟨0, pgame.numeric_zero⟩⟧}
Equations
- surreal.has_one = {one := ⟦⟨1, pgame.numeric_one⟩⟧}
Equations
- surreal.inhabited = {default := 0}
Lift an equivalence-respecting function on pre-games to surreals.
Equations
- surreal.lift f H = quotient.lift (λ (x : {x // x.numeric}), f x.val _) _
Lift a binary equivalence-respecting function on pre-games to surreals.
Equations
- surreal.lift₂ f H = surreal.lift (λ (x : pgame) (ox : x.numeric), surreal.lift (λ (y : pgame) (oy : y.numeric), f x y ox oy) _) _
The relation x ≤ y
on surreals.
Equations
- surreal.le = surreal.lift₂ (λ (x y : pgame) (_x : x.numeric) (_x : y.numeric), x ≤ y) surreal.le._proof_1
The relation x < y
on surreals.
Equations
- surreal.lt = surreal.lift₂ (λ (x y : pgame) (_x : x.numeric) (_x : y.numeric), x < y) surreal.lt._proof_1
Addition on surreals is inherited from pre-game addition:
the sum of x = {xL | xR}
and y = {yL | yR}
is {xL + y, x + yL | xR + y, x + yR}
.
Equations
- surreal.add = surreal.lift₂ (λ (x y : pgame) (ox : x.numeric) (oy : y.numeric), ⟦⟨x + y, _⟩⟧) surreal.add._proof_1
Negation for surreal numbers is inherited from pre-game negation:
the negation of {L | R}
is {-R | -L}
.
Equations
- surreal.neg = surreal.lift (λ (x : pgame) (ox : x.numeric), ⟦⟨-x, _⟩⟧) surreal.neg._proof_1
Equations
- surreal.has_le = {le := surreal.le}
Equations
- surreal.has_lt = {lt := surreal.lt}
Equations
Equations
Equations
- surreal.ordered_add_comm_group = {add := has_add.add surreal.has_add, add_assoc := surreal.ordered_add_comm_group._proof_1, zero := 0, zero_add := surreal.ordered_add_comm_group._proof_2, add_zero := surreal.ordered_add_comm_group._proof_3, nsmul := add_comm_group.nsmul._default 0 has_add.add surreal.ordered_add_comm_group._proof_4 surreal.ordered_add_comm_group._proof_5, nsmul_zero' := surreal.ordered_add_comm_group._proof_6, nsmul_succ' := surreal.ordered_add_comm_group._proof_7, neg := has_neg.neg surreal.has_neg, sub := add_comm_group.sub._default has_add.add surreal.ordered_add_comm_group._proof_8 0 surreal.ordered_add_comm_group._proof_9 surreal.ordered_add_comm_group._proof_10 (add_comm_group.nsmul._default 0 has_add.add surreal.ordered_add_comm_group._proof_4 surreal.ordered_add_comm_group._proof_5) surreal.ordered_add_comm_group._proof_11 surreal.ordered_add_comm_group._proof_12 has_neg.neg, sub_eq_add_neg := surreal.ordered_add_comm_group._proof_13, gsmul := add_comm_group.gsmul._default has_add.add surreal.ordered_add_comm_group._proof_14 0 surreal.ordered_add_comm_group._proof_15 surreal.ordered_add_comm_group._proof_16 (add_comm_group.nsmul._default 0 has_add.add surreal.ordered_add_comm_group._proof_4 surreal.ordered_add_comm_group._proof_5) surreal.ordered_add_comm_group._proof_17 surreal.ordered_add_comm_group._proof_18 has_neg.neg, gsmul_zero' := surreal.ordered_add_comm_group._proof_19, gsmul_succ' := surreal.ordered_add_comm_group._proof_20, gsmul_neg' := surreal.ordered_add_comm_group._proof_21, add_left_neg := surreal.ordered_add_comm_group._proof_22, add_comm := surreal.ordered_add_comm_group._proof_23, le := has_le.le surreal.has_le, lt := has_lt.lt surreal.has_lt, le_refl := surreal.ordered_add_comm_group._proof_24, le_trans := surreal.ordered_add_comm_group._proof_25, lt_iff_le_not_le := surreal.ordered_add_comm_group._proof_26, le_antisymm := surreal.ordered_add_comm_group._proof_27, add_le_add_left := surreal.ordered_add_comm_group._proof_28}
Equations
- surreal.linear_ordered_add_comm_group = {add := ordered_add_comm_group.add surreal.ordered_add_comm_group, add_assoc := _, zero := ordered_add_comm_group.zero surreal.ordered_add_comm_group, zero_add := _, add_zero := _, nsmul := ordered_add_comm_group.nsmul surreal.ordered_add_comm_group, nsmul_zero' := _, nsmul_succ' := _, neg := ordered_add_comm_group.neg surreal.ordered_add_comm_group, sub := ordered_add_comm_group.sub surreal.ordered_add_comm_group, sub_eq_add_neg := _, gsmul := ordered_add_comm_group.gsmul surreal.ordered_add_comm_group, gsmul_zero' := _, gsmul_succ' := _, gsmul_neg' := _, add_left_neg := _, add_comm := _, le := ordered_add_comm_group.le surreal.ordered_add_comm_group, lt := ordered_add_comm_group.lt surreal.ordered_add_comm_group, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_total := surreal.linear_ordered_add_comm_group._proof_1, decidable_le := classical.dec_rel has_le.le, decidable_eq := linear_order.decidable_eq._default ordered_add_comm_group.le ordered_add_comm_group.lt ordered_add_comm_group.le_refl ordered_add_comm_group.le_trans ordered_add_comm_group.lt_iff_le_not_le ordered_add_comm_group.le_antisymm (classical.dec_rel has_le.le), decidable_lt := linear_order.decidable_lt._default ordered_add_comm_group.le ordered_add_comm_group.lt ordered_add_comm_group.le_refl ordered_add_comm_group.le_trans ordered_add_comm_group.lt_iff_le_not_le ordered_add_comm_group.le_antisymm (classical.dec_rel has_le.le), add_le_add_left := _}