probability $p(y | {\mathcal{I}}, {\mathcal{V}}, {\mathcal{O}}),$ but the search is organized by integer weights. We resolve this with a simple heuristic: at the time we generate a new value, we have the weight $w$ of the expression that generates it. We discretize the model’s output probability into an integer in $\delta \in 0, \ldots, 5$ by binning it into six bins bounded by $[0.0, 0.1, 0.2, 0.3, 0.4, 0.6, 1.0].$ The new weight is computed from the discretized model output as $w' = w + 5-\delta.$ This function is indicated by [<span style="font-variant:small-caps;">ReweightWithModel</span>]{} in Algorithm \[alg:search\].

A key challenge is making the model fast enough. Evaluating the model for every intermediate value could cause the synthesizer to slow down so much that the overall performance would be worse than with no model at all. However, [<span style="font-variant:small-caps;">Bustle</span>]{} actually outperforms our baselines even when measured strictly in terms of wall-clock time (Section \[section:results\]). There are several reasons for this. First, computing property signatures for the expressions allows us to take some of the work of representing the intermediate state out of the neural network (which is slow) and to do it in the JVM (which is fast). Second, because a property 