{"id":17898744,"url":"https://github.com/mrvplusone/escher-scala","last_synced_at":"2025-08-20T09:09:58.138Z","repository":{"id":132435873,"uuid":"86971980","full_name":"MrVPlusOne/Escher-Scala","owner":"MrVPlusOne","description":"Recursive Program Synthesis using input-output examples","archived":false,"fork":false,"pushed_at":"2017-05-25T06:10:20.000Z","size":3730,"stargazers_count":7,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-04T14:51:13.441Z","etag":null,"topics":["automated-programming","program-synthesis","programming-by-example"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MrVPlusOne.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-02T08:02:28.000Z","updated_at":"2020-10-12T07:15:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"c7cb8760-d8d4-4a33-9f78-f92246c1c50f","html_url":"https://github.com/MrVPlusOne/Escher-Scala","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MrVPlusOne/Escher-Scala","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrVPlusOne%2FEscher-Scala","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrVPlusOne%2FEscher-Scala/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrVPlusOne%2FEscher-Scala/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrVPlusOne%2FEscher-Scala/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MrVPlusOne","download_url":"https://codeload.github.com/MrVPlusOne/Escher-Scala/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrVPlusOne%2FEscher-Scala/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262056473,"owners_count":23251679,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automated-programming","program-synthesis","programming-by-example"],"created_at":"2024-10-28T15:38:48.118Z","updated_at":"2025-06-26T11:33:53.337Z","avatar_url":"https://github.com/MrVPlusOne.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Escher-Scala\nExample-Driven Recursive Program Synthesis\n\u003chr\u003e\n\nThis repository contains the source code of this thesis [Oracle-free Synthesis of Recursive Programs](documentation/AscendRec-en.pdf).\n\nThe codebase implements two algorithms: **TypedEscher** and **AscendRec**\n\n**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.\n\n**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.\n\n\u003cbr\u003e\n\n### How to use the source code\nSimply download or clone this project and run [sbt](http://www.scala-sbt.org) from within the root directory.\n\nTo compile and run the benchmark suits, use `sbt run` and choose `RunTypedEscher` or `RunAscendRec` as the Main Class.\n\n### Results taken from the [thesis](documentation/AscendRec-en.pdf).\n\nSee full output logs in [result_TypedEscher.txt](documentation/text_results/result_TypedEscher.txt) and [result_AscendRec.txt](documentation/text_results/result_AscendRec.txt)\n\n \u003cimg src=\"documentation/TypedEscherResults.png\" width=\"660px\" alt=\"summery\"/\u003e\n\n \u003cimg src=\"documentation/AscendRecResults.png\" width=\"660px\" alt=\"summery\"/\u003e\n\n\n### Some Synthesized Programs(TypedEscher):\n\n\n- Duplicate each element of a list\n\n\u003cimg src=\"documentation/Stutter.png\" width=\"600px\" alt=\"stutter\"/\u003e\n\n- Cartesian product of two lists\n\n\u003cimg src=\"documentation/cartesian.png\" width=\"600px\" alt=\"cartesian product\"/\u003e\n\n- Square of naturals\n\n\u003cimg src=\"documentation/squareList.png\" width=\"600px\" alt=\"square list\"/\u003e\n\n- Remove adjacent duplicates in a list\n\n\u003cimg src=\"documentation/compress.png\" width=\"600px\" alt=\"compress\"/\u003e\n\n- Remove all duplicates in a list (synthesized without using additional components)\n\n\u003cimg src=\"documentation/dedup.png\" width=\"600px\" alt=\"dedup\"/\u003e\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrvplusone%2Fescher-scala","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrvplusone%2Fescher-scala","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrvplusone%2Fescher-scala/lists"}