% Simple examples for boolean handler /* [eclipse 6]: and(X,Y,Z),(X=1;X=0;X=Y). Z = Var_m333 X = 1 Y = Var_m333 Constraints: (3) boolean(Var_m333) More? (;) Z = 0 X = 0 Y = Var_m333 Constraints: (3) boolean(Var_m333) More? (;) Z = _m309 X = _m309 Y = _m309 Constraints: (3) boolean(_m309) yes. */ % alternative formulations nand1(X1,Y1,Z):- and(X,Y,Z),neg(X1,X),neg(Y1,Y). nand2(X1,Y1,Z):- or(X1,Y1,Z1),neg(Z1,Z). test_nand(X,Y,Z1,Z2):- nand1(X,Y,Z1),nand2(X,Y,Z2),neg(Z1,Z2). or1(X,Y,Z):- nand1(X,Y,Z1),neg(Z1,Z). or2(X,Y,Z):- nand2(X,Y,Z1),neg(Z1,Z). or3(A,B,C):- xor(A,B,D),and(A,B,E),xor(D,E,C). test_or(A,B,C,D):- (or1(A,B,C);or2(A,B,C);or3(A,B,C)),or(A,B,D),neg(C,D). xor1(A,B,C):- or(A,B,C1), and(A,B,C2), neg(C2,C3), and(C1,C3,C). test_xor(A,B,C,D):- xor1(A,B,C),xor(A,B,D),neg(C,D). and1(A,B,C):- neg(A,AN),neg(B,BN),or(AN,BN,CN),neg(CN,C). test_and(A,B,C,D):- and1(A,B,C),and(A,B,D),neg(C,D). test(X,Y,Z):- and(X,Y,Z),or(X,Y,Z),neg(X,Z). % full-adder circuit boolean algebra example sept 1991, nov 1993 add(I1,I2,I3,O1,O2):- xor(I1,I2,X1), and(I1,I2,A1), xor(I3,X1,O1), and(I3,X1,A2), or(A1,A2,O2). /* add(L1,L2,L3):- add(L1,L2,L3,0). add([],[],[C],C). add([X|L1],[Y|L2],[Z|L3],C):- add(X,Y,C,Z,C1), add(L1,L2,L3,C1). */ add(L1,L2,[C|L3]):- add(L1,L2,L3,C). add([],[],[],0). add([X|L1],[Y|L2],[Z|L3],C):- add(L1,L2,L3,C1), add(X,Y,C1,Z,C). /* [eclipse 56]: add(L,L,R). L = [] R = [0] More? (;) L = [_g71] R = [_g71, 0] More? (;) L = [_g71, _g79] R = [_g71, _g79, 0] More? (;) L = [_g71, _g79, _g87] R = [_g71, _g79, _g87, 0] More? (;) L = [_g71, _g79, _g87, _g95] R = [_g71, _g79, _g87, _g95, 0] More? (;) [eclipse 59]: add([X,X,X],[Y,Y,Y],R), (X=1;X=0;X=Y;neg(X,Y)). R = [_m5677, Var_m4777, Var_m2407, Var_m419] X = 1 Y = Var_m395 Constraints: (39) boolean(_m5251) (33) boolean(Var_m1499) (19) and(Var_m395, Var_m1499, 0) (31) xor(Var_m395, Var_m1499, Var_m4777) (34) and(Var_m395, Var_m1499, _m5251) (16) xor(Var_m395, Var_m1499, Var_m2407) (43) neg(Var_m395, Var_m419) (38) boolean(Var_m395) (37) or(Var_m395, _m5251, _m5677) More? (;) R = [0, Var_m395, Var_m395, Var_m395] X = 0 Y = Var_m395 Constraints: (33) boolean(Var_m395) More? (;) R = [_m371, _m371, _m371, 0] X = _m371 Y = _m371 Constraints: (3) boolean(_m371) More? (;) R = [_m5251, Var_m4777, Var_m2407, Var_m419] X = _m371 Y = Var_m395 Constraints: (1) xor(_m371, Var_m395, Var_m419) (2) boolean(_m371) (3) boolean(Var_m395) (4) and(_m371, Var_m395, _m877) (10) xor(_m371, Var_m395, Var_m1499) (13) and(_m371, Var_m395, _m1973) (16) xor(_m877, Var_m1499, Var_m2407) (17) boolean(_m877) (18) boolean(Var_m1499) (19) and(_m877, Var_m1499, _m2881) (22) or(_m1973, _m2881, _m3307) (23) boolean(_m1973) (24) boolean(_m2881) (25) xor(_m371, Var_m395, Var_m3773) (31) xor(_m3307, Var_m3773, Var_m4777) (32) boolean(_m3307) (33) boolean(Var_m3773) (39) boolean(_m5251) (34) and(_m3307, Var_m3773, _m5251) (28) and(_m371, Var_m395, 0) yes. [eclipse 60]: add([X,X,X],[Y,Y,Y],R), (X=1;X=0;X=Y;neg(X,Y)), labeling. R = [0, 0, 0, 1] X = 1 Y = 0 More? (;) R = [1, 1, 1, 0] X = 1 Y = 1 More? (;) R = [0, 1, 1, 1] X = 1 Y = 0 More? (;) R = [0, 0, 0, 0] X = 0 Y = 0 More? (;) R = [0, 1, 1, 1] X = 0 Y = 1 More? (;) R = [0, 0, 0, 0] X = 0 Y = 0 More? (;) R = [1, 1, 1, 0] X = 1 Y = 1 More? (;) R = [0, 0, 0, 0] X = 0 Y = 0 More? (;) R = [0, 1, 1, 1] X = 0 Y = 1 More? (;) R = [0, 1, 1, 1] X = 1 Y = 0 yes. [eclipse 66]: add(L,R,[X|L]). R = [] X = 0 L = [] More? (;) R = [0] X = 0 L = [_m295] Constraints: (2) boolean(_m295) More? (;) R = [0, 0] X = 0 L = [_m1785, _m303] Constraints: (11) boolean(_m303) (20) boolean(_m1785) More? (;) R = [0, 0, 0] X = 0 L = [_m3275, _m1793, _m311] Constraints: (29) boolean(_m311) (38) boolean(_m1793) (47) boolean(_m3275) More? (;) yes. */