Introduction
Program synthesis is the task of automatically discovering an executable piece of code given user intent expressed using various forms of constraints such as input-output examples, demonstrations, natural language, etc. Program synthesis has direct applications for various classes of users in the technology pyramid:
| Application | Target User | User Intent | Search Technique |
|---|---|---|---|
| String Transformations [POPL 2011, VLDB 2012, CACM 2012] | End-users | Examples | Version Space Algebra |
| Number Transformations [CAV 2012] | End-users | Examples | Version Space Algebra |
| Table Transformations [PLDI 2011] | End-users | Examples | Version Space Algebra |
| Geometry Drawings [CHI 2012] | End-users | Sketch | Deductive reasoning |
| Geometry Solution Generation [PLDI 2011] | Students/Teachers | Logic | Numerical Methods + A* style goal directed search |
| Algebra Problem Generation [AAAI 2012] | Students/Teachers | Examples | Random Testing |
| API Discovery and Code Completion [PLDI 2012] | Software Developers | Partial Expression | Type-based search and ranking |
| Program Inverses [PLDI 2011] | Software Developers | Templates | PathTesting-based synthesis + SMT solvers |
| Bit-vector Algorithms [PLDI 2011, ICSE 2010] | Algorithm Designers | (Logic or Examples) + Components | SMT solvers |
| Graph Algorithms [OOPSLA 2010] | Algorithm Designers | Logic | Inductive Learning + SAT solvers |
| Undergraduate Textbook Algorithms [POPL 2010] | Algorithm Designers | Logic + Templates | Invariant-based synthesis + SMT solvers |
| Embedded Systems [ICCPS 2010, VMCAI 2009] | System Designers | Logic + Templates | (Inductive Learning + Numerical Methods) or SMT Solvers |