
/* dnf.q: This is a tiny example for symbolic expression manipulation. It
   transforms logical expressions into disjunctive normal form (DNF).
   05-08-1993 AG */

// eliminate double negations:
not not A		= A;

// push negations inward (de Morgan's laws):
not (A or B)		= not A and not B;
not (A and B)		= not A or not B;

// distributivity laws:
A and (B or C)		= A and B or A and C;
(A or B) and C		= A and C or B and C;

// associativity laws:
A and (B and C)		= (A and B) and C;
A or (B or C)		= (A or B) or C;
