# Knights and knaves not on an island

On a fictional island there were two types of people: knights who always told the truth, and knaves, who always lied. They got irritated by people asking them so many questions so they all moved to an uninhabited and very remote peninsula. Three of the inhabitants, Alpha, Beta and Frank are in the garden playing with one or two Banach–Tarski paradox balls. They see a pesky logician approach. They all jokingly say, "All our statements are false." The frustrated logician leaves.

Alpha says, "Beta and Frank are of the same type" (meaning Beta and Frank are both knights or are both knaves.)

Then Beta says, "Frank and I are different types."

Lastly, Frank says, "Alpha and I are different types."

Is Alpha a knight or a knave? And what about Beta and Frank?

You can assume Alpha, Beta and Frank all know what type of individual the others are.

• Is a paradox a lie? Are jokes statements? Jun 20 at 15:31
• @gnasher729 One online dictionary defines a paradox to be, “A statement that is seemingly contradictory or opposed to common sense and yet is perhaps true“. The same dictionary defines a lie to be, “An assertion of something known or believed by the speaker or writer to be untrue with intent to deceive”. I feel that a paradox and a lie are not the same. Jun 20 at 18:23
• @gnasher729 Jokes can be statements but they are not necessarily intended to be taken seriously. The intention of jokes is typically to entertain. Jun 20 at 18:26

Then Beta says, "Frank and I are different types."

If Beta is knight then Frank must be knave. If Beta is knave then Frank must be knave. So this statement implies Frank is knave.

Similarly, Frank's statement implies: Alpha is knave.

So Alpha is lying, and Beta is knight.

Beta is a knight, the other two are knaves.

Since these are all knights and knaves (no sometimes liars), we can assert that the veracity of the speaker equals the veracity of the statement, and can break down the revised statements as follows:

A=B=C, which is true with any odd number of knights.
B=B<>C => !C, C is not a knight.
C=A<>C => !A, A is not a knight.

• Unfortunately I don’t understand your reasoning. Could you please explain in more detail. Jun 20 at 3:05
• He used some simple equalities which are here the equivalent of using a sledgehammer to fasten a drawing pin :D A is equal to output of B==C. This requires 1 knight (anyone) or all 3. B is equal to B != C; so B is equal to B == !C, B is obviously equal to B, so we simply keep the !C, making C a knave. Likewise for C's statement which makes A knave. Now, using odd knights from the first one we get that B is knight. Jun 20 at 8:40

all 3 are liars

They all jokingly say, "All our statements are false." Us includes the person itself, a knight cannot lie, so a knight cannot say it (even jokingly, I assume)
They can all 3 be knaves, assuming they speak of 'us' as more than the 3 of them (probably to confuse that pesky logician). Conclusion: 'our' includes a knight living on the island.

Then Beta says, "Frank and I are different types."; Lastly, Frank says, "Alpha and I are different types." Both are lies, This causes no contradiction.
Alpha says, "Beta and Frank are of the same type" Since Alpha lies either Beta or Frank is a knave, and the other a knight. This seems a contradiction, but remember there is a knight they already talked about. Apparently his name is either Beta or Frank.

This probably is not the intended answer, but the intro mentions identical balls, so why not have identical names? (I bet those balls can talk; and if you make two out of one, 1 is a knight and the other a knave)

• +1 for an interesting answer. Jun 20 at 18:39

Here's how I did it the long, brute force way - in Python code.

Start with every combination of two states for three people. What's the easiest way to represent that?

It maps perfectly to a set of three binary digits, with 0 for knave and 1 for knight. It works particularly well because Python treats 0 as False and 1 as True. (This isn't necessarily the easiest way, but it's what I went with.)

This code produces all the possible three-bit combinations (i.e. the decimal range 0 to 7), then splits them into arrays of three elements each.

people_combos = [[int(b) for b in list(f"{x:03b}")] for x in range(8)]

[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]

Treat each of these arrays as an ordered list of the three people, so the first position (index 0) is Alpha, second (1) is Beta, third (2) is Frank.

Then turn each of the people's statements as a logic expression, remembering that 0 is False and 1 is True. For example, the statement "Beta and Frank are the same type" will be True if the bits representing Beta and Frank are both 0 or both 1.

This can be represented as the logical expression NOT (Beta XOR Frank). If we have our people represented by a three element array discussed earlier, then the Python code is:

~(arr[1] ^ arr[2])

However, the truth of that statement depends on the type of the teller (Alpha). When testing our people combination, we're looking for true statements told by knights (who are also represented by True values) or false statements told by knaves (who are False values). So it's NOT XOR again:

~(person ^ statement)

which is...

~(arr[0] ^ ~(arr[1] ^ arr[2])

Finally, use a filtered list comprehension to loop through the big set of people combinations and return only those for which all the statements are true.

[arr for arr in people_combos if
~(arr[0] ^ ~(arr[1] ^ arr[2])) &
~(arr[1] ^ (arr[1] ^ arr[2])) &
~(arr[2] ^ (arr[0] ^ arr[2]))]

And here's the entire program as a single line of Python:

[s for s in  [[int(b) for b in list(f"{x:03b}")] for x in range(8)] if ~(s[0] ^ ~(s[1] ^ s[2])) & ~(s[1] ^ (s[1] ^ s[2])) & ~(s[2] ^ (s[0] ^ s[2]))]

... which returns the only combination for which all the statements work:

[[0, 1, 0]]

Alpha and Frank are knaves, and Beta is a Knight.

I started by assuming Frank is a knave, which means that under that assumption, his statement "Alpha and I are different types" is a lie, and therefore Alpha is also a knave.

According to Alpha, "Beta and Frank are of the same type". However, being a knave, that statement is a lie, and therefore Beta is a knight.

Finally, I checked if any contradictions arise from the solution made under my initial assumption. Beta's statement "Frank and I are different types" is true, and so, Beta didn't lie. Therefore he is indeed a knight - No contradiction is found, and the solution is correct.

• Your reasoning demonstrates that there’s no contradiction in your solution, but fails to demonstrate that the solution must be true. Jun 20 at 11:03
• If there's no contradiction in my solution under an initial assumption, and all statements check out, then the solution is valid. Jun 20 at 11:10
• Valid but not necessarily true. Suppose that only Alpha had made his statement, and that my answer was "Everyone's a knight". In this case there would be no contradiction, and my response would be valid, but I still wouldn't have proved that everyone's a knight, just that it was possible that everyone's a night. Jun 20 at 11:19
• And in your answer, since it relies on the assumption you made that Frank is a knave, it's only known to be true if Frank is known to be a knight. Jun 20 at 11:20
• Only if you also assume that there is a unique solution. Again, Is the conclusion I reached about Omega valid? Is it true? Jun 20 at 11:38

Beta is a knight, Alpha and Frank are both knaves

Here's a truth table:

A B F S1 S2 S3 All
0 0 0 0 1 1 0
0 0 1 1 0 1 0
0 1 0 1 1 1 1
0 1 1 0 0 1 0
1 0 0 1 1 0 0
1 0 1 0 0 0 0
1 1 0 0 1 0 0
1 1 1 1 0 0 0

The first three are simply the eight possibilities for A, B, and F (1 = True = Knight; 0 = False = Knave). S1 is 0 if this combination is impossible given the first statement, and 1 if it is possible. Similar for S2 and S3. Then All is simply the product of S1, S2, and S3. Luckily there's only 1 combination that is possible given all three statements.

Note S1 is the sum of A, B, and F modulo 2. S2 is simply ~F (takes a little thought to work through the double negatives). And S3 is simply ~A for similar reasons.