TransWikia.com

How can I use Mathematica to solve a complex truth-teller/liar logic problem?

Mathematica Asked by Peter Burbery on April 13, 2021

I have a logic puzzle I want to convert to Mathematica to solve:
Person A states, "Exactly two people are truth-tellers,"
Person B states, "I and Person C are truth-tellers."
Person C states, "Person A is a liar or Person B is a liar." (here this is a use of inclusive or)
Each person is either a truth-teller or a liar.
The full first-order logic formulation of this is as follows:

  • A↔[(A∧B∧¬C)∨(A∧¬B∧C)∨(¬A∧B∧C)]
  • B↔(B∧C)
  • C↔(¬A∨¬B)

I was hoping someone could help me figure out how to create a truth table in Mathematica for this problem and/or solve using Mathematica’s logic functions for who is a truth-teller and who is a liar. I tried using Boolean Table but couldn’t get the right input. How can I use the solving features in Mathematica to input logical statements and figure out who is telling the truth and who is lying?
For a helpful similiar problem, see How to solve the liar problem?

One Answer

You can enter the logic formulations into Mathematica like this — Copy & paste the following code, and you can see the symbols.

p = a [Equivalent] ((a [And] 
       b [And] [Not] c) [Or] (a [And] [Not] b [And] 
       c) [Or] ([Not] a [And] b [And] c));
q = b [Equivalent] (b [And] c);
r = c [Equivalent] ([Not] a [Or] [Not] b);
  1. We prefer lowercase variables, since some uppercase variables have special meanings (e.g., E for constant $e$, N for numerical value function).

  2. Most symbols (in the form of [...] as you see) have shortcuts to type and have built-in meanings. For example, a [Equivalent] b can be typed with a Esc equiv Esc b, and it's just a more human-readable form of Equivalent[a, b] internally. That is, there's not any difference from:

    p = Equivalent[a, (a && b && !c) || (a && !b && c) || (!a && b && c)]; 
    q = Equivalent[b, b && c]; 
    r = Equivalent[c, !a || !b];
    

Then you can use any of the following commands to get the result:

p [And] q [And] r // BooleanConvert
p [And] q [And] r // LogicalExpand
p [And] q [And] r // FullSimplify
! b && c

Hence $Pland Qland Requivlnot Bland C$, indicating B must be a liar and C must be a truth-teller. Truth table can be generated with:

TableForm[BooleanTable[{a, b, c, p [And] q [And] r}, {a, b, c}], 
 TableHeadings -> {None, {"A", "B", "C", "P[And]Q[And]R"}}]

Correct answer by SneezeFor16Min on April 13, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP