Skip to content

Recursive Program Synthesis using input-output examples

Notifications You must be signed in to change notification settings

MrVPlusOne/Escher-Scala

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Escher-Scala

Example-Driven Recursive Program Synthesis


This repository contains the source code of this thesis Oracle-free Synthesis of Recursive Programs.

The codebase implements two algorithms: TypedEscher and AscendRec

TypedEscher is a Scala implementation of the Escher algorithm, described in this paper Recursive Program Synthesis(CAV'13), with the addition of a polymorphic static type system and other type-related optimizations to improve searching efficiency.

AscendRec is a new algorithm based on TypedEscher, but unlike TypedEscher, which requires the user to provide additional input-output examples during synthesis, AscendRec dose not need any additional examples to work.


How to use the source code

Simply download or clone this project and run sbt from within the root directory.

To compile and run the benchmark suits, use sbt run and choose RunTypedEscher or RunAscendRec as the Main Class.

Results taken from the thesis.

See full output logs in result_TypedEscher.txt and result_AscendRec.txt

summery

summery

Some Synthesized Programs(TypedEscher):

  • Duplicate each element of a list

stutter

  • Cartesian product of two lists

cartesian product

  • Square of naturals

square list

  • Remove adjacent duplicates in a list

compress

  • Remove all duplicates in a list (synthesized without using additional components)

dedup

About

Recursive Program Synthesis using input-output examples

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages