mostly yes — [<span style="font-variant:small-caps;">Bustle</span>]{} only fails to solve one benchmark that was solved by the baseline synthesizer.

Related Work
============

For surveys on program synthesis and machine learning for software engineering, see @THREEPILLARS [@ARMANDOCOURSE; @RISHABHSURVEY; @BIGCODE]. A well-known synthesizer for spreadsheet programs is FlashFill [@FLASHFILL], a version of which is deployed in Microsoft Excel. FlashFill is based on Version Space Algebras (VSAs), which are powerful and fast, but only apply to restricted DSLs, e.g. the top-most function in the program must be [`Concat`]{}, which allows it to perform efficient divide and conquer style search. Our technique has no such restrictions.

Early work on machine learning for program synthesis includes Deepcoder [@DEEPCODER], which uses ML to select once at the beginning of search. Although this idea is pragmatic, the disadvantage is that once the search has started, the model can give no further feedback. [@SIGNATURES] use property signatures within a Deepcoder-style model for premise selection.

One can also train a machine learning model to emit whole programs token-by-token using an encoder-decoder neural architecture [@bunel2018leveraging; @ROBUSTFILL; @parisotto2017neuro], but when one does this one loses the ability to inspect outputs of intermediate programs. Previous work has also considered using learning within syntax 