{"id":16613166,"url":"https://github.com/c-cube/mc2","last_synced_at":"2025-03-21T14:31:15.983Z","repository":{"id":144717188,"uuid":"102100532","full_name":"c-cube/mc2","owner":"c-cube","description":"[research] A modular SMT solver in OCaml, based on mcSAT","archived":false,"fork":false,"pushed_at":"2024-01-01T02:25:45.000Z","size":9523,"stargazers_count":39,"open_issues_count":2,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-16T00:14:43.278Z","etag":null,"topics":["formal-methods","mcsat","ocaml","prover","smt"],"latest_commit_sha":null,"homepage":"https://c-cube.github.io/mc2/","language":"SMT","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/c-cube.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-01T10:06:34.000Z","updated_at":"2024-04-30T03:44:01.000Z","dependencies_parsed_at":"2024-01-01T03:25:07.855Z","dependency_job_id":"253c7fec-4ea2-4d73-ac91-bc9b2de9aca2","html_url":"https://github.com/c-cube/mc2","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-cube%2Fmc2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-cube%2Fmc2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-cube%2Fmc2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-cube%2Fmc2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/c-cube","download_url":"https://codeload.github.com/c-cube/mc2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244815149,"owners_count":20514901,"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":["formal-methods","mcsat","ocaml","prover","smt"],"created_at":"2024-10-12T01:46:16.316Z","updated_at":"2025-03-21T14:31:15.977Z","avatar_url":"https://github.com/c-cube.png","language":"SMT","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MC2  [![build](https://github.com/c-cube/mc2/actions/workflows/main.yml/badge.svg)](https://github.com/c-cube/mc2/actions/workflows/main.yml)\n\nMC² (\"Model Constructing Modular Contraption\") is a modular SMT solver\nin OCaml, based on the MCSat calculus.\n\nIt implements most of the techniques described in de Moura and Jovanović\n(VMCAI 13), in around 7 thousands lines of code (not including dependencies).\nEUF is supported via congruence lemmas; LRA is based on a conflict-driven\nFourier-Motzkin solver. Boolean formulas are turned into clauses during preprocessing,\nusing the Tseitin encoding; the core solver handles clauses like a regular SAT\nsolver, as the code was originally derived from\nmsat (github.com/Gbury/mSAT), itself derived from Alt-Ergo Zero.\nHowever most of the code was modified or rewritten by Simon Cruanes while\nworking at Veridis at Loria, Nancy, France; and later in his own free time.\n\n## Documentation\n\nhttps://c-cube.github.io/mc2/\n\n## Short Summary\n\nMC² is a [SMT solver](https://en.wikipedia.org/wiki/Satisfiability_modulo_theories).\nSMT solvers are automatic tools that try to assess whether a given logic\nformula is *satisfiable* (admits a model, an interpretation that makes it true)\nor *unsatisfiable* (no interpretation can make it true; it is absurd, and its\nnegation is a theorem).\nProminent solvers include [Z3](https://github.com/Z3Prover/z3),\n[cvc5](https://cvc5.github.io/), [Yices 2](https://github.com/SRI-CSL/yices2/),\nand others; all of them follow the **CDCL(T)** paradigm.\nMost of these solvers are implemented in C or C++.\n\nIn contract, MC² is based on the **mcSAT** calculus\n(see\n[[fmcad'13]](http://csl.sri.com/~dejan/papers/jovanovic-fmcad2013.pdf)\nand\n[[vmcai'13]](http://www.csl.sri.com/users/dejan/papers/mcsat-vmcai2013.pdf)).\nmcSAT is fundamentally different from CDCL(T);\nit is a so-called _natural SMT_ calculus where the boolean reasoning of CDCL is\nextended so as to be able to assign values to non-boolean variables (such as\nlinear arithmetic variables, for example).\nAs a calculus it can be considered stronger, in some sense, because it can have\nshorter proofs by virtue of being allowed to introduce new terms during the proof\nsearch.\nOn the other hand, mcSAT is not as well known or battle tested as CDCL(T).\nMC² started as an experiment to try and reproduce some results from vmcai'13.\n\n\n## COPYRIGHT\n\nThis program is distributed under the Apache Software License version\n2.0. See the enclosed file `LICENSE`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc-cube%2Fmc2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fc-cube%2Fmc2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc-cube%2Fmc2/lists"}