/* Boolean in Picat. From IF/Prolog boole.pro This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ % import util. import cp. main => go. go => Axiom=findall([X1,Y1,Z1],axiom(X1,Y1,Z1)), println(axiom=Axiom), Xor = findall([A1,B1],xor(A1,B1)), println(xor=Xor), Morgan1 = findall([A2,B2],morgan1(A2,B2)), println(morgan1=Morgan1), Morgan2 = findall([A3,B3],morgan2(A3,B3)), println(morgan2=Morgan2), nl. axiom(X, Y, Z) => X #^ 0 #<=> X, X #^ X #<=> 0, X #^ Y #<=> Y #^ X, (X #^ Y) #^ Z #<=> X #^ (Y #^ Z), X #/\ Y #<=> Y #/\ X, X #/\ (Y #/\ Z) #<=> (X #/\ Y) #/\ Z, X #/\ (Y #^ Z) #<=> (X #/\ Y) #^ (X #/\ Z), 0 #/\ X #<=> 0, 1 #/\ X #<=> X, X #/\ X #<=> X, solve([X,Y,Z]). xor(A, B) => A #^ B #<=> (A #/\ #~B) #\/ (#~A #/\ B), solve([A,B]). morgan1(A, B) => #~(A #/\ B) #<=> #~A #\/ #~B, solve([A,B]). morgan2(A, B) => #~(A #\/ B) #<=> #~A #/\ #~B, solve([A,B]).