/* half_adder(In1,In2,C_out,Out) */ half_adder(0,0,0,0). half_adder(0,1,0,1). half_adder(1,0,0,1). half_adder(1,1,1,0). /* full_adder(C_in,In1,In2,C_out,Out) */ full_adder(0,0,0,0,0). full_adder(0,0,1,0,1). full_adder(0,1,0,0,1). full_adder(0,1,1,1,0). full_adder(1,0,0,0,1). full_adder(1,0,1,1,0). full_adder(1,1,0,1,0). full_adder(1,1,1,1,1). add(A2,A1,A0,B2,B1,B0,X3,X2,X1,X0) :- half_adder(A0,B0,C1,X0), full_adder(C1,A1,B1,C2,X1), full_adder(C2,A2,B2,X3,X2).