which enumerates DSL expressions from smallest to largest. The search follows Algorithm \[alg:search\] if the lines colored in blue (\[alg:bustle\_line\_1\], \[alg:bustle\_line\_2\], and \[alg:bustle\_line\_3\]) are removed. This baseline uses a *value-based* search: during the search, each candidate expression is executed to see if it meets the specification. Then, rather than storing the expressions that have been produced in the search, we store the values produced by executing the expressions. This allows the search to avoid separately extending sub-expressions that are semantically equivalent on the given input examples.

More specifically, every expression has an integer weight, which for the baseline synthesizer is the number of nodes in the AST. The search maintains a table mapping weights to a list of all the values of previously explored sub-expressions of that weight. The search is initialized with a set of input values and constant values given by the user, all of which have weight $1$. The search then proceeds starting from expressions of weight 1, gradually creating all expressions of weight 2, and then of weight 3, and so on. To create all values of weight $n$, we loop over all available functions, calling each function with all combinations of arguments that would yield 