if(True, x, y) = x;
if(False, x, y) = y;
not(x) = if(x, False, True);
or(x, y) = if(x, True, y);
and(x, y) = if(x, y, False);
notOrNot(x, y) = not(or(not(x), not(y)));
NotOrNot
if1(True(), a) = if2(a);
if1(False(), a) = False();
if2(False()) = False();
if2(True()) = True();
notOrNot(a, b) = if1(a, b);
Since the semantics of the language dealt with by SPSC is lazy,
the source program may contain definitions of “control structures”
(if, and, or and like that).
SPSC is able to remove such “control structures”, to produce a “flatter” and “more imperative” program.