# Compute the depth of a path, i.e., count the number of slashes
    expectedProgram = "TO_TEXT(MINUS(LEN(var_0), LEN(SUBSTITUTE(var_0, \"/\", \"\"))))"
    io_pairs = {"/this/is/a/path": "4", "/home": "1", "/a/b": "2"}

    # Change DDMMYYYY date to MM/DD/YYYY
    solution = "CONCATENATE(MID(var_0, 3, 2), \"/\", REPLACE(var_0, 3, 2, \"/\"))"
    io_pairs = {"08092019" : "09/08/2019", "12032020" : "03/12/2020"}

    # Create capitalized acronym from two words in one cell
    solution =
        "UPPER(CONCATENATE(LEFT(var_0, 1), MID(var_0, ADD(FIND(\" \", var_0), 1), 1)))"
    io_pairs = {"product area" : "PA", "Vice president" : "VP"}

[<span style="font-variant:small-caps;">Bustle</span>]{}: Bottom-Up Synthesis with Learning
===========================================================================================

Each intermediate expression we encounter during search can be evaluated to produce concrete results, and we can pass those results into a machine learning model to guide the search. The model is a binary classifier $p(y \mid {\mathcal{I}}, {\mathcal{V}}, {\mathcal{O}})$ that predicts whether a set of values ${\mathcal{V}},$ which result from evaluating an expression on each input example $i \in \cal{I}$, is an intermediate value of a program that maps the inputs ${\mathcal{I}}$ to the outputs ${\mathcal{O}}.$ Given those predictions, we de-prioritize sub-expressions that are unlikely to appear in the final result, which, when done correctly, dramatically speeds up the synthesizer.

Model Architecture and Training {#section:training_the_model}
-------------------------------

Because we want the classifier 