op(400, xfx, [*,+,^,v,/,\,#]).  % infix operators
op(300,yf,@).                   % postfix operator

list(usable).
x v x=x.
x ^ x=x.
x * x=x.

x v y=y v x.
x ^ y=y ^ x.
x * y=y * x.

(x v y) v z=x v (y v z).
(x ^ y) ^ z=x ^ (y ^ z).
(x * y) * z=x * (y * z).

(x ^ (y v z)) v (x ^ y) = x ^ (y v z).
(x v (y ^ z)) ^ (x v y) = x v (y ^ z).

(x * (y v z)) v (x * y) = x * (y v z).
(x v (y * z)) * (x v y) = x v (y * z).

A * B != A ^ B.

end_of_list.

list(passive).
assign(A, 0).
assign(B, 1).
end_of_list.
