  Version space algebras are ways of representing spaces of programs which can
be combined using union, intersection, and cross-product/``join" operators. In
their reified form as ASTs with explicit union and join nodes, they have the
ability to compactly represent exponentially-large spaces of programs, owing to
which they have become become the most popular approach to enumerative program
synthesis since the introduction of FlashFill in 2010. We present a linear-time
semantics-preserving constructive embedding from version space algebras into
nondeterministic finite tree automata, showing that the former are but a
special case of the latter. Combined with recent results finding a
correspondence between e-graphs and minimal deterministic tree automata, this
shows that tree automata are strict generalizations of all recent major
approaches to efficiently representing large spaces of programs by sharing.
