{"id":28168762,"url":"https://github.com/aygp-dr/reversible-meta-synthesis","last_synced_at":"2026-01-25T03:02:30.320Z","repository":{"id":285130491,"uuid":"957120517","full_name":"aygp-dr/reversible-meta-synthesis","owner":"aygp-dr","description":"Implementation of reversible meta-interpreter for inductive program synthesis based on Numao and Ma's research","archived":false,"fork":false,"pushed_at":"2025-08-06T13:45:09.000Z","size":230,"stargazers_count":0,"open_issues_count":35,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-31T00:40:24.600Z","etag":null,"topics":["meta-programming","prolog","scheme"],"latest_commit_sha":null,"homepage":"https://www.researchgate.net/publication/2649827_Inductive_Program_Synthesis_by_Using_a_Reversible_Meta-Interpreter","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aygp-dr.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":"2025-03-29T15:53:42.000Z","updated_at":"2025-08-06T13:45:08.000Z","dependencies_parsed_at":"2025-03-29T18:31:41.918Z","dependency_job_id":"39b82eb5-97f8-4ebd-b979-2ebc8d13a67d","html_url":"https://github.com/aygp-dr/reversible-meta-synthesis","commit_stats":null,"previous_names":["aygp-dr/reversible-meta-synthesis"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aygp-dr/reversible-meta-synthesis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aygp-dr%2Freversible-meta-synthesis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aygp-dr%2Freversible-meta-synthesis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aygp-dr%2Freversible-meta-synthesis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aygp-dr%2Freversible-meta-synthesis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aygp-dr","download_url":"https://codeload.github.com/aygp-dr/reversible-meta-synthesis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aygp-dr%2Freversible-meta-synthesis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28742973,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T02:46:29.005Z","status":"ssl_error","status_checked_at":"2026-01-25T02:44:29.968Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["meta-programming","prolog","scheme"],"created_at":"2025-05-15T15:14:10.239Z","updated_at":"2026-01-25T03:02:30.315Z","avatar_url":"https://github.com/aygp-dr.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Reversible Meta-Synthesis\n\nAn implementation of \"Inductive Program Synthesis by Using a Reversible Meta-Interpreter\" by Masayuki Numao and Masamichi Shimura (1990).\n\n## Overview\n\nThis repository implements the concepts from the seminal paper on using reversible meta-interpreters for inductive program synthesis. The key innovations in this approach include:\n\n1. A reversible interpreter that can both execute programs and synthesize them from examples\n2. Explanation-based learning to accelerate program synthesis\n3. Decomposition of explanations based on composability for flexible knowledge transfer\n\n## Implementations\n\nFour implementations are provided:\n- **Prolog**: The original language used in the paper, providing the most faithful implementation\n- **Clojure**: Modern Lisp on the JVM with rich data structures and concurrency support\n- **Hy**: A Lisp dialect embedded in Python, bridging functional and imperative paradigms\n- **Scheme**: A minimalist Lisp implementation focusing on core concepts\n\n## Key Examples\n\nThe repository includes implementations of several examples from the paper:\n- Basic append program synthesis\n- Synthesizing merge3 from app3\n- Synthesizing rzip from zip\n- Synthesizing fullrev from reverse and flatten\n\n## Getting Started\n\n1. Clone this repository\n2. Install the required languages:\n   - **Clojure**: Install [Clojure CLI tools](https://clojure.org/guides/getting_started)\n   - **Hy**: `pip install hy`\n   - **Scheme**: Install [GNU Guile](https://www.gnu.org/software/guile/)\n   - **Prolog**: Install [SWI-Prolog](https://www.swi-prolog.org/) (optional)\n\n3. Test all implementations:\n   ```bash\n   ./test_all.sh\n   ```\n\n4. Or run examples individually:\n   ```bash\n   # Clojure\n   clojure -M:run examples\n   \n   # Hy\n   hy examples/hy/append_example.hy\n   \n   # Scheme\n   guile examples/scheme/append-example.scm\n   \n   # Prolog (if available)\n   swipl -q -t \"test_append, halt\" -f reversible-interpreter.pl\n   ```\n\n## Directory Structure\n\n```\n.\n├── src/                           # Source code\n│   ├── reversible_meta_synthesis/ # Clojure implementation  \n│   ├── hy/                        # Hy implementation\n│   ├── scheme/                    # Scheme implementation\n│   ├── prolog/                    # Prolog implementation\n│   └── api/                       # HTTP API server\n├── examples/                      # Working examples\n│   ├── clojure/\n│   ├── hy/\n│   ├── scheme/\n│   └── prolog/\n├── tests/                         # Test suites\n├── reversible-interpreter.pl      # Standalone Prolog implementation\n└── test_all.sh                   # Test runner for all languages\n```\n\n## References\n\nNumao, M., \u0026 Shimura, M. (1990). Inductive Program Synthesis by Using a Reversible Meta-Interpreter. In M. Bruynooghe (Ed.), Proc. the Second Workshop on Meta-Programming in Logic, pp. 123-136, Leuven, Belgium.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faygp-dr%2Freversible-meta-synthesis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faygp-dr%2Freversible-meta-synthesis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faygp-dr%2Freversible-meta-synthesis/lists"}