here we go:
shaves(barber, X) :- male(X), not shaves(X,X).
He both shaves and does not shave himself by definition.
Here is the issue with the paradox: It is that it is incomplete.
It may be a complete statement for logic, but it is only a paradox because of the constraints of logic. One of the constraints of logic is that there is no time-scale.
The system needs more inputs. The definition can exist – we just made it. We defined it. But to resolve it we need to:
a) specify times where he does shave himself.
b) specify times where he does not shave himself.
It is that he is both shaving and not shaving himself SIMULTANEOUSLY (and _this_ is where the issue arises from – the simultaneousity _implied_ in the system) – that it becomes a paradox *within* the constraints of non-contradictory logic _only_.
In short, it is a sign that you have reached the border. You have reached the limits of what non-contradictory logic is capable of. It can go no further.
So, one must go further via other means.
Add other additional metrics, such as statistical probability.
Provide a choice for the Actor.
Provide a choice for the person solving the puzzle. [does he shave today or does he not?]
Additionally, one very important, easy to overlook fact:
This is a thought experiment. A thought experiment is a fiction.
There is no barber that exists with this definition.