Program extrapolation with jennisys

The desired behavior of a program can be described using an abstract model. Compiling such a model into executable code requires advanced compilation techniques known as synthesis. This paper presents an object-based language, called Jennisys, where programming is done by introducing an abstract model, defining a concrete data representation for the model, and then being aided by automatic synthesis to produce executable code. The paper also presents a synthesis technique for the language. The technique is built on an automatic program verifier that, via an underlying SMT solver, is capable of providing concrete models to failed verifications. The technique proceeds by obtaining sample input/output values from concrete models and then extrapolating programs from the sample points. The synthesis aims to produce code with assignments, branching structure, and possibly recursive calls. It is the first to synthesize code that creates and uses objects in dynamic data structures or aggregate objects. A prototype of the language and synthesis technique has been implemented.

[1]  Roy Goldfinger The IBM type 705 autocoder , 1956, AIEE-IRE '56 (Western).

[2]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[3]  Dawson R. Engler,et al.  EXE: automatically generating inputs of death , 2006, CCS '06.

[4]  Bor-Yuh Evan Chang,et al.  Boogie: A Modular Reusable Verifier for Object-Oriented Programs , 2005, FMCO.

[5]  Rodney J. Douglas KIDS: A Semi-Automatic Program Development System , 1990 .

[6]  Edmond Schonberg,et al.  Programming with Sets: An Introduction to SETL , 1986 .

[7]  Jean-Raymond Abrial,et al.  Modeling in event-b - system and software engineering by Jean-Raymond Abrial , 2010, SOEN.

[8]  Ralph-Johan Back,et al.  Refinement Calculus: A Systematic Introduction , 1998 .

[9]  C. Cordell Green The design of the PSI program synthesis system , 1976, ICSE '76.

[10]  C. Cordell Green,et al.  Application of Theorem Proving to Problem Solving , 1969, IJCAI.

[11]  K. Rustan M. Leino,et al.  Dafny: An Automatic Program Verifier for Functional Correctness , 2010, LPAR.

[12]  John C. Reynolds,et al.  Separation logic: a logic for shared mutable data structures , 2002, Proceedings 17th Annual IEEE Symposium on Logic in Computer Science.

[13]  编程语言 Query by Example , 2010, Encyclopedia of Database Systems.

[14]  Douglas R. Smith,et al.  KIDS: A Semiautomatic Program Development System , 1990, IEEE Trans. Software Eng..

[15]  Zohar Manna,et al.  Towards automatic program synthesis , 1971, Symposium on Semantics of Algorithmic Languages.

[16]  Cliff B. Jones,et al.  Systematic software development using VDM , 1986, Prentice Hall International Series in Computer Science.

[17]  Thomas E. Cheatham,et al.  Software Technology in the 1990's: Using a New Paradigm , 1983, Computer.

[18]  Rishabh Singh,et al.  Synthesizing data structure manipulations from storyboards , 2011, ESEC/FSE '11.

[19]  簡聰富,et al.  物件導向軟體之架構(Object-Oriented Software Construction)探討 , 1989 .

[20]  Phillip D. Summers,et al.  A Methodology for LISP Program Construction from Examples , 1977, J. ACM.

[21]  Sumit Gulwani,et al.  Synthesis of loop-free programs , 2011, PLDI '11.

[22]  Richard C. Waters,et al.  The programmer's apprentice , 1990, ACM Press frontier series.

[23]  Derek Rayside,et al.  Unifying execution of imperative and declarative code , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[24]  Sumit Gulwani,et al.  Spreadsheet table transformations from examples , 2011, PLDI '11.

[25]  Ruzica Piskac,et al.  Complete functional synthesis , 2010, PLDI '10.

[26]  Sumit Gulwani,et al.  Path-based inductive synthesis for program inversion , 2011, PLDI '11.

[27]  Sanjit A. Seshia,et al.  Combinatorial sketching for finite programs , 2006, ASPLOS XII.

[28]  Sumit Gulwani,et al.  Oracle-guided component-based program synthesis , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[29]  Bruno Marre,et al.  PathCrawler: Automatic Generation of Path Tests by Combining Static and Dynamic Analysis , 2005, EDCC.

[30]  Koushik Sen,et al.  CUTE: a concolic unit testing engine for C , 2005, ESEC/FSE-13.

[31]  Michael D. Ernst,et al.  An overview of JML tools and applications , 2003, International Journal on Software Tools for Technology Transfer.

[32]  Todd D. Millstein,et al.  Falling Back on Executable Specifications , 2010, ECOOP.

[33]  Zohar Manna,et al.  Toward automatic program synthesis , 1971, Symposium on Semantics of Algorithmic Languages.

[34]  Richard C. Waters,et al.  The Programmer's Apprentice: a research overview , 1988, Computer.

[35]  Rosemary Monahan Data Refinement in Object-Oriented Verification , 2010 .