{"id":13574977,"url":"https://github.com/HarvardPL/formulog","last_synced_at":"2025-04-04T19:30:27.277Z","repository":{"id":45074591,"uuid":"182265902","full_name":"HarvardPL/formulog","owner":"HarvardPL","description":"Datalog with support for SMT queries and first-order functional programming","archived":false,"fork":false,"pushed_at":"2024-10-29T15:31:31.000Z","size":3079,"stargazers_count":153,"open_issues_count":7,"forks_count":10,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-11-05T10:45:16.197Z","etag":null,"topics":["datalog","logic-programming","smt","static-analysis","symbolic-execution"],"latest_commit_sha":null,"homepage":"https://harvardpl.github.io/formulog/","language":"Java","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/HarvardPL.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE.txt","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":"2019-04-19T13:05:43.000Z","updated_at":"2024-11-04T23:43:42.000Z","dependencies_parsed_at":"2024-08-26T08:11:21.310Z","dependency_job_id":"115e5ca5-028d-457f-a329-c751d5be6610","html_url":"https://github.com/HarvardPL/formulog","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarvardPL%2Fformulog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarvardPL%2Fformulog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarvardPL%2Fformulog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarvardPL%2Fformulog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HarvardPL","download_url":"https://codeload.github.com/HarvardPL/formulog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247237606,"owners_count":20906314,"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":["datalog","logic-programming","smt","static-analysis","symbolic-execution"],"created_at":"2024-08-01T15:00:57.179Z","updated_at":"2025-04-04T19:30:27.271Z","avatar_url":"https://github.com/HarvardPL.png","language":"Java","funding_links":[],"categories":["Table of Contents","人工智能"],"sub_categories":["Tools and Development"],"readme":"# Formulog\n\n![Build Status](https://github.com/HarvardPL/formulog/actions/workflows/maven.yml/badge.svg)\n\n**TL;DR: write SMT-based program analyses (symbolic executors, refinement type checkers, etc.) in an optimized Datalog-like language.**\n\nDatalog has proven to be a useful language for implementing a range of program analyses, but analyses that use SMT solving cannot be easily written in traditional versions of Datalog.\nFormulog sets out to fill this gap by augmenting Datalog with ways to construct and reason about SMT formulas, as well as some first-order functional programming to make life easier.\n\n**Why write your SMT-based analysis in Formulog?**\n\n1. By combining logic programming, functional programming, and SMT solving, Formulog makes it possible to encode many analyses declaratively at the level of mathematical specification (e.g., inference rules), closing the gap between specification and implementation---and often revealing bugs in the spec!\n2. This high-level encoding makes it possible for Formulog to apply high-level optimizations to your analysis, like automatic parallelization and goal-directed evaluation.\n3. Thanks to our [Formulog-to-Soufflé compiler](https://harvardpl.github.io/formulog/eval_modes/compile.html), you can automatically generate a C++ version of the analysis that leverages highly optimized Datalog algorithms and data structures.\n\n**Interested?**\nFor more information, check out the [Formulog docs](https://harvardpl.github.io/formulog/) (also available in the [docs](./docs/) directory), including [tips on getting started](https://harvardpl.github.io/formulog/starting.html) and the [language reference](https://harvardpl.github.io/formulog/lang_ref/).\nTo get a sense for what's involved in building a nontrivial SMT-based analysis in Formulog,\ncheck out our [tutorial](https://harvardpl.github.io/formulog/tutorial/) on implementing a refinement type checker in Formulog.\n\n## Contributing\n\nContributions to this project are most welcome!\nPlease open a [GitHub issue](https://github.com/HarvardPL/formulog/issues/new) and then link a pull request to it.\nPull requests must be in the [Google Java format](https://github.com/google/google-java-format) before being merged.\nTo reformat your code, run `mvn spotless:apply`; you can also check if your code is conformant (without reformatting it) by running `mvn spotless:check`.\n\n## Licensing and Third-Party Libraries\n\nFormulog is released under an [Apache 2.0 license](./LICENSE.txt).\n\nThis project uses third-party libraries. You can generate a list of these\nlibraries and download their associated licenses with this command:\n\n```\nmvn license:download-licenses\n```\n\nThe generated content can be found in the `target/generated-resources/`\ndirectory.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHarvardPL%2Fformulog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHarvardPL%2Fformulog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHarvardPL%2Fformulog/lists"}