Neural Program Synthesis with a Differentiable Fixer
This work addresses program synthesis for developers by providing an incremental improvement through iterative fixing inspired by human debugging processes.
The paper tackles the problem of program synthesis by introducing a differentiable fixer module that iteratively corrects programs based on input-output examples, resulting in a significant improvement in synthesis accuracy on the RobustFill domain compared to beam search.
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.