and_gate(In1,In2,Out) :- In1,In2,Out=true,!. and_gate(_,_,Out) :- Out=false. or_gate(In1,In2,Out) :- (In1;In2),Out=true,!. or_gate(_,_,Out) :- Out=false. tri_gate(In1,In2,In3,In4,Out) :- and_gate(In1,In2,X), and_gate(In3,In4,Y), or_gate(X,Y,Out).