We use the term program synthesis to refer to the development of a program or a digital design from a set of desired properties. These properties can be described in various ways, e.g., by a set of logical formulas or a mathematical model, by another program that is written in a more abstract programming language. Synthesis is the counterpart to program analysis, which tries to extract a set of properties or a model from a given program or digital design, or program verification, which tries to establish a relationship between a set of properties and the given program or circuit. The set of desired properties are usually called the specification of the system and the constructed system is referred as the implementation of the specification.
Techniques related to synthesis:
In the following we will focus on synthesis from logical specifications.
Motivation. A solution to this problem would allow augmenting the current programming style, which is mostly imperative, with a declarative, logical style. This is particularly beneficial for systems in which concurrency plays an important role.
In this area approaches can be split into three groups:
Logic programming, in the narrower sense in which it is more commonly understood, refers to Prolog-like programming languages, which uses logic as both a declarative and procedural representation language. Logic programming is based on the fact that the way in which backward-reasoning theorem-provers handle an implication A1 ∧ … ∧ An → G can be viewed as a program that shows G by showing A1,…, and An first. This way declarative programs are executed following a fixed strategy, and only those solutions computable by this strategy are found. This is in contrast to algorithmic program synthesis techniques that are guaranteed to find all solutions.
Constraint logic programming is a form of constraint programming, in which logic programming is extended to include concepts from constraint satisfaction.
Logic programming, in the broader sense, or sometimes called logic program synthesis refers to the systematic development of programs based on guided theory-proofing techniques. It starts from specification in first or higher order logic and uses a semi-automated way of refinement to derive the program. Refinement steps are initiated by user providing a tactic or a design principle (e.g., divide and conquer principle). Then, the underlying theorem prover automatically perform the refinement step.
Conferences
Surveys
Prominent Systems
Algorithmic program synthesis refers to a set of automated synthesis techniques that are based on decision procedures. Each of them targets a particular class of specifications and generates a program within a predefined set of programs. For instance, two recently developed decision procedures1) 2) for realizability of Linear-time Temporal Logic (LTL) have led to the development of new tools 3) 4) 5) 6) 7) 8) 9) and algorithms10) 11) 12), that synthesize reactive finite-state programs from LTL specifications. Some of these tools are able to synthesize small but realistic industrial hardware modules from their logical specifications13) 14) 15). Other techniques were designed to simplify specific programming tasks by adding new programming constructs, e.g., synchronization mechanism for concurrent data structures16) 17) deadlock avoidance constructs 18) 19) or allowing implicit computation of values and advanced pattern matching20). Synthesis techniques are also used to correct 21) or optimize22) existing programs and to build programs from a fixed set of library components or program statements 23) 24) 25) 26) 27).
Like in program verification, there are two main directions in algorithmic program synthesis: control-oriented and data-oriented synthesis techniques. Control-oriented techniques (e.g., used to construct digital designs or synchronization in concurrent programs) assume finite-state data structures (or finite-state abstractions) but can generate interactive (non-terminating) programs (called reactive systems). Input specifications describes the desired sequences of behaviors using a temporal logic (e.g., LTL). These techniques are based on automata theory on infinite words and automata-based game theory. Data-oriented techniques assume a bounded length of the program but can cope with infinite-state data structures or abstractions. They start from an input-output relation given by a formula in a realizable logic, e.g., integer arithmetic or propositional logic, and construct source code satisfying the specification. In some cases, the class of generated program is restricted by the set of available statements or an initial incomplete program.
Application | Input | Output | Main Techniques | Restrictions | Contact person |
Full program construction | LTL | FSM (dot) | CoBuchi-tree automata, Anti-chains | Spec size, finite-state systems | J.F. Raskin, ULB |
Full program construction | LTL-subset (Streett-1) | Circuits (Verilog) | GR1-games, BDDs | Finite-state systems | R. Bloem, TU Graz |
Full program construction | LTL-subset (Streett-1) | FSM (?) | GR1-games, BDDs | Finite-state systems | Y. Saar, Weizman Institute |
Program Repair | LTL-subset (LTL-det) | Programs (Verilog) | Buchi-games, BDDs | Finite-state systems | B. Jobstmann, Verimag |
Full program construction | FOL + tactics | Program (?) | Theorem proofing | requires interaction | D. Smith |
Synchronization mechanism | E. Yahav | ||||
S. Gulwani | |||||
S. Chandra | |||||
V. Kuncak | |||||
Program Sketching | R. Bodik | ||||
Deadlock avoidance mechanism | Y. Wang | ||||
B. Finkbeiner |
Dagstuhl Talks
Program Sketching | Rastislav Bodik, UC Berkeley |
Satish Chandra, IBM TJ Watson Research Center | |
Synthesizing Verifiers for Synthesized Code | Ewen W. Denney, NASA |
CEGAR for Synthesis | Bernd Finkbeiner, Universität des Saarlandes |
Dimensions in Program Synthesis | Sumit Gulwani, Microsoft Research |
Component based Synthesis | Sumit Gulwani, Microsoft Research |
? | Shachar Itzhaky, Tel Aviv University |
Synthesis of Communicating Automata from MSCs | Joost-Pieter Katoen, RWTH Aachen |
Efficient Synthesis of Asynchronous Systems | Uri Klein, Courant Institute - New York |
Synthesis Procedures | Viktor Kuncak, EPFL |
Synthesis as Learning Automata from Examples | Martin Leucker, TU München |
Systematic Program Design: From Clarity to Efficiency | Yanhong Annie Liu, SUNY - Stony Brook |
Synthesizing programs using model checking based genetic programming | Doron A. Peled, Bar-Ilan University |
Synchronous Reactive Synthesis From Linear Temporal Logic Specifications | Nir Piterman, Imperial College London |
Synthesizing Hardware from Sketches | Andreas Raabe, TU München |
Software Synthesis is Hard – and Simple | Sven Schewe, University of Liverpool |
Data Mining of Air Traffic Track Data for NGATS with the AutoBayes Synthesis System | Johann M. Schumann, NASA |
Mechanized Algorithm Design | Douglas R. Smith, Kestrel Institute |
New directions in Computer Supported Programming | Armando Solar-Lezama, MIT |
Program Synthesis using SMT Solvers | Saurabh Srivastava, University of Maryland |
Synthesis of Concurrent Algorithms | Martin T. Vechev, IBM TJ Watson Research Center |
Recursive Plans and Imperative Programs Revisited: Deductive Synthesis | Richard Waldinger, SRI |
Abstraction-Guided Synthesis of Synchronization | Eran Yahav, IBM TJ Watson Research Center |
Inferring Synchronization under Limited Observability | Greta Yorsh, IBM TJ Watson Research Center |