# Terry: “Sherry is guilty , and Barry is innocent”. # Sherry: “If Terry is guilty , then so is Barry”. # Barry: “’Im innocent , but at least one of the others is guilty”. # Anybody who is innocent told the truth. # Anybody who is guilty lied. from z3 import * T_guilty = Bool('T_guilty') S_guilty = Bool('S_guilty') B_guilty = Bool('B_guilty') T_innocent = Bool('T_innocent') S_innocent = Bool('S_innocent') B_innocent = Bool('B_innocent') T_consistent = T_guilty == Not(T_innocent) S_consistent = S_guilty == Not(S_innocent) B_consistent = B_guilty == Not(B_innocent) T_truthful = T_innocent == And(S_guilty, B_innocent) S_truthful = S_innocent == Implies(T_guilty, B_guilty) B_truthful = B_innocent == And(B_innocent, Or(T_guilty, S_guilty)) constraints = [] constraints += [T_consistent, S_consistent, B_consistent] constraints += [T_truthful, S_truthful, B_truthful] s = Solver() s.add(constraints)