An open API service indexing awesome lists of open source software.

https://github.com/mrvplusone/escher-scala

Recursive Program Synthesis using input-output examples
https://github.com/mrvplusone/escher-scala

automated-programming program-synthesis programming-by-example

Last synced: 10 months ago
JSON representation

Recursive Program Synthesis using input-output examples

Awesome Lists containing this project

README

          

# Escher-Scala
Example-Driven Recursive Program Synthesis


This repository contains the source code of this thesis [Oracle-free Synthesis of Recursive Programs](documentation/AscendRec-en.pdf).

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)](https://www.microsoft.com/en-us/research/publication/recursive-program-synthesis/), 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](http://www.scala-sbt.org) 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](documentation/AscendRec-en.pdf).

See full output logs in [result_TypedEscher.txt](documentation/text_results/result_TypedEscher.txt) and [result_AscendRec.txt](documentation/text_results/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