not(0, 1). not(1, 0). and(0, 0, 0). and(0, 1, 0). and(1, 0, 0). and(1, 1, 1). xor(0, 0, 0). xor(0, 1, 1). xor(1, 0, 1). xor(1, 1, 0). or(0, 0, 0). or(0, 1, 1). or(1, 0, 1). or(1, 1, 1). halfadder(A, B, Carry, Sum):- and(A, B, Carry), xor(A, B, Sum). fulladder(A, B, Carryin, Sum, Carryout):- xor(A, B, X), and(A, B, Y), and(X, Carryin, Z), xor(Carryin, X, Sum), or(Y, Z, Carryout).