Program synthesis is an automated technique to infer programs in a domain-specific programming language (DSL) as per a specification provided by the user. Though it has been studied for many decades, it has only recently started becoming a mainstream tool to solve several tasks, due to advancements in search techniques and solver technology. Synthesis techniques typically generate a set of candidate programs by searching the program space for programs that satisfy the given specification and selects the best program among the candidates based on an optimization criterion. If the specification is complete, then the generated program is exact. However, if the specification is partial such as input/output examples, the users may get a desirable program after a few iterations by refining the specifications and re-synthesizing the program.
Program synthesis has been successfully applied to automate data wrangling tasks such data extraction, transformation, cleansing, and software engineering tasks such as inferring program invariants, program and database refactoring, program repair etc. Recently, program synthesis has been used in conjunction with NLP techniques in order to extract domain specific entities from text documents.
Building a synthesizer requires identifying a suitable specification mechanism, a DSL to restrict the program search space, the program search algorithm, and an ambiguity resolution procedure to select an optimal program from the candidates. Hence designing and developing a synthesizer is a non-trivial activity without the help of a suitable tool set and expert knowledge. As a result it is yet to become a mainstream technique for software construction and maintenance.
The objective of this workshop is to address the key issues in the application of program synthesis techniques and tools to solve software engineering tasks by software practitioners.
Workshop goals :
Provide a venue to discuss various issues in adopting program synthesis as a mainstream tool in the software industry.
Enable participants to share their experience with program synthesis to automate software engineering tasks.
To share various tools and techniques and the class of problems that they can effectively address.
To discuss future research directions in the program synthesis space including its adoption in the software engineering lifecycle.
Indicative list of topics
Program Synthesis Applications
Tools and Techniques
Innovative application of Program synthesis and Machine Learning
The workshop will be organized into two sessions.