{"id":20910128,"url":"https://github.com/viperproject/axiom-profiler","last_synced_at":"2025-05-13T07:31:35.256Z","repository":{"id":37924832,"uuid":"248199616","full_name":"viperproject/axiom-profiler","owner":"viperproject","description":"The axiom profiler for exploring and visualizing SMT solver quantifier instantiations (made via E-matching).","archived":true,"fork":false,"pushed_at":"2025-02-13T14:33:42.000Z","size":59823,"stargazers_count":32,"open_issues_count":22,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-16T00:41:36.978Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/viperproject.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-18T10:22:08.000Z","updated_at":"2025-02-13T14:33:54.000Z","dependencies_parsed_at":"2024-11-18T14:14:17.211Z","dependency_job_id":"965b565f-a64d-4d2a-9366-3965abb66e27","html_url":"https://github.com/viperproject/axiom-profiler","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viperproject%2Faxiom-profiler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viperproject%2Faxiom-profiler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viperproject%2Faxiom-profiler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viperproject%2Faxiom-profiler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/viperproject","download_url":"https://codeload.github.com/viperproject/axiom-profiler/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253894788,"owners_count":21980400,"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":[],"created_at":"2024-11-18T14:13:59.616Z","updated_at":"2025-05-13T07:31:30.239Z","avatar_url":"https://github.com/viperproject.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"A [new 2.0 version](https://github.com/viperproject/axiom-profiler-2) is available, we recommend switching over!\n\n# Axiom Profiler\n\nA tool for visualising, analysing and understanding quantifier instantiations made via E-matching in a run of an SMT solver (at present, only [Z3](https://github.com/Z3Prover/z3) has been modified to provide the necessary log files). The tool takes a log file (which can be generated by Z3 by passing additional command-line options; see below) and presents information visually, primarily using a graph representation of the quantifier instantiations made and their causal connections. This graph can be filtered and explored in a variety of ways, and detailed explanations of individual quantifier instantiations are assembled and displayed in the left-hand panel. A range of customisations are available for aiding the presentation and understanding of this information, including explanations of equalities used to justify a quantifier instantiation. The Explain Path feature in the graph also produces automatically explanations of matching loops occurring in the SMT run. More details of the tool's features can be found [in this draft paper](http://people.inf.ethz.ch/summersa/wiki/lib/exe/fetch.php?media=papers:axiomprofiler.pdf)\n\nOur tool was originally based on a tool called the [VCC Axiom Profiler](http://vcc.codeplex.com/SourceControl/latest#vcc/Tools/Z3Visualizer/), and was since developed via [Frederik Rothenberger's MSc project: Integration and Analysis of Alternative SMT Solvers for Software Verification](http://www.pm.inf.ethz.ch/education/student-projects/completedprojects.html) and by substantial work by Nils Becker, both supervised by [Alexander J. Summers]([http://people.inf.ethz.ch/summersa/](https://www.cs.ubc.ca/~alexsumm/)) who can be contacted with questions about the current version of the tool. We welcome bug reports and pull requests.\n\n## Using on Windows\n\n1.  Clone this repository:\n\n        git clone https://github.com/viperproject/axiom-profiler.git\n        \n2.  Build from Visual Studio (also possible on the command-line): open source/AxiomProfiler.sln solution, and run the release build. Requires C# 6.0 features, .Net \u003e= 4.5 (and a version of Visual Studio which supports this, e.g. \u003e= 2017).\n        \n3.  Run the tool (either via Visual Studio, or by executing bin/Release/AxiomProfiler.exe)\n\n## Using on Ubuntu\n\n(Note that the GUI of the tool currently suffers from some glitches when running under mono.)\n\n1.  Clone this repository:\n\n        git clone https://github.com/viperproject/axiom-profiler.git\n        cd axiom-profiler\n\n2.  Install Mono from https://www.mono-project.com/download/stable/\n3.  Download NuGet:\n\n        wget https://nuget.org/nuget.exe\n\n4.  Install C# 6.0 compiler:\n\n        mono ./nuget.exe install Microsoft.Net.Compilers\n\n5.  Compile project:\n\n        xbuild /p:Configuration=Release source/AxiomProfiler.sln\n\n6.  Run Axiom Profiler:\n\n        mono bin/Release/AxiomProfiler.exe\n\n## Using on Mac/Ubuntu (via Docker)\n\n1. Install Docker.\n2. Clone this repository:\n\n        git clone https://github.com/viperproject/axiom-profiler.git\n        cd axiom-profiler\n\n3. Build the Docker image:\n\n        docker build . --tag=axiom-profiler\n\n4. Start the Docker image, replacing `\u003cpath\u003e` with the absolute path of the folder containing the Z3 logs:\n\n        docker run -t -p 6080:6080 -v\u003cpath\u003e:/home/ubuntu/data axiom-profiler\n\n5. Follow the instructions printed in the terminal to open a remote desktop of the Docker image.\n6. In the remote desktop, open a terminal and start the axiom profiler:\n\n        mono /home/ubuntu/axiom-profiler/bin/Release/AxiomProfiler.exe\n\n7. In the axiom profiler, the logs can be loaded from the \"Personal \u003e data\" location.\n\n## Obtaining logs from Z3\n\nNOTE: The Axiom Profiler requires at least version 4.8.5 of z3. To build the latest version of z3 from source follow the instructions at https://github.com/Z3Prover/z3.\n\nRun Z3 with two extra command-line options:\n\n    z3 trace=true proof=true ./input.smt2\n\nThis will produce a log file called `./z3.log`.\nIf you want to specify the target filename, you can pass a third option:\n\n    z3 trace=true proof=true trace-file-name=foo.log ./input.smt2\n\nNOTE: if this takes too long, it is possible to run the Axiom Profiler with a prefix of a valid log file - you could potentially kill the z3 process and obtain the corresponding partial log. Some users (especially on Windows) have reported that killing z3 can cause a lot of the file contents to disappear; if you observe this problem, it's recommended to copy the log file before killing the process.\n\nSimilarly, if you have a log file which takes too long to load into the Axiom Profiler, hitting Cancel will cause the tool to work with the portion loaded so far.\n\n## Obtaining Z3 logs from various verification tools that use Z3 (feel free to add more)\n\n### Boogie\n\nTo obtain a Z3 log with Boogie, use e.g:\n\n    boogie /vcsCores:1 /proverOpt:O:trace=true /proverOpt:O:proof=true ./file.bpl\n\n### Silicon\n\nTo obtain a Z3 log with the Viper symbolic execution verifier (Silicon), use e.g:\n\n    silicon --numberOfParallelVerifiers 1 --z3Args \"trace=true proof=true\" ./file.vpr\n\nIf it complains about an unrecognized argument, try escaping the double-quotes. E.g.:\n\n    silicon --numberOfParallelVerifiers 1 --z3Args '\"trace=true proof=true\"' ./file.vpr\n    \non Unix-like systems or:\n\n    silicon --numberOfParallelVerifiers 1 --z3Args \"\"\"trace=true proof=true\"\"\" ./file.vpr\n\nin Windows command prompt.\n\n### Carbon\n\nTo obtain a Z3 log with the Viper verification condition generation verifier (Carbon), use e.g:\n\n    carbon --print ./file.bpl ./file.vpr\n    boogie /vcsCores:1 /proverOpt:O:trace=true /proverOpt:O:proof=true ./file.bpl\n\nIn all cases, the Z3 log should be stored in `./z3.log` (this can also be altered by correspondingly passing z3 the trace-file-name option described above)\n\n### Dafny\n\nSee these instructions in Dafny's wiki: [Investigating slow verification performance](https://github.com/dafny-lang/dafny/wiki/Investigating-slow-verification-performance).\n\n### FStar\n\nSee these instructions in FStar's wiki: [Profiling Z3 queries](https://github.com/FStarLang/FStar/wiki/Profiling-Z3-queries).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviperproject%2Faxiom-profiler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fviperproject%2Faxiom-profiler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviperproject%2Faxiom-profiler/lists"}