{"id":19526523,"url":"https://github.com/philzook58/egglog0","last_synced_at":"2025-04-26T10:31:16.008Z","repository":{"id":53212195,"uuid":"388216090","full_name":"philzook58/egglog0","owner":"philzook58","description":"Datalog + Egg = Good","archived":false,"fork":false,"pushed_at":"2023-05-31T19:09:56.000Z","size":493,"stargazers_count":66,"open_issues_count":1,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-04T11:36:53.658Z","etag":null,"topics":["prolog","rust","theorem-prover"],"latest_commit_sha":null,"homepage":"http://www.philipzucker.com/egglog0/","language":"Rust","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/philzook58.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}},"created_at":"2021-07-21T18:52:07.000Z","updated_at":"2025-03-02T18:00:59.000Z","dependencies_parsed_at":"2022-09-15T01:11:20.004Z","dependency_job_id":null,"html_url":"https://github.com/philzook58/egglog0","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philzook58%2Fegglog0","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philzook58%2Fegglog0/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philzook58%2Fegglog0/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philzook58%2Fegglog0/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/philzook58","download_url":"https://codeload.github.com/philzook58/egglog0/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250972755,"owners_count":21516420,"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":["prolog","rust","theorem-prover"],"created_at":"2024-11-11T01:10:29.986Z","updated_at":"2025-04-26T10:31:15.712Z","avatar_url":"https://github.com/philzook58.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"Defunct repo: Please see https://github.com/egraphs-good/egglog \n\n\n# egglog0\n\nUsing the [egg](https://egraphs-good.github.io/) library with a file format and semantics similar to datalog.\n\nShort talk proposal paper for EGRAPHS 2022 \u003chttps://github.com/philzook58/egglog0-talk/blob/main/out.pdf\u003e\n\nExplanatory blog posts: \n- \u003chttps://www.philipzucker.com/egglog-checkpoint/\u003e\n- \u003chttps://www.philipzucker.com/egglog2-monic/\u003e\n## Try It Online!!!\n\n\u003chttp://www.philipzucker.com/egglog/\u003e\n\n## Building\n\nTo run on a file locally:\n`cargo run --release tests/examples.pl`\n\nTo build the wasm library:\n`wasm-pack build --target web`\n\nNote: I started modifying egg a bit. I exposed the Subst datatypes field.\n\n## Ideas\n\n\n- [x] MultiApplier could be useful / efficient\n- [ ] Using Conditional Equals could be useful if all variables known\n- [ ] But really getting patterns to compile with substituion pieces considered known subsumes this optimization I think in modern egg with yihong's optimization.\n- [ ] Sanity checks that needed variables exist would be good. when it does crash it names rules, so that's something.\n- [ ] May want to run Runner multiple times since it may not get restarted. Currently I have that vec![0] hack\n- [ ] _ for dummy variables\n- [ ] The ability to check to see if something is in the egraph.\n- [ ] graphviz dumping the egraph. graphviz wasm?\n- [ ] harrop formula\n- [ ] merge_subst that doesn't copy?\n- [ ] Give rules names. Keep a hash table of them?\n- [x] Queries with variables\n- [x] Queries should be conjunctions\n- [X] a REPL would be sweet. especially if we have higher order rules, we could watch the database, add queries\n- [ ] termination based on the query condition\n- [ ] side effectful searchers and appliers (printing mostly), functions.\n- [ ] Astsize with weighting? Does that get me anywhere?\n- [ ] infix operators\n- [ ] better printers\n- [ ] rewrite/proof files that allow intermediate queriess. set of support?\n- [x] cli\n- [ ] smtlib subset (forall (a b ) (= (f a) (g c))  ) ! :pattern) or horn cluase style.\n- [ ] vaguely ML/coq style synax\n- [ ] tptp syntax?\n- [ ] push pop directives instead of clear.\n- [ ] only allow stuff that compresses the egraph? Appliers that do not add terms to the egraph or only add a couple? Or keeps counts.\n- [ ] directives to changes egraph params. or flags?\n- [ ] Macros/simplification stage?\n- [ ] typed symbollang - would this even be an optimization?\n- [ ] defunctionalization of lambdas. lambda-egglog\n- [ ] backchain until stumped? depth limitted backchain?\n- [ ] hashlog - experiment with same thing but on hashcons instead of egraph. Easier to understand semi naive?\n- [ ] epeg extraction\n- [ ] faster multipattern via compilation\n- [ ] integerate analysis?\n- [ ] gensym\n- [ ] serialize the egraph\n- [ ] negation checks. nonlogical\n- [ ] cli options to the runner\n\n### Tests\n\n`cram tests/cram/*.t -i`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilzook58%2Fegglog0","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphilzook58%2Fegglog0","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilzook58%2Fegglog0/lists"}