Through the book "Het wiskunde boek" I came across the "Barber's paradox", which states [from Wikipedia]:
"Suppose there is a town with just one male barber; and that every man in the town keeps himself clean-shaven: some by shaving themselves, some by attending the barber. It seems reasonable to imagine that the barber obeys the following rule: He shaves all and only those men in town who do not shave themselves.
Under this scenario, we can ask the following question: Does the barber shave himself?
Asking this, however, we discover that the situation presented is in fact impossible:
- If the barber does not shave himself, he must abide by the rule and shave himself.
- If he does shave himself, according to the rule he will not shave himself."
Leaving Wikipedia, I will extract the barber's rule, for clarity:
~shave(man, man) => shave(barber, man)
shave(man, man) => ~shave(barber, man) // man is a variable here, barber is a constant
In the Wikipedia article Bertrand Russell notes that this contradiction is not difficult to solve, and it also shows a link of Dijkstra making such an attempt, but he seems to miss the point.
My intuition goes in a different direction, which I didn't find here, so I should I'd just name it (I am sure it has been found before by someone else):
It goes like this: shaving one's own head is something different entirely from shaving someone else his head. If it wasn't, the barber would never have had to learn the art of shaving someone else, it would have been the same as shaving himself. When you shave someone else, your entire position towards the shaven object is different and your actions will need to be adapted.
So it is only fair to say that the predicate of shaving should have to be split into two different ones: to self-shave(a) and to other-shave(a, b). Homonyms always cause trouble, best get rid of them.
Now instead of claiming either shave(barber, barber) or ~shave(barber, barber), we can say either self-shave(barber) or ~self-shave(barber).
and the rule of the barber goes like this:
~self-shave(man) => other-shave(barber, man)
self-shave(man) => ~other-shave(barber, man)
Now the assumption self-shave(barber) leads to the conclusion ~other-shave(barber, barber) which means that he doesn't shave himself the same way he would shave someone else.
And the assumption ~shave(barber, barber) would lead to the absurd conclusion other-shave(barber, barber): that he would have to shave himself while being someone else.
So the barber shaves himself. Duh.
I think that is just what Russell meant.