particular design choices: our form of bottom up search guarantees that all intermediate expressions can yield a value comparable to the inputs and outputs, and Property Signatures can do a lot of the “representational work” that would otherwise require a larger model.

The classifier is trained by behavior cloning on a set of training problems. However, obtaining a training dataset is challenging. Ideally, the training set would contain synthesis tasks that are interesting to humans, but such datasets can be small compared to what is needed to train deep networks. Instead, we train on randomly generated synthetic data (similar to [@ROBUSTFILL]). This choice does come with a risk of poor performance on human-written tasks due to domain mismatch [@shin2019-sv], but we show in Section \[section:results\] that [<span style="font-variant:small-caps;">Bustle</span>]{} can overcome this issue.

Generating the random synthetic data is itself non-trivial: Because different DSL functions have corresponding argument preconditions and invariants (e.g. for [`Substr`]{} the position indices $I_1$ and $I_2$ should be less than the string length $I_1 \le {\texttt{Len(S)}} \land I_2 \le {\texttt{Len(S)}}$), a random sampling of DSL programs and inputs would lead to a large number of training examples where the program cannot be applied to the sampled inputs. 