{"id":20968482,"url":"https://github.com/jack-q/yasat","last_synced_at":"2026-04-27T10:32:31.753Z","repository":{"id":90232579,"uuid":"74111514","full_name":"Jack-Q/YaSat","owner":"Jack-Q","description":"Yet Another SAT solver","archived":false,"fork":false,"pushed_at":"2017-04-03T08:48:31.000Z","size":679,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-29T05:51:35.659Z","etag":null,"topics":["1uip","dpll","sat","sat-solver"],"latest_commit_sha":null,"homepage":null,"language":"C++","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/Jack-Q.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":"2016-11-18T08:44:47.000Z","updated_at":"2017-03-19T09:39:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"8caef279-26ab-490a-919d-4449b2714121","html_url":"https://github.com/Jack-Q/YaSat","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Jack-Q/YaSat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jack-Q%2FYaSat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jack-Q%2FYaSat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jack-Q%2FYaSat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jack-Q%2FYaSat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Jack-Q","download_url":"https://codeload.github.com/Jack-Q/YaSat/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jack-Q%2FYaSat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32333196,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["1uip","dpll","sat","sat-solver"],"created_at":"2024-11-19T03:13:15.286Z","updated_at":"2026-04-27T10:32:31.720Z","avatar_url":"https://github.com/Jack-Q.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# YaSat -- Yet Another SAT solver\n\n[![Build Status](https://travis-ci.org/Jack-Q/YaSat.svg?branch=master)](https://travis-ci.org/Jack-Q/YaSat)\n\n\u003e YaSat is yet another SAT solver.\n\nA SAT solver is a program that try to solve the satisfiability problem,\nwhich is one of the first proved NP-complete problem.\nThe concept of satisfiability problem is quite simple. Just try to find\nan assignment to a set of boolean variable whit which a boolean expression\ncan be deduced to boolean value true (this is satisfiable) or stating that\nthe boolean expression is impossible to be deduced to boolean true with\nany given set of assignment (this is unsatisfiable).\nGenerally, the SAT solver are try to solve the boolean expression in\nCNF (Conjunctive Normal Form), but it can be proved that any boolean can\nbe converted to such form.\n\nSince most of the decision or design can be divided into a limited number\nof boolean decision, under certain constraints, a well implemented SAT solver\ncan tackle a larger set of practical problem. Currently, SAT solver is the\ncore component of EDA as well as lots of other applications.\n\n## This Implementation\n\nCurrently, this implementation is merely a naive one with limited capability to\nsolve problems with less than 20 variables and 50 clauses.  For some larger\nproblem, the bottle neck is the inefficient memory usage.\n\n## Road map\n\nThe procedure of this implementation is conforming the following stages:\n\n-   [x] Naive implementation constructing solver framework\n-   [x] Novice implementation with heuristic branching (simple)\n-   [x] Boolean constraints propagation feature (DPLL)\n-   [x] 2-literal watching\n-   [x] Conflict driven clause learning (1UIP)\n-   [x] Non-chronological backtracking\n-   [ ] Effective preprocessing\n-   [ ] Random restart\n-   [ ] Parallel\n-   [ ] Optimize memory usage\n-   [ ] Equivalent variable substitution\n-   [ ] Burst of random variable ordering (at initial parse)\n\nCurrently, this project arrives its milestone 2. Following list shows the\nstatus of current implementation progress.\n\n-   [x] 1UIP based conflict driven clause learning\n-   [x] non-chronological backtracking\n-   [ ] random restart (Postponed)\n-   [ ] rewrite message and debug log utility (Postponed)\n-   [x] add more options for command line interface\n-   [x] add statistics during problem solving\n\n## Usage\n\n### Compile\n\n```bash\n# cd to the project directory before compiling\n\n# take default configuration\nmake\n\n# set the option to non-empty value to enable these options\nmake FLAGS_DEBUG=1 FLAGS_COLOR=1             \\\n             FLAGS_VERBOSE=                  \\\n             FLAGS_PRINT_STATIS=1            \\\n             FLAGS_LITERAL_WEIGHT_DECAY=1    \\\n             FLAGS_LITERAL_WEIGHT_UPDATE=1\n\n# test the program with different set of SAT problem\nmake test-sanity\nmake test-tiny\nmake test-crafted  # this cannot finish currently\nmake test-m2-simple\nmake test-m2-hard  # this cannot finish currently\n\n# use the sanity, tiny and m2-simple problems\nmake test\n# use all m2 problems\nmake test-m2\n```\n\nOptions:\n\n-   Debug mode (`FLAGS_DEBUG`)\n-   Color output (`FLAGS_COLOR`)\n-   Verbose message (`FLAGS_VERBOSE`)\n-   Statistical data print (`FLAGS_PRINT_STATIS`)\n-   Literal weight decay feature (`FLAGS_LITERAL_WEIGHT_DECAY`)\n-   Literal weight update on new clause (`FLAGS_LITERAL_WEIGHT_UPDATE`)\n\n### Execution\n\n```bash\n# specify the input file and output file\n./yasat [ input-file | --stdin ] [ output-file | --stdout ]\n\n# print help message\n./yasat --help\n```\n\n## Verifier\n\nIn addition to the solver, this project also contains a handy utility to verify\nwhether the solution given by the solver is valid. Since most satisfiable SAT\nhave no limit to only one solution, and the order of literal in the solution has\nno matter on the correctness of the solution, the general `diff` tools may be\ninadequate for verifying the output of the solver. Thus, the verifier in this\nproject is implemented based on simple checking. This can be found in [verifier](./verifier/) folder\n\n## Resource\n\n-   [CNFgen on GitHub](https://github.com/MassimoLauria/cnfgen):\n    a python toolkit to generate CNF by encoding some kinds of NP problem with specific parameter\n-   [SAT Competition benchmarks](http://baldur.iti.kit.edu/sat-competition-2016/index.php?cat=downloads):\n    benchmark for the SAT Competition\n\n## Reference\n\n-   [\\[MiniSat\\] An extensible SAT-Solver](http://minisat.se/downloads/MiniSat.pdf)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjack-q%2Fyasat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjack-q%2Fyasat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjack-q%2Fyasat/lists"}