is a length $k$ vector. The elements of the vector corresponding to a given property will have one of the values [$\mathsf{AllTrue}$]{}, [$\mathsf{AllFalse}$]{}, and [$\mathsf{Mixed}$]{}, depending on whether the property returned ${\ensuremath{\mathsf{True}}}$ for all $n$ pairs, ${\ensuremath{\mathsf{False}}}$ for all $n$ pairs, or ${\ensuremath{\mathsf{True}}}$ for some and ${\ensuremath{\mathsf{False}}}$ for others, respectively. Concretely, then, any property signature can be identified with a trit-vector, and we represent them in computer programs as arrays containing the values $\{-1, 0, 1\}$. An example of property signatures is shown in Listing \[listing:signatures\].

    io_pairs = [
      ("butter",   "butterfly"),
      ("abc",      "abc_"),
      ("xyz",      "XYZ_"),
    ]

    p1 = lambda inp, outp : inp in outp 
    p2 = lambda inp, outp : outp.endswith(inp)
    p3 = lambda inp, outp : inp.lower() in outp.lower()

Input/output examples $(\mathcal{I}, \mathcal{O})$ A program $P$ such that $P(i) = o$ for all inputs $i \in {\mathcal{I}}$ with corresponding output $o \in {\mathcal{O}}$ Supported operations *Ops*, supported Properties *Props*, and a model $M$ trained using *Props* as described in Section \[section:training\_the\_model\]. $E \gets \emptyset $ $C \gets $ $E[1] \gets \mathcal{I} \cup C$ $s_{io} \gets \Call{PropertySignature}{\mathcal{I}, \mathcal{O}, \mathit{Props}}$ \[alg:bustle\_line\_1\] $n \gets op.\mathit{arity}$ $A \gets \emptyset$ $A \gets A \cup \{(a_1, \dots , a_n) \mid a_i.\mathit{weight} = w_i \wedge 