{"id":30852708,"url":"https://github.com/rasheedja/propafp","last_synced_at":"2025-09-07T08:07:35.147Z","repository":{"id":41434588,"uuid":"506753757","full_name":"rasheedja/PropaFP","owner":"rasheedja","description":"Auto-active verification of floating-point programs.","archived":false,"fork":false,"pushed_at":"2023-11-10T18:41:35.000Z","size":1610,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-06T13:37:52.894Z","etag":null,"topics":["floating-point","floating-point-arithmetic","formal-methods","formal-verification","haskell","library","math","mathematics","maths","mpl","program","theorem-prover"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rasheedja.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}},"created_at":"2022-06-23T18:42:03.000Z","updated_at":"2024-09-02T20:32:32.000Z","dependencies_parsed_at":"2023-11-10T19:46:03.059Z","dependency_job_id":null,"html_url":"https://github.com/rasheedja/PropaFP","commit_stats":{"total_commits":54,"total_committers":2,"mean_commits":27.0,"dds":0.01851851851851849,"last_synced_commit":"13f067485312a7d9ecd123965816dfcea498e52b"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/rasheedja/PropaFP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rasheedja%2FPropaFP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rasheedja%2FPropaFP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rasheedja%2FPropaFP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rasheedja%2FPropaFP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rasheedja","download_url":"https://codeload.github.com/rasheedja/PropaFP/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rasheedja%2FPropaFP/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274010104,"owners_count":25206764,"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","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"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":["floating-point","floating-point-arithmetic","formal-methods","formal-verification","haskell","library","math","mathematics","maths","mpl","program","theorem-prover"],"created_at":"2025-09-07T08:07:20.936Z","updated_at":"2025-09-07T08:07:35.128Z","avatar_url":"https://github.com/rasheedja.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PropaFP\n\nPropaFP is a tool used for auto-active verification of Floating-Point programs.\nPropaFP can be used for the verification of [SPARK][1]/[Ada][2] floating-point programs and is integrated with [GNAT Studio 2022](https://www.adacore.com/gnatpro/toolsuite/gnatstudio).\n\nPropaFP can take some Verification Condition (VC), and if PropaFP understands the VC, simplify it, derive bounds for variables, and safely eliminate floating-point operations using over-approximations on rounding errors.\nA more detailed description of PropaFP can be found in [this paper](https://link.springer.com/chapter/10.1007/978-3-031-17108-6_2) ([arXiv version](https://arxiv.org/abs/2207.00921)).\n\nBelow is a diagram summarising the integration with PropaFP and SPARK.\n\n![SPARK + PropaFP](images/SPARK_Toolchain_PropaFP.png)\n\n[1]: https://en.wikipedia.org/wiki/SPARK_(programming_language)\n[2]: https://en.wikipedia.org/wiki/Ada_(programming_language)\n\n## Requirements\n\nAll PropaFP executables require the [FPTaylor v0.9.4](https://github.com/soarlab/FPTaylor/tree/efbbc83970fe3c9f4cb33fafbbe1050dd18749cd) executable in $PATH.\n\nThe 'propafp-run-$prover' executables require the $prover to be installed (but not necessarily in $PATH).\n\nTo build PropaFP, we recommend [Stack](https://docs.haskellstack.org/en/stable/README/). We have built PropaFP with Stack version 2.7.5.\n\n## Installation\n\n- Download/Clone this repository\n- cd into the repo\n- Run `stack build`\n\nStack will then build the project and state where the PropaFP executables have been placed.\n\n### Supported Provers\n\nCurrently, PropaFP supports:\n\n- [dReal4](https://github.com/dreal/dreal4) (Tested on v4.21.06.2)\n- [LPPaver](https://github.com/rasheedja/LPPaver) (Tested on v0.1.0.0)\n- [MetiTarski](https://www.cl.cam.ac.uk/~lp15/papers/Arith/) (Tested on v2.4)\n\n## Usage\n\nPropaFP can work as a standalone program or with GNAT Studio 2022.\n\n### PropaFP as a Standalone Program\n\nTo produce some input for PropaFP, see the [Reference](REFERENCE.md).\n\n#### Translator Executables\n\nPropaFP contains 'translator' executables, which takes some input file, transforms the VC as described above, and produces another input file for the target prover.\nThe current 'translator' executables are:\n\n- propafp-translate-dreal      -f [smtFileContainingVC.smt2] -t [fileToWrite.smt2]\n- propafp-translate-metitarski -f [smtFileContainingVC.smt2] -t [fileToWrite.smt2]\n\nThe propafp-translate-dreal executable can also be used for LPPaver.\nIf PropaFP does not understand the VC, it writes an empty file.\n\n#### Runner Executables\n\n'Runner' executables take some input file, transform the VC as described above, and calls the prover on the transformed VC.\n'Runner' executables require the prover for each executable to be in $PATH.\nThe current 'runner' executables are:\n\n- propafp-run-dreal      -f [smtFileContainingVC.smt2] -p [pathToDReal]\n- propafp-run-lppaver    -f [smtFileContainingVC.smt2] -p [pathToLPPaver]\n- propafp-run-metitarski -f [smtFileContainingVC.smt2] -p [pathToMetiTarski]\n\nTo run LPPaver in a mode specialised to find counter-examples, pass the -c option.\n\n### PropaFP with GNAT Studio\n\nFor instructions to use with GNAT Studio 2022, see [sparkFiles/INSTRUCTIONS.md](sparkFiles/INSTRUCTIONS.md)\n\n## Guided Example\n\n[A guided example of using PropaFP with GNAT Studio.](sparkFiles/EXAMPLE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frasheedja%2Fpropafp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frasheedja%2Fpropafp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frasheedja%2Fpropafp/lists"}