The largest known prime number was found on 12 Oct 2024 and is \(2^{136,279,841}−1\). It has the catchy name M136279841. You can download its digits in a zip file from a link in this press release.
I felt compelled to have a look at M136279841; however, it has 41,024,320 digits. So, I made do with looking at its first and last three digits (881, 551) and a plot of how frequent each digit is, using R. Code here.
There’s no evidence that any digit is more frequent than another, \(\chi^2(9) = 5.3\), \(p = .8\).
Abstract: Until 1973 there was no database of integer sequences. Someone coming across the sequence 1, 2, 4, 9, 21, 51, 127, . . . would have had no way of discovering that it had been studied since 1870 (today these are called the Motzkin numbers, and form entry A001006 in the database). Everything changed in 1973 with the publication of A Handbook of Integer Sequences, which listed 2372 entries. This report describes the fifty-year evolution of the database from the Handbook to its present form as The On-Line Encyclopedia of Integer Sequences (or OEIS), which contains 360,000 entries, receives a million visits a day, and has been cited 10,000 times, often with a comment saying “discovered thanks to the OEIS”.
I’m proud to have a couple of sequences in OEIS:
A140961 (2008, with thanks to Vladeta Jovovic, whom I found via A051588, for the interpretation in terms of binary matrices). This arose when I was counting finite models of categorical syllogisms, thinking this might be useful for the psychology of reasoning. It wasn’t.
A358693 (1 Jan 2023) – whilst looking for properties of the number 2023. Trivial extension of A001102.
This is sequence A001102 in the On-Line Encyclopedia of Integer Sequences (OEIS). The last year that satisfied this property was 1815; however, OEIS doesn’t say when it next applies. Let’s find out.
First we need to spell out the property so that it’s easier to automate a search.
Let \(d_x(i)\) denote the \(i\)th digit of \(x\) in base 10,
The property holds of \(k \in \mathbb{N}\) iff there is an \(m \in \mathbb{N}\) such that \(j(k) = m^2\), or, equivalently, if \(\lfloor \sqrt{j(k)} \rfloor^2=j(k)\).
This is enough to code up the search in R. Here are the next few years when the property applies: 2023, 2025, 2028, 2178, 2304, 2312, 2352, 2400.
Please note, I’m not a numerologist, so I don’t know if this is a good thing; however, Happy New Year nonetheless 😉
This post brings together visualisations and sums that I found really helpful for getting to grips with the Bloch sphere representation of qubit states.
Recap
The state of a qubit is represented by the linear combination
The modulus of both amplitudes is \(\sqrt{(\frac{1}{2})^2 + (\frac{1}{2})^2} = \sqrt{\frac{1}{2}}\). So the probability of obtaining either a 0 or a 1 is again \(\frac{1}{2}\).□
Bloch sphere
The state of a qubit can be represented as a point on the surface of sphere, known as the Bloch sphere. To make sense of this representation, let’s look at a couple of animations, GIFed from the QuVis visualisation project at the University of St Andrews.
Firstly, consider the following circle sliding down and up the sphere (you could think of this as travelling along the sphere’s latitudes):
The first thing to note is that the north (top) and south (bottom) pole of the sphere are where the pure \(|0\rangle\) and \(|1\rangle\) states live, respectively.
The location of the circle determines the probability of a particular measurement outcome. If the circle is at the north pole, then the probability of measuring a 0 is 1. If it’s at the south pole, then the probability of measuring a 1 is 1. At the equator, there’s a 50-50 chance of a 0 or a 1. All points on the circle at any given latitude represent states with the same measurement probabilities. Each latitude circle denotes what is called a magnitude.
Now let’s stop in the middle latitude. We can also rotate around the sphere (think of this as travelling along different longitudes):
These circles represent different relative phases of the state. Phases cannot be directly detected by measurement using the classical computational basis; however, there are methods to see what the phase is and phases are important in quantum algorithms.
Here’s a still of the sphere:
The angle \(\theta\) indexes the longitudes (moving north or south) and \(\phi\) indexes the longitudes (sweeping east or west).
The state of a qubit can be written in terms of these two parameters as follows:
The full sweep from north pole to south pole is \(180^{\circ}\) or \(\pi\) radians. Let’s try north pole (\(\theta = 0\)), equator (\(\theta = \frac{\pi}{2}\)), and south pole (\(\theta = \pi\)).
Now what effect does the phase have? Fix \(\theta = \frac{\pi}{2}\), so the measurement probabilities are constant. A \(360^{\circ}\) turn is equal to \(2\pi\) radians. We shall try \(\phi = 0, \frac{\pi}{2}, \pi, \frac{3\pi}{2}\). This time I’m using Grokking the Bloch Sphere to visualise.
Suppose you have a coin that you suspect might be biased. Here’s how you can debias it so that there’s a 50-50 chance of heads or tails, thanks to a neat idea often attributed to John von Neumann (1951/1963, p. 768):
“… in tossing a coin it is probably easier to make two consecutive tosses independent than to toss heads with probability exactly one-half. If independence of successive tosses is assumed, we can reconstruct a 50-50 chance out of even a badly biased coin by tossing twice. If we get heads-heads or tails-tails, we reject the tosses and try again. If we get heads-tails (or tails-heads), we accept the result as heads (or tails). The resulting process is rigorously unbiased, although the amended process is at most 25 percent as efficient as ordinary coin-tossing.”
Why does this work? First, the probability of heads followed by tails (\(HT\)) is the following product, since coin flips are independent:
\(P(HT) = P(H) [1-P(H)]\)
We get the same answer for tails followed by heads (\(TH\)):
\(P(TH) = [1-P(H)] P(H) = P(H) [1-P(H)]\)
So, \(P(HT) = P(TH)\), which already hints at why this works.
For example, if a coin is so ridiculously biased that it only has a 10% chance of a heads outcome, then
We really want a debiased coin to have a 50-50 chance of a heads or tails outcome. That’s where ignoring \(HH\) and \(TT\) outcomes helps: we condition on \(HT\) or \(TH\).
One way to solve a problem of size \(n\) is to pretend you can solve it for problems of size \(n-1\), and then use that imaginary solution to solve it for \(n\). If you can also solve the smallest instance of the problem, then what you pretended eventually becomes real. This approach is called recursion. Here’s an example of how it works: enumerating all the ways to rearrange the elements of a list.
Given a list with \(n\) elements, \(\langle x_1, x_2, x_3, \ldots, x_n \rangle\), where the order of the elements matters, there are
(“\(n\) factorial”) different ways to rearrange them (permutations). We can also write this out more formally as follows:
\(0! = 1\);
\(n! = n \times (n-1)!\), for \(n > 0\).
For example, consider the list \(\langle 1, 2,3 \rangle\), which I’ll just write 123 to save keystrokes. There are 3 elements and \(n! = 3 \times 2 \times 1 = 6\) permutations:
123
213
231
132
312
321
Using the more formal definition, the arithmetic goes:
To see how to enumerate all these, first start with the simplest list, \(\langle \ \rangle\). This is the empty list, the zero of the list world. There is exactly one way to arrange emptiness (\(0! = 1\)):
\(\langle \ \rangle\)
That’s the problem solved for one list. There are infinitely many more, so we have a bit of work to do.
Now let’s return to the list 123, a list of length 3. Suppose (i.e., pretend) we knew all the permutations of 23 (a list of length 2). How could we use those to work out the permutations of 123.
It’s easy to see that there are two permutations of 23:
23
32
We go from those solutions to the solution for 123 by inserting 1 in all positions (beginning, middle, and end) of 23 and 32 in the following way:
123
213
231
132
312
321
I cheated a bit here, though. We haven’t developed a way to enumerate the permutations of 23. Although it’s really easy, in a moment I want to write an R program to enumerate permutations of any list and R will need more explicit instructions.
Let’s go back a step and suppose we don’t know the permutations of 23 and want to enumerate them. Assume we know what the permutations are of a list with a single item, 3.
Now go back yet another step. How do we get the permutations of 3, assuming we know what they are for the next smallest list, the empty list, \(\langle \ \rangle\)?
We finally have an answer. As we saw above, there is one way to arrange emptiness: \(\langle \ \rangle\).
Following the same logic that allowed us to go from permutations of 23 to permutations of 123, we can go from from permutations of \(\langle \ \rangle\) to permutations of 3. We just have to insert 3 in all positions of the empty list. There is only one place to put it, giving a list with a single element, 3.
Now how do we go from the permutations of 3 to the permutations of 23? Simply place 2 in all positions of the one item list 3:
23
32
And so now our imagined solution actually exists.
We needed two steps:
The base step, which solved the problem for the simplest list, the empty list \(\langle \ \rangle\).
The inductive step, which uses permutations of the list of length \(n-1\), \(\langle x_2, x_3, \ldots, x_n \rangle\) and inserts \(x_1\) in all positions of those permutations to give us the permutations of a list of length \(n\), \(\langle x_1, x_2, x_3, \ldots, x_n \rangle\).
R
This translates straightforwardly to R as follows.
First, a function to insert an element \(x\) into all positions of a vector \(\mathit{xs}\):
insert_all <- function(x, xs) {
res <- list()
for (i in 0:length(xs))
res <- append(res, list(append(xs, x, i)))
res
}
Now the actual permutation function, which takes a vector \(\mathit{xs}\) and returns a list of all its permutations:
perms <- function(xs) {
res <- list()
if (length(xs) == 0)
res <- list(c())
else {
ys <- perms(tail(xs, length(xs) - 1))
for (y in ys)
res <- append(res, insert_all(xs[1], y))
}
res
}
Note how perms is defined in terms of itself. The line
perms(tail(xs, length(xs) - 1))
removes the first element of the list and calls itself again. It keeps doing this until it is called with an empty vector, when it returns a list with an empty vector,
list(c())
Then insert_all pieces everything together.
Let’s give perms a go with the list 1234. There should be \(4! = 24\) permutations:
Understanding how to enumerate permutations also shows us how to count them. In other words, it shows us how to define factorial.
Pretend we don’t know what factorial is. We’re making a new one called “factorial?” (pronounce with rising intonation), such that \(n?\) is the number of permutations of a list of length \(n\). We hope that by the end of process, \(n? = n!\).
Recall again that there’s only one way to arrange emptiness, so
\(0? = 1\).
Suppose we know how to count the number of permutations of a list of length \(n-1\), that is, we know what \((n-1)?\) is. How would we use the answer to that to tell us what \(n?\) is?
If we know \((n-1)?\), that means we know the number of permutations of lists of length \(n-1\).
The length of each list counted by \((n-1)?\) must be \(n-1\). We saw when enumerating permutations that we have to add an extra element to all positions of each element in those lists. That’s \(n\) positions to add the extra element to, and we need to do it \((n-1)?\) times, so we just multiply:
\(n? = n \times (n-1)?\), for \(n > 0\).
It turns out that indeed \(n? = n!\), as defined at the top of this post.
By the end of this post you will understand how to list all (yes, all!) integers and rational numbers and why you can’t list the reals. You will also learn why this weird sequence of numbers is useful:
There’s an easy way to list all the natural numbers without leaving any gaps. Start with 0, then add 1 to the previous number:
\(0, 1, 2, 3, 4, 5, \ldots\)
You will never reach the end, but wherever you stop, you can be confident that you have all the naturals up to that point.
For integers, list the naturals, then for each natural, \(n\), add \(-n\) as follows:
\(0, 1, -1, 2, -2, 3, -3, 4, -4, 5, -5, \ldots\)
This, by the way, is sequence A001057 in the On-line Encyclopedia of Integer Sequences.
The reals
We can’t list the real numbers, as Cantor showed in 1891.
To see why, let’s explore the reals from 0 to strictly less than 1, or \([0,1)\) for short.
Suppose, for the sake of argument, that we could list them all. This means there will be a first number, a second, a third, and so on. So let’s number them and write some arbitrarily chosen examples to get a sense of how the list might look. I’ve put the ith digit in bold for reasons that will soon be apparent.
i
Decimal expansion
1
0.00013…
2
0.01202…
3
0.00310…
4
0.12772…
…
Here’s Cantor’s trick. Work down the infinite list of numbers to create a new number in the following way.
From the the 1st number take the 1st digit after the decimal point and subtract it from 9: \(9 – 0 = 9\).
From the the 2nd number take the 2nd digit after the decimal point and subtract it from 9: \(9 – 1 = 8\).
From the the 3rd number take the 3rd digit after the decimal point and subtract it from 9: \(9 – 3 = 6\).
From the the 4th number take the 4th digit after the decimal point and subtract it from 9: \(9 – 7 = 2\).
More generally, from the ith number take the ith digit after the decimal point and subtract it from 9.
Now use these subtractions to generate a new number. So for the example above, we just subtract 9 from the numbers in bold to make:
0.9862…
Our assumption was that we had listed all the real numbers in \([0,1)\). But here we have created a new number that differs from each one in that list by at least one digit. Our assumption that we could list all the numbers in \([0,1)\) has led to the conclusion that we can’t: a contradiction. If we can’t do it for \([0,1)\) then surely we can’t list all the reals.
Although there are infinitely many integers, we can list them. The number of real numbers is too big an infinity to list!
The rationals: Cantor’s zigzag
We can, however, list the rational numbers in a way that’s guaranteed not to leave any out. Here are two ways to do it. I’ll focus on the non-negative rationals from which it is easy to get the negatives.
The first is due to Cantor, let’s call it the zigzag, and is easiest to show in a picture than to explain. The diagram below puts denominators on the columns and numerators on the rows. Start with \(1/1\) and follow the arrows:
Beautiful, isn’t it? This zigzag solves the problem that if we go down the first column, say,
\(1/1, 1/2, 1/3, 1/4, \ldots\),
we head off to infinity without ever moving to the second column, so, for example, we would miss out \(2/5\) and \(3/4\).
I think about this in terms of compass directions. Begin by adding \(1/1\) to your list of rationals and heading east. Let’s call the numerator \(p\) and denominator \(q\), so we are enumerating \(p/q\). Here’s what happens at each step:
If we are heading east then set \(p \leftarrow p + 1\) and add \(p/q\) to our list of rationals. Head southwest on the next step.
If we are heading southwest, then set
\(p \leftarrow p – 1\)
\(q \leftarrow q + 1\)
Add \(p/q\) to our list of rationals.
If \(p = 1\), i.e., we have hit the leftmost column, then head south on the next step.
If we are heading south then set \(q \leftarrow q + 1\) and add \(p/q\) to our list of rationals. Head northeast on the next step.
If we are heading northeast, then set
\(p \leftarrow p + 1\)
\(q \leftarrow q – 1\)
Add \(p/q\) to our list of rationals.
If \(q = 1\), i.e., we have hit the top row, then head east on the next step.
All I have done above is spell out the zigzag pattern. You will see that if we are heading east or south, then we just take one step then change direction. Whereas if we are heading southwest or northeast then we keep going until we hit the edge.
The sequences of numerators and denominators are A092543 and A092542, respectively. It’s interesting looking at the numbers and trying to forget that you know how they were generated. Like, what on earth is going on with
It makes sense when you look at the numerators in the zigzag diagram. (I bet this sequence is used in an IQ test or job selection exam somewhere, so basically it just asks if you’re aware how to enumerate the rationals.)
The zigzag is great because it’s easy to see that it works. However, it has two problems: (1) we get the same numbers multiple times, e.g., \(1/2\) and \(2/4\) are there and (2) related to this, the fractions aren’t always in their simplest forms, i.e., the numerators and denominators will often have common factors over 1 (again \(2/4\) is an example – top and bottom can be divided by 2).
The rationals: Stern-Brocot’s sandwich
Enter the Stern-Brocot tree. Stern, a mathematician, discovered the approach in 1858 and Brocot, a clockmaker, discovered it independently in 1861 in the process of devising systems of gears. Hayes (2000) delves into the history.
I’m doing to ignore the tree aspect of Stern-Brocot’s approach because I don’t think it helps understand how it works. Instead, let’s consider a multilayer Stern-Brocot sandwich (not on Google when I searched, incidentally) as follows.
Begin with the two fractions \(0/1\) and \(1/0\). The first is zero, the second is weird – we usually aren’t allowed to divide by zero. But you could think of it as an infinitely large number. (Hayes quotes an anonymous source who says that it is “infinity reduced to lowest terms”.)
Now we fill the sandwich by taking the mediant of these two fractions. This is defined:
In other words, simply sum the numerators and sum the denominators of the left and right fractions to get, respectively, the numerator and denominator of the mediant.
Okay, here we go. Start with our sandwich bread(?):
Lovely! You get \(2^s + 1\) rationals on each step, \(s\), e.g., the last step above is step three and has \(2^3 + 1 = 9\) numbers. Follow the steps 10 times and you get 1,205 rationals.
It can be proved this works: all non-negative rationals are enumerated in the correct order and in simplest forms. I shall delegate the proofs to a Google search…
By the way, one reason we can list the rationals at all is because there’s the same number of them as natural numbers.
The surreal numbers (No) were developed (or discovered, depending on what you think mathematics is) by John “Don’t mention Game of Life” Conway. He first introduced them in lectures in the 1970s (see Conway, 2001). The name, surreal numbers, was coined by Donald Knuth (1974) in the first book on the surreals, an undergrad maths text thinly disguised as a novelette (hear Knuth talk about the book).
I’ve been fiddling with the dyadic rational part of the surreals in the eves for the past couple of weeks in R and am now beginning to wrap my head around \(\omega\) and beyond. These notes explain where I’ve got to. You can check out the R over here, which currently gets as far as addition and a few other useful functions.
Familiar friends
All the kinds of numbers we are already familiar with are special cases of surreal:
Natural numbers (\(\mathbb{N}\)) are in there:
0, 1, 2, 3, 4, …
As are the integers (\(\mathbb{Z}\)), the natural numbers and their negation:
…, -4, -3, -2, -1, 0, 1, 2, 3, 4, …
Rational numbers (\(\mathbb{Q}\)): the numbers that can be expressed as a fraction of two integers, \(p/q\), where \(q \ne 0\). We get the integers by setting \(q = 1\).
The real numbers (\(\mathbb{R}\)): everything above, plus irrational numbers, such as \(\pi\) and \(\sqrt{2}\), that lie between rationals.
So, next time you calculate \(2 + 2\) or \(\pi r^2\) you could say you are doing surreal arithmetic.
But there’s much more in the surreals: infinitely big numbers, bigger than any real number, and infinitesimally small numbers, smaller than any positive real but yet bigger than zero. An amazing feature of the surreals is that all the above, from naturals to these huge and miniscule numbers, can be defined in a concise way.
Defining the surreals
This is how to define them:
If
(a) \(L\) and \(R\) are two sets of surreal numbers and
(b) there is no \(l \in L, r \in R\) such that \(l \ge r\),
then \((L|R)\) is a surreal number.
The notation \(x \in A\) means that \(x\) is a member of set \(A\). For instance, \(42 \in \{ 7, 27, 42 \}\).
This definition is recursive, i.e., defined in terms of itself. A surreal, \((L|R)\), is an ordered pair of sets of surreals, \(L\) and \(R\), left and right. It works because as you follow the \(L\) and \(R\) threads, you eventually reach an empty set and can stop, as we shall see.
I’m using a blend of the notation by Conway (2001) and Knuth (1974). To make it easier refer to the left and right parts of a surreal, \(x= ( L | R )\) can be written \(( x_L | y_R )\). Note that \(L\) or \(R\) can be infinitely big sets. That turns out to be how interesting surreals are built.
Something to ponder: to define the surreals in this way, we already needed some notion of set theory that allows infinitely big sets and ordered pairs. To what extent is the structure of the surreals determined by the structure of the chosen set theory? (I don’t have an answer.)
Zero
Surreals are pairs of sets of surreals, but we don’t have any surreals yet. The only way to bootstrap them into existence is with empty sets (\(\emptyset\) or \(\{ \}\)), so the simplest surreal number is \((\emptyset | \emptyset)\). It turns out that this is zero – the same zero we know and love, so we can call it 0. We can also write this as \(( | )\) or \((\{ \} | \{ \} )\).
How can we tell if \(( | )\) really is zero? We could try to prove if it behaves like a zero, e.g., \(x + 0 = x\) and \(0x = 0\), for all \(x\). Not today. But let’s check something simpler: is 0 at least a surreal number? We need to check that there is no \(l \in 0_L, r \in 0_R\) such that \(l \ge r\). That’s easy to do since \(0_L = 0_R = \{ \}\). There’s nothing at all in either set, so 0 passes the test and is indeed surreal.
One and minus one
Our next candidate surreal numbers are built by plugging zero into left, right, or both:
\(( 0 | )\)
\(( | 0 )\)
\(( 0 | 0 )\)
The first two are fine, by a similar argument to the one we used for 0: since one of the pair is the empty set, there’s nothing in there to threaten the absence of the greater-than-or-equal-to condition.
The interpretation of these numbers is:
\(( 0 | ) = 1\)
\(( | 0 ) = -1\)
Intuitively, \(( 0 | 0 )\) isn’t a surreal number since left and right are equal. But we haven’t actually defined a way to think about this yet.
Let’s now define \(\ge\).
\((x_L | x_R) \ge (y_L | y_R)\) if and only if
(a) there is no \(x_R\) such that \(y \ge x_R \) and
(b) there is no \(y_L\) such that \(y_L \ge x\).
Note how this definition is recursive, mirroring how surreals are constructed. Again, it relies on the empty set to stop. If there is no \(x_R\) or \(y_L\) at all then it’s vacuously true.
Let’s use this to test if \((0|0) =( (\{\}|\{\})|(\{\}|\{\}))\) is surreal.
We want nothing on the left to be greater than or equal to anything on the right, so we don’t want \(0 \ge 0\). But this does hold.
\(0 \ge 0\), that is \((\{\}|\{\}) \ge (\{\}|\{\})\), if and only if (a) there is no element \(0_R\) such that \(0 \ge 0_R\) and (b) no \(0_L \ge 0\). Both conditions do hold:
(a) \(0_R = \{ \}\). There is nothing there, so nothing that 0 could be greater than or equal to.
(b) \(0_L = \{ \}\), so again nothing that could be greater than or equal to 0.
Therefore \(0 \ge 0\) and thus \((0|0)\) is not a surreal number.
Other numbers up to ω
Next comes
\(( 1 | ) = 2\)
\(( | 1 ) = -2\)
To make the numbers explicit, we can paste in their constituent surreals, e.g.,
And, amongst other numbers, a new representation for zero:
\(( -1 | 1) = 0\)
This is analogous to how \(1/2 = 2/4 = 3/6 = \ldots\)
How did Conway convince himself that these really are the numbers represented by this notation? I expect first by trying arithmetic on a few of them to get a sense of how they work, e.g., is \(1/2 + 1/2 = 1\)? He then proved the properties of arithmetic for all surreals (see, e.g., Conway, 2001, Chapter 1).
Let’s go back to the naturals, which are also surreals. As you create 0, 1, 2, 3, …, put them in a set. So now we have a set of infinitely many surreals, \(\{ 0, 1, 2, 3, … \}\), which can be used to make another surreal, \(\omega\):
\(\omega = (0, 1, 2, 3, \ldots | )\)
That is, \(\omega_L = \{ 0, 1, 2, 3, … \} \) and \(\omega_R = \{ \} \).
This is the first transfinite surreal number and the first number that isn’t a natural, integer, rational, or real.
There’s a lot more in there, but I’ll stop here for now. Here’s a map by Simons (2017, p. 37) of the landscape of surreals and the order they are created.
A map of the surreal numbers, by Jim Simons (2017)
What does the (L | R) notation mean?
Now I’m going to depart from the many formal introductions of surreals which prove that everything works (see the further reading below) and move onto the intuitive meaning of \((L|R)\), drawing on Conway and Guy (1996, pp. 283-291).
The notation \((L = a, b, c, \ldots | R = d, e, f, \ldots)\) refers to the simplest number strictly greater than everything in \(L\) and strictly less than everything in \(R\).
Apparently to understand “simplest” you need to learn about a two-player game called Hackenbush. I am not joking, this is not the name of a new BBC Radio 4 comedy. It’s part of the field of combinatorial game theory, and what prompted the discovery of the surreals in the first place. Tom Davis has written a program that allows you can play Hackenbush against the computer. It’s actually quite easy to play and requires no knowledge of the surreals. The idea is that surreals can be represented as states in the game, and which of the two players can win tells you something about the value of the number. But Hackenbush is for another blog post.
The examples Conway and Guy provide illustrate the general idea.
\(( | ) = 0\), “the simplest number of all” (ibid., p. 283).
\((0|) = 1\), the simplest number greater than 0.
Many distinct representations can refer to the same number, e.g., these are all 2:
\((0,1|) = 2\), the simplest number greater than 0 and 1.
\((1|) = 2\), the simplest number greater than 1.
\(( -1, 0, 1|) = 2\), the simplest number greater than -1, 0, and 1.
Here’s how fractions work:
\((0|1) = 1/2\), the simplest number greater than 0 and less than 1.
And negative numbers:
\((|0) = -1\), the simplest number less than 0.
\((| -1 ) = -2\), the simplest number less than -1.
So, to make sense of a surreal expressed as \((L|R)\), the trick is first to strip out numbers in \(L\) and \(R\) which don’t constrain the number. Leave the biggest in \(L\) and the smallest in \(R\).
One way to think of “simplest” is in terms of the order in which the surreals were created, e.g., 0 first, then -1, 1, and so on. The simplest is the earliest created.
Wise words from Matthew Roughan (I have mildly edited the notation):
“naively, you might expect that the form \(( 3 | 17 )\) could be mapped to the mean of the two sets, i.e., 10. However, \((x_L | x_R)\) is the simplest number such that \(x_L < x < x_R\), so, in fact, this form is equivalent to 4.”
Where \(\mathit{surreal}(l, r) = (l|r)\), \(\mathit{dali}(n, k)\) gives the surreal of \(n/2^k\), and \(\mathit{equal}(x, y) \equiv x = y\).
As you might guess from how vague this section is, I don’t completely get this yet and this is a note to future me. Stay tuned.
Automagically building dyadic rational surreals
Here are the first few surreals with singleton sets left and right, courtesy of R, for your arithmetical pleasure (let me know if I’ve missed any or added too many):
Conway (2001) and Knuth (1974) provide the classic introductions. Former GCHQ mathematician turned teacher, Jim Simons (2017), has written an accessible intro with loads of proofs, as has retired software engineer Claus Tøndering (2019). I found Matthew Roughan’s (2019) paper handy too and have just started playing with his Julia implementation (on GitHub). Frans Faase has written a neat web-based calculator in JavaScript that does simple sums and (in)equalities. Here’s Tom Davis’s implementation of Hackenbush which includes a tutorial. Elwyn Berlekamp produced a great YouTube video which explains how to play Hackenbush. Finally, here’s my attempt to implement surreal addition and a few other bits and pieces in R.
References
Conway, J. H. (2001). On numbers and games (2nd ed.). A. K. Peters, Ltd.
Conway, J. H., & Guy, R. K. (1996). The book of numbers. Springer-Verlag.
Knuth, D. E. (1974). Surreal numbers. Addison-Wesley.