This report outlines an approach to learning generative models from data. We
express models as probabilistic programs, which allows us to capture abstract
patterns within the examples. By choosing our language for programs to be an
extension of the algebraic data type of the examples, we can begin with a
program that generates all and only the examples. We then introduce greater
abstraction, and hence generalization, incrementally to the extent that it
improves the posterior probability of the examples given the program. Motivated
by previous approaches to model merging and program induction, we search for
such explanatory abstractions using program transformations. We consider two
types of transformation: Abstraction merges common subexpressions within a
program into new functions (a form of anti-unification). Deargumentation
simplifies functions by reducing the number of arguments. We demonstrate that
this approach finds key patterns in the domain of nested lists, including
parameterized sub-functions and stochastic recursion.