/* Knight and knaves: At least one of us is a knave in Picat. From Adrian Groza "Modelling Puzzles in First Order Logic" """ Puzzle 62. At least one of us is a knave On the island of knights and knaves, knights always tell the truth, while knaves always lie. You are approached by two people. The first one says: "At least one of us is a knave". What are they actually? (puzzle 28 from Smullyan (2011)) """ [1,0] P1: Knight P2: Knave This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import cp. main => go. go ?=> Knave = 0, Knight = 1, [P1,P2] :: [Knave,Knight], P1 #<=> (P1 #= Knave #\/ P2 #= Knave), Vars = [P1,P2], solve(Vars), println(Vars), Map = new_map([0="Knave",1="Knight"]), printf("P1: %w P2: %w\n",Map.get(P1), Map.get(P2)), fail, nl. go => true.