Learning programs by combining programs
  The goal of inductive logic programming is to induce a set of rules (a logic
program) that generalises examples. Inducing programs with many rules and
literals is a major challenge. To tackle this challenge, we decompose programs
into \emph{non-separable} fragments, learn fragments separately, and then
combine them. We implement our approach in a generate, test, combine, and
constrain loop. Our anytime approach can learn optimal, recursive, and large
programs and supports predicate invention. Our experiments on multiple domains
(including program synthesis and inductive general game playing) show that our
approach can increase predictive accuracies and reduce learning times compared
to existing approaches.
