  We present a new program synthesis approach that combines an encoder-decoder
based synthesis architecture with a differentiable program fixer. Our approach
is inspired from the fact that human developers seldom get their program
correct on the first attempt, and perform iterative testing-based program
fixing to get to the desired program functionality. Similarly, our approach
first learns a distribution over programs conditioned on an encoding of a set
of input-output examples, and then iteratively performs fix operations using
the differentiable fixer. The fixer takes as input the original examples and
the current program's outputs on example inputs, and generates a new
distribution over the programs with the goal of reducing the discrepancies
between the current program outputs and the desired example outputs. We train
our architecture end-to-end on the RobustFill domain, and show that the
addition of the fixer module leads to a significant improvement on synthesis
accuracy compared to using beam search.
