gate(g1, and). gate(g2, or ). gate(g3, inv). lig(out(g1), in(1,g2)). lig(out(g2), in(1,g3)). val(in(1,g1),0). val(in(2,g1),1). val(in(2,g2),0). val(IN, VAL) :- lig(OUT, IN), val(OUT,VAL). val(out(G), V):- gate(G, and), val(in(1,G),V1), val(in(2,G),V2), and(V1,V2,V). and(0,0,0). and(0,1,0). and(1,0,0). and(1,1,1). val(out(G), V):- gate(G, or), val(in(1,G),V1), val(in(2,G),V2), or(V1,V2,V). or(0,0,0). or(0,1,1). or(1,0,1). or(1,1,1). val(out(G), V):- gate(G, inv), val(in(1,G),V1), inv(V1,V). inv(0,1). inv(1,0).