Instead, we use the idea of synthesis search-driven data generation from TF-Coder [@TFCODER]: First, we generate a large number of random inputs. For each of those inputs, we run bottom-up search using a dummy output, so that the search will never succeed, but just keeps generating expressions. For each generated expression, we compute all of its sub-expressions. This results in a dataset of triples, which contain an input, a sub-expression, and a larger expression to which the sub-expression belongs. These comprise the positive examples for the classifier. We also create an analogous dataset of negative triples — of the same size as the positive dataset — where the sub-expression in question is not actually a sub-expression of the larger expression. The data set used in our experiments was created by performing searches on 1000 random inputs and keeping 100 positive and 100 negative values at random from each search.

Combining Model with Synthesis {#section:synthesis_algorithm}
------------------------------

Incorporating the model into bottom-up synthesis is straightforward, and can be accomplished by adding the blue lines into Algorithm \[alg:search\]. Lines \[alg:bustle\_line\_1\] and \[alg:bustle\_line\_2\] compute the property signatures required for the model input, as described previously. The main challenge is that the model produces a 