{"id":13748690,"url":"https://github.com/jayelm/satyrs","last_synced_at":"2026-01-23T18:20:35.592Z","repository":{"id":79278328,"uuid":"56866630","full_name":"jayelm/satyrs","owner":"jayelm","description":"A DPLL SAT solver written in pure Rust","archived":false,"fork":false,"pushed_at":"2016-05-26T20:43:37.000Z","size":544,"stargazers_count":2,"open_issues_count":4,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-05-22T19:32:31.247Z","etag":null,"topics":["rust","sat-solver"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/jayelm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-04-22T15:42:54.000Z","updated_at":"2024-01-15T15:43:52.000Z","dependencies_parsed_at":"2023-06-13T17:06:38.202Z","dependency_job_id":null,"html_url":"https://github.com/jayelm/satyrs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jayelm%2Fsatyrs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jayelm%2Fsatyrs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jayelm%2Fsatyrs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jayelm%2Fsatyrs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jayelm","download_url":"https://codeload.github.com/jayelm/satyrs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253240350,"owners_count":21876593,"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":["rust","sat-solver"],"created_at":"2024-08-03T07:00:47.509Z","updated_at":"2026-01-23T18:20:35.579Z","avatar_url":"https://github.com/jayelm.png","language":"Rust","funding_links":[],"categories":["Projects"],"sub_categories":["Provers and Solvers"],"readme":"# satyrs\n\n![Satyr Logo](logo.png)\n\nThe sexiest SAT solver out there.\n\n## Usage\n\n- Download the ZIP or Clone this repository\n- Supply a valid CNF file (DIMACS format)\n\nRun `cargo build` with optional `--release` flag and use `cargo run` or the\nfollowing command:\n\n    target/{debug,release}/satyrs \u003cfile.cnf\u003e\n\nRepository comes many test files of various lengths, poke around for details.\n\nCurrently, two heuristics are implemented: one-sided Jeroslow-Wang and random\nselection. We don't currently have functionality to switch between these two\nusing the command-line; instead, just replace the call to `let lit =\njw(\u0026_cnf)` in `dpll.rs` with `random`.\n\n## Does it work?\n\nYes! At least, on the problems that we've tested. If you find something that\ndoesn't work, do let us know.\n\n## Is it fast?\n\nNo! In fact, it's slow enough to be absolutely impractical except as an\neducational introduction to DPLL and Rust (which this was). There are a couple\nof times where, due to our lack of experience, were unable to figure out a fast\nway of implementing certain operations that complied with Rust's borrow\nchecker, and thus settled for ugly and slow workarounds including unnecessary\ncopying.\n\nHere's a table of benchmarks on some selected CNF problems. As you can see, JW is\nhighly more efficient than random selection, but the runtime of our algorithm\nin general blows up very quickly to the point where we lost patience with\nrandom selection on the last problem. For those interested, `timing.py` can\ngenerate these statistics.\n\n| CNF          | Variables | Clauses | Satisfiable? | Mean JW Runtime (sd) | Mean Rand Runtime (sd) |\n|--------------|-----------|---------|--------------|----------------------|------------------------|\n| test.cnf     | 3         | 3       | Yes          | 0.01 (0.02)          | 0.00 (0.00)            |\n| cascade.cnf  | 4         | 4       | Yes          | 0.00 (0.00)          | 0.00 (0.00)            |\n| quinn.cnf    | 16        | 18      | Yes          | 0.00 (0.00)          | 0.00 (0.00)            |\n| medium.cnf   | 50        | 80      | Yes          | 1.40 (1.17)          | 3.07 (2.13)            |\n| hole6.cnf    | 42        | 133     | No           | 0.12 (0.0)           | 0.94 (0.02)            |\n| hole7.cnf    | 56        | 204     | No           | 1.16 (0.25)          | 6.86 (0.31)            |\n| uf250-01.cnf | 250       | 1065    | Yes          | 10.82 (NA)           | DNF                    |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjayelm%2Fsatyrs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjayelm%2Fsatyrs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjayelm%2Fsatyrs/lists"}