The boolean operators are ``&'', for logical and, ``|'' for logical or, ``~'' for logical not, ``^'' for exclusive or , ``->'' for implies, and ``<->'' for if-and-only-if (exclusive nor). The boolean values are 0 (false) and 1 (true).
The ``&'' operator obeys the following laws:
x & 0 = 0
0 & x = 0
x & 1 = 1
1 & x = x
If neither x nor y is a boolean value, then ``x & y'' is undefined. (recall that an ``undefined'' expression yields the set of all possible values, which in the case of a boolean expression is {0,1}). In particular,
1 & undefined = undefined
0 & undefined = 0
That is, ``undefined'' values behave like ``X'' values in typical logic simulators. You can write an undefined value as simply {0,1}.
Also note that
1 & 37 = 37
0 & 37 = 0
37 & 37 = undefined
The other boolean operators behave similarly, obeying:
0 | x = x
x | 0 = x
1 | x = 1
x | 1 = 1
0 ^ x = x
x ^ 0 = x
1 ^ x = ~x
x ^ 1 = ~x
x -> y = ~x | y
x <-> y = ~(x ^ y)