“…This paper is related to a long line of recent work on program synthesis [1, 2, 6, 7, 22, 26-28, 32, 35, 36, 41, 42, 45-49, 53, 55]. While the goal of program synthesis is always to produce a program that satisfies the given specification, different synthesizers use different forms of specifications, including input-output examples [6,22,26,42,53], logical constraints [47][48][49], refinement types [41], or a reference implementation [27,35,45]. Our technique belongs in the latter category in that it uses the original implementation as the specification.…”