  We present new techniques for synthesizing programs through sequences of
mutations. Among these are (1) a method of local scoring assigning a score to
each expression in a program, allowing us to more precisely identify buggy
code, (2) suppose-expressions which act as an intermediate step to evolving
if-conditionals, and (3) cyclic evolution in which we evolve programs through
phases of expansion and reduction. To demonstrate their merits, we provide a
basic proof-of-concept implementation which we show evolves correct code for
several functions manipulating integers and lists, including some that are
intractable by means of existing Genetic Programming techniques.
