  In many scenarios we need to find the most likely program under a local
context, where the local context can be an incomplete program, a partial
specification, natural language description, etc. We call such problem program
estimation. In this paper we propose an abstract framework, learning to
synthesis, or L2S in short, to address this problem. L2S combines four tools to
achieve this: syntax is used to define the search space and search steps,
constraints are used to prune off invalid candidates at each search step,
machine-learned models are used to estimate conditional probabilities for the
candidates at each search step, and search algorithms are used to find the best
possible solution. The main goal of L2S is to lay out the design space to
motivate the research on program estimation.
  We have performed a preliminary evaluation by instantiating this framework
for synthesizing conditions of an automated program repair (APR) system. The
training data are from the project itself and related JDK packages. Compared to
ACS, a state-of-the-art condition synthesis system for program repair, our
approach could deal with a larger search space such that we fixed 4 additional
bugs outside the search space of ACS, and relies only on the source code of the
current projects.
