(datatype binary if (element? X [0 1]) _____________ X : zero-or-one; X : zero-or-one; ________________ [X] : binary; X : zero-or-one; Y : binary; ____________________________ [X | Y] : binary; X : zero-or-one, [Y | Z] : binary >> P; ________________________________________ [X Y | Z] : binary >> P;) (define complement {binary --> binary} [0] -> [1] [1] -> [0] [1 N | X] -> [0 | (complement [N | X])] [0 N | X] -> [1 | (complement [N | X])])