- By the laws of the land
We know that the gadget
g(is_knight, predicate_is_true)
must construct statements that are true for Knights and false for Knaves, if they are to say them.
- Anybody can use it to say P or !P, regardless of if they are a knight or a knave (their "alignment").
Thus each combination below must be speakable.
g(true, true) == true g(true, false) == true g(false, true) == false g(false, false) == false
- You cannot determine if P is true or false, even if you know the speaker's alignment.
We already know this, since
g(x, true) == g(x, false)
above.
- You cannot determine the speaker's alignment, even if you know the value of P.
We have the second half already from
g(x, true) == g(x, false)
above, P has no impact on the statement. Since we requireg(x, *)
to not disclose any new information aboutx
, it must either be always true, always false, or a statement aboutx
.
However, since we already require
g(true, *) == true
andg(false, *) == false
, it cannot be constant, and is forced to beg(x) = x
.
Putting this all together the only statements are ones ...
... that ignore P altogether (either by omitting it, or rendering it tautology), andultimately reduce to
x
, e.g.I am a knight
,I am not a knave
,I tell the truth
. The statement must ignore P altogether either by: omitting it, which might fail condition 1; rendering it tautology withP or !P
,P or true
. If we want a satisfying answer that uses P once in a meaningful way, we seem to be out of luck by design.