  Program synthesis from incomplete specifications (e.g. input-output examples)
has gained popularity and found real-world applications, primarily due to its
ease-of-use. Since this technology is often used in an interactive setting,
efficiency and correctness are often the key user expectations from a system
based on such technologies. Ensuring efficiency is challenging since the highly
combinatorial nature of program synthesis algorithms does not fit in a 1-2
second response expectation of a user-facing system. Meeting correctness
expectations is also difficult, given that the specifications provided are
incomplete, and that the users of such systems are typically non-programmers.
  In this paper, we describe how interactivity can be leveraged to develop
efficient synthesis algorithms, as well as to decrease the cognitive burden
that a user endures trying to ensure that the system produces the desired
program. We build a formal model of user interaction along three dimensions:
incremental algorithm, step-based problem formulation, and feedback-based
intent refinement. We then illustrate the effectiveness of each of these forms
of interactivity with respect to synthesis performance and correctness on a set
of real-world case studies.
