Introduction
Cantor's diagonal argument proves that the real numbers can't be arranged in a single list. Its power is that it works against any list at all, so you can watch it work on a particular one. This reading takes the first five entries of a claimed list and builds, step by step, a number that the list misses.
The Problem
The real numbers between 0 and 1 are the numbers you can write as "0." followed by an endless string of decimal digits. Some strings end in zeros, such as 0.25000\ldots, some repeat, such as 0.3333\ldots, and some never settle into a pattern.
Suppose someone hands you a list and says it contains every real number between 0 and 1. The list goes on forever: a first number, a second, a third, and so on. Here are its first five entries:
| Position | Number |
|---|
| 1st | 0.5000000\ldots |
| 2nd | 0.1415926\ldots |
| 3rd | 0.3333333\ldots |
| 4th | 0.7182818\ldots |
| 5th | 0.2500000\ldots |
The question is whether the claim can be true. You'll answer it without seeing the rest of the list, by building a number between 0 and 1 that can't be anywhere on it. The method was published by Georg Cantor in 1892 (Ferreirós 2025).
Working It Through
Step 1: Write out the first five decimals in rows
Line the numbers up so that their digits sit in columns: first digit after the decimal point in column 1, second in column 2, and so on. The table above already does this. Row 1 holds the 1st number, row 2 the 2nd number, and so on.
The list continues below row 5 and the digits continue to the right, both without end. You'll only ever look at finitely many of them at once, but the construction has a rule for every row and every column.
Step 2: Read the diagonal
Now pick out one digit from each row, moving one column to the right as you move one row down. Take the 1st digit of the 1st number, the 2nd digit of the 2nd number, the 3rd digit of the 3rd number, and so on. These digits lie along a diagonal of the table. In the table below, each one is shown in square brackets.
| Row | Number | Diagonal digit |
|---|
| 1 | 0.[5]000000… | 1st digit: 5 |
| 2 | 0.1[4]15926… | 2nd digit: 4 |
| 3 | 0.33[3]3333… | 3rd digit: 3 |
| 4 | 0.718[2]818… | 4th digit: 2 |
| 5 | 0.2500[0]00… | 5th digit: 0 |
The diagonal reads 5, 4, 3, 2, 0, and it continues with the 6th digit of the 6th number, the 7th of the 7th, and so on forever.
Step 3: Change each diagonal digit by a fixed rule
Build a new number, digit by digit, using this rule: if the diagonal digit is 5, write 4; if it's anything else, write 5.
- 1st diagonal digit 5 becomes 4.
- 2nd diagonal digit 4 becomes 5.
- 3rd diagonal digit 3 becomes 5.
- 4th diagonal digit 2 becomes 5.
- 5th diagonal digit 0 becomes 5.
So the new number begins 0.45555\ldots. Its later digits come from the same rule applied to the 6th, 7th, 8th entries of the list, and so on. Every digit of the new number is 4 or 5, so it lies between 0 and 1.
Step 4: Show the new number differs from every listed number
Compare the new number with each entry. It differs from the 1st number in the 1st digit (4 instead of 5). It differs from the 2nd number in the 2nd digit (5 instead of 4). It differs from the 3rd number in the 3rd digit (5 instead of 3), from the 4th in the 4th digit (5 instead of 2), and from the 5th in the 5th digit (5 instead of 0).
The same holds further down. For any position n, the nth digit of the new number was chosen to differ from the nth digit of the nth number. So the new number differs from the nth number in at least one place, whatever n is. It can't be the 1st number, or the 2nd, or the millionth, or any other. It isn't on the list.
Step 5: Conclude that no list contains every real number
The list was claimed to contain every real number between 0 and 1. You've built one it misses. So the claim is false.
Nothing in the steps depended on which numbers were on the list. The same construction works on any list someone could offer. So no list, however long and however cleverly arranged, contains every real number between 0 and 1. In Cantor's terms, the real numbers are uncountable: they can't be put in one-to-one correspondence with the whole numbers 1, 2, 3, … (Ferreirós 2025).
Key Considerations
Why the rule avoids 0 and 9. Some numbers have two decimal forms. The 1st number on the list, 0.5000\ldots, is the same number as 0.4999\ldots, because a string of 9s that never ends adds up to exactly one unit in the place before it. If the rule could produce endless 0s or endless 9s, the new number might differ from a listed number in its digits but equal it in value. The rule writes only 4s and 5s, so the new number has a single decimal form, and differing digits really do mean a different number. Here, 0.45555\ldots differs from 0.5000\ldots and from 0.4999\ldots alike.
Terminology. "Whole numbers" here means 1, 2, 3, …, the numbers you count with. A list is a one-to-one correspondence with those numbers: each position on the list gets exactly one entry. "Uncountable" means no such list can contain the whole set.
The common mistake: "just add the new number to the list." The natural reply is to put the missing number at the top and call the list complete. But that produces a new list, and the diagonal construction applies to it too, producing a different missing number. Adding that one gives another list with its own missing number, and so on without end. The argument never claimed that one particular number is unlistable. It shows that every list misses something, which is a statement about all lists at once.
What the argument doesn't show. It doesn't say the real numbers are "infinity plus a bit." It says their cardinality, or size measured by one-to-one correspondence, is strictly larger than that of the whole numbers. Fractions, by contrast, can be listed, so the argument depends on using all decimals, not just repeating ones.
Summary
Given any claimed list of the real numbers between 0 and 1, changing each diagonal digit by a fixed rule produces a number the list misses. Here is the result for the five entries shown:
| Row | Number | Diagonal digit | New digit |
|---|
| 1 | 0.5000000… | 5 | 4 |
| 2 | 0.1415926… | 4 | 5 |
| 3 | 0.3333333… | 3 | 5 |
| 4 | 0.7182818… | 2 | 5 |
| 5 | 0.2500000… | 0 | 5 |
Constructed number: 0.45555…, continued by the same rule down the whole list.
- Each new digit differs from the diagonal digit in its row, so the constructed number differs from every listed number in at least one place.
- The new digits are all 4 or 5, so the constructed number has only one decimal form and the difference is real.
- Check: compare 0.45555… with each row. Row 1 differs in place 1, row 2 in place 2, row 3 in place 3, row 4 in place 4, row 5 in place 5.
References
- Ferreirós, José. 2025. "The Early Development of Set Theory." Stanford Encyclopedia of Philosophy. First published 2007; substantive revision December 3, 2025.