# Catch the liar(s). Prove it using a truth table

Alice: "If Bob is lying, Charlie is lying!"
Bob: "If Charlie is lying, Alice is lying!"
Charlie: "If Alice is lying, Bob is lying!"

Who is/are lying? How do you prove it using a truth table?

I agree that the truth table is an overkill to solve such symmetrical puzzle, but as OP requested, here it is:

The truth table could look something like this:

Consider:
A - Alice
B - Bob
C - Charlie
a - what Alice said which is "B = 0 -> C = 0"
b - what Bob said which is "C = 0 -> A = 0"
c - what Charlie said which is "A = 0 -> B = 0"
P - is that situation possible which is "A = a and B = b and C = c"

By the laws of mathematical logic: if the first part of an implication is false, then the implication as a whole is true.

   A   B   C     a   b   c     P

0   0   0     1   1   1     0    - 3 liars - not possible
0   0   1     0   1   1     0    - 2 liars - not possible
0   1   0     1   1   0     0    - 2 liars - not possible
1   0   0     1   0   1     0    - 2 liars - not possible
1   1   0     1   0   1     0    - 1 liar  - not possible
0   1   1     1   1   0     0    - 1 liar  - not possible
1   0   1     0   1   1     0    - 1 liar  - not possible
1   1   1     1   1   1     1    - 0 liars - possible     

Which can be summarized by:

The only possible solution would be that all of the friends tell the truth.

• Alice = liar, Bob = liar, Charlie = not liar seems to work with me... Am I doing something wrong? – stack reader Jan 26 '17 at 8:58
• @stackreader If Bob is a liar and Charlie is a truthteller, then what Bob said is true and he cannot be a liar. – oleslaw Jan 26 '17 at 9:13
• Isn't Bob's statement void because Charlie is a truth-teller? His statement gives no directions unless Charlie is a liar. No? – stack reader Jan 26 '17 at 9:19
• By the laws of mathematical logic: if the first part of the implication is false, then all the implication is true. – oleslaw Jan 26 '17 at 9:57
• @Humn I answer a question if I know the answer and the answer is not there yet. I vote up a question which I think deserves it - not every question I answer is worth voting up. I don't fully understand what you are trying to achieve here. – oleslaw Jan 26 '17 at 12:25

Suppose Alice is lying. Then Bob is lying and Charlie is telling the truth. But Bob lying implies that Charlie is lying and Alice is telling the truth. This is a contradiction, so the initial supposition is false, so Alice told the truth.

By symmetry, everyone told the truth.

Edit after receiving a down-vote: Perhaps my argument is unclear? So here is a more explicit argument, following the above deduction that Alice told the truth. Then Alice's statement is true: that if Bob is lying, Charlie is lying.

Suppose that Bob is lying. Then Charlie is lying. But Charlie's statement is a hypothetical whose precondition is the false statement "Alice is lying". So it's true. This contradicts the supposition that Charlie is lying.

Therefore Bob is telling the truth. Then his statement is true: that if Charlie is lying, Alice is lying. But we know that Alice is not lying. Therefore Charlie is telling the truth. To summarise, all three are telling the truth.

If you want a truth table, here's one. The first three columns make suppositions as to who tells the truth and who lies. "A's s" (etc) mean whether Alice's (etc) statement is a truth or a lie based on those suppositions. "#" indicates a contradiction.

 A B C | A's s B's s C's s ------+------------------ t t t | t t t t t l | t l# t# t l t | l# t# t t l l | t l t# l t t | t# t l# l t l | t# t l l l t | l t# t l l l | t# t# t# 

First, let's make logical statements.
A: Alice is telling the truth
B: Bob is telling the truth
C: Charlie is telling the truth

Next, let's convert the talk into logic.
Alice: "If Bob is lying, Charlie is lying!": A -> (B -> C)
Bob: "If Charlie is lying, Alice is lying!": B -> (C -> A)
Charlie: "If Alice is lying, Bob is lying!": C -> (A -> B)

Truth Table:
A | B | C | A -> (B -> C) | B -> (C -> A) | C -> (A -> B)
--+---+---+---------------+---------------+---------------
T | T | T | T | T | T # Works
T | T | F | F | T | T
T | F | T | T | T | F
T | F | F | T | T | T # Works
F | T | T | T | F | T
F | T | F | T | T | T # Works
F | F | T | T | T | T # Works
F | F | F | T | T | T # Doesn't work because of contradiction

Since everyone is saying almost the same thing, logically the truth table is unnecessary. Assume that three identical people are sitting in a circle and saying this, the only logical outcome is that they cannot all be lying at the same time. Thus out of all possibilities (2^3 = 8), all lies cannot be, rest are all possible.

Change the data into logical conditions and make rules:

1 = Truth
0 = Liar
A(1) : If B=0 => C=0 (i.e. if A is truthful, then if B is a liar so is C)
B(1) : If C=0 => A=0
C(1) : If A=0 => B=0
A(0) : If B=0 => C=1
B(0) : If C=0 => A=1
C(0) : If A=0 => B=1

Actual Truth Table:

A B C
1 1 1 : Works, everyone is telling the truth, no "If liar" clauses invoked.
1 1 0 : Doesn't work. B(1) with C=0 means A is a liar, which conflicts.
1 0 1 : Doesn't work.
0 1 1 : Doesn't work.
1 0 0 : Works, A(1) with B=0 means C=0. B(0) means A=1 (B is a liar, A is truthful). C(0) doesn't matter.
0 1 0 : Works
0 0 1 : Works
0 0 0 : Doesn't work. If everyone is a liar then they must all tell the truth.

So...

Either everyone is telling the truth or there are exactly two liars.