  This paper describes a way to improve the scalability of program synthesis by
exploiting modularity: larger programs are synthesized from smaller programs.
The key issue is to make each "larger-created-from-smaller" synthesis
sub-problem be of a similar nature, so that the kind of synthesis sub-problem
that needs to be solved--and the size of each search space--has roughly the
same character at each level. This work holds promise for creating
program-synthesis tools that have far greater capabilities than currently
available tools, and opens new avenues for synthesis research: how synthesis
tools should support modular system design, and how synthesis applications can
best exploit such capabilities.
