Sunday, August 14, 2011

Two plus two equals what?

In George Orwell’s totalitarian fable, ‘1984’, Party executive O’Brien is interrogating dissident Winston Smith under torture.

“Do you remember writing in your diary, ‘Freedom is the freedom to say that two plus two equals four’?”

“Yes,” said Winston.

O’Brien held up his left hand, its back towards Winston, with the thumb hidden and the four fingers extended.

“How many fingers am I holding up, Winston?”


“And if the Party says that it is not four but five – then how many?”


O’Brien turns up the voltage.


Do you believe, like Winston Smith, that 2 + 2 =4?

Proving this is not an easy task. It all depends on what '2', '4' and '+' actually are.

Start with an empty place and call the number of things there ‘0’. We call this the zero state. We could use any other symbol rather than ‘0’ if we chose.

Now we do an action which materialises an object at the empty place. Call the action s (s is going to stand for the word ‘successor’). The action s is naming what in mathematics or programming we would call a function. So we apply s to the initially empty place and end up with place containing one item, which we write s(0). Do it again and we get a place with two items, which we write s(s(0)).

So now we know what 2 is: it’s the result of applying the ‘successor’ function twice to an initial zero state, so we can say that when we write 2 we really mean s(s(0)).

What about ‘+’? This is a harder one, since you can add any two numbers together. How on earth can we define it?

Let’s add p and q together: p + q.

Rule 1: If p = 0, then p + q = 0 + q = q.

If p is not zero, then it must equal s(r) where r is a number which is one less than p. Now we write:

Rule 2: p + q = s(r) + q = r + s(q).

We made the left hand number one smaller and the right hand number one bigger and observed that the sum is just the same. These two rules are enough both to define ‘+’ and to prove that 2 + 2 = 4. Like this.

2 + 2
= s(s(0)) + s(s(0))
= s(0) + s(s(s(0))) – using Rule 2
= 0 + s(s(s(s(0)))) – using Rule 2
= s(s(s(s(0)))) – using Rule 1
= 4

If we tried to prove that 2 + 2 = 1 using the same technique we would surely fail, wouldn’t we?

Not necessarily: it depends on how we interpret s.

Up to now, s has stood for adding objects in succession at a place without limit. But suppose that we had a thermostat reading 0, 1, 2 with a dial which we could turn in a clockwise direction (the settings represent OFF, LOW and HIGH respectively). Applying the s function corresponds to moving the dial round by one notch so s(0) means 1 (‘LOW’) and s(s(0)) means 2 (‘HIGH’). s(s(s(0))) means 3 but we’ve gone in a complete circle so we’re back to 0 (‘OFF’) again.

What is 2 + 2? Well, as before, it’s s(s(s(s(0)))) but we now have the additional rule: s(s(s(0))) = 0, which means 3 = 0. So 2 + 2 = 1 in this interpretation, as we replace s(s(s(0))) by 0.

We can go further. If we interpret the s function as an operation which does nothing at all, then no matter how many times you apply it, you will always get 0. We can write this as the rule:

s(0) = 0.

Its implication is more clearly expressed, however, as 0 = 1 = 2 = 3 = 4 = 5 = ...

So 2 + 2 could equal anything.

Eventually Winston Smith did indeed learn to see exactly what the Party told him to see, and to honestly believe it. This is how a mathematically-trained Winston Smith could have kept more of his integrity and self-respect.

“I’m going to take O’Brien’s no finger up as the zero state. His act of raising an additional finger is going to be a representation of the s function; so four fingers corresponds to s(s(s(s(0)))). However, I choose to interpret zero or more raised fingers as the statement: The Party is Right!

“This means I’m imposing an additional rule, s(0) = 0.”

On this basis 0 = 1 = 2 = 3 = 4 = ... and Smith can honestly label O’Brien’s four fingers with any number the Party chooses. The Party wins an utterly vacuous victory.

The proof above that 2 + 2 = 4 (usually) may seem a small, whimsical thing but the technique provides an entry into the whole world of functional programming, our best hope of parallel programming the next generation of massively multi-core computers.

[This post was something I thought about for but I concluded it was too specialised.]