%% Bool^2: {00,01,10,11}

:- dynamic and_bool2/3, or_bool2/3.

member(pair(X,Y)):-bool(X),bool(Y).
bool(0).
bool(1).

members([pair(0,0),pair(0,1),pair(1,0),pair(1,1)]).

top(pair(1,1)).
bot(pair(0,0)).

leq(pair(X1,Y1),pair(X2,Y2)):-leqb(X1,X2),leqb(Y1,Y2).
leqb(0,1).
leqb(X,X).

and_bool2(pair(X1,Y1),pair(X2,Y2),pair(X3,Y3)):-and(X1,X2,X3),and(Y1,Y2,Y3).
and(0,0,0).
and(0,1,0).
and(1,0,0).
and(1,1,1).

or_bool2(pair(X1,Y1),pair(X2,Y2),pair(X3,Y3)):-or(X1,X2,X3),or(Y1,Y2,Y3).
or(0,0,0).
or(0,1,1).
or(1,0,1).
or(1,1,1).