lizard

Lizard is the visual verification debugger for Viper IDE

https://github.com/viperproject/lizard

Science Score: 52.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
    Organization viperproject has institutional domain (viper.ethz.ch)
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.8%) to scientific vocabulary

Keywords

verification viper
Last synced: 6 months ago · JSON representation ·

Repository

Lizard is the visual verification debugger for Viper IDE

Basic Info
  • Host: GitHub
  • Owner: viperproject
  • Language: TypeScript
  • Default Branch: master
  • Homepage:
  • Size: 5.4 MB
Statistics
  • Stars: 2
  • Watchers: 8
  • Forks: 0
  • Open Issues: 1
  • Releases: 0
Topics
verification viper
Created over 4 years ago · Last pushed over 2 years ago
Metadata Files
Readme Changelog Citation

README.md

Lizard: the Viper debugger

Lizard is a VS Code extension and an experimental visual debugger for the Viper intermediate verification language. It works with both Viper's backends (Silicon as well as Carbon), although not all Viper language features might work correctly. Hence, Lizard requires the Viper VS Code extension to be installed (particularly, the common-dbg branch, see PR #152). Verification errors reported by Viper trigger Lizard to produce comprehensible counterexamples to failed assertions, postconditions, or invariants. Lizard displays the counterexample next to the Viper program that failed to verify.

Core use case

Lizard's main purpose is debugging (unbounded) heap-manipulating Viper programs that are specified in terms of quantified permissions (a.k.a. iterated separating conjunction). Lizard is especially useful in combination with Chuckwalla (Viper's prototypical extension for heap-reachability verification). However, it may be that at this time Chuckwalla is not yet implemented.

How it works

To generate a counterexample, Lizard combines the available type information with the information from the SMT model (normally produced by Z3 in an incomplete yet incomprehensible manner). Visualization is further facilitated by some preexpectation for the shape of possible counterexamples. For example, it is expected that each method's footprint is represented as a set of references to the nodes, the fields of which may be accessed by the method.

Other use cases

Lizard might be useful also as a platform for prototyping other Viper debuggers, providing an API for querying SMT models from within Viper IDE. Lizard is written in TypeScript and uses things like Graphviz, Node.js, Webpack, WebView, HTML, CSS, and prayer.

For developers

To compile the project: 1. clone the repo 2. run npm install to install the dependencies 3. run npm run compile to build the extension 4. run code lizard/ to open the project in VS Code 5. start the extension from the debug panel in VS Code 6. run vsce package to assemble a portable distribution bundle

Dependencies

To use Lizard, you first need to install the Viper extension for your Visual Studio Code installation. Viper is a JVM server application, so you'll also need Java. For more details, see Download and Install Viper.

To activate the verification debugger, your preferred Viper backend must be set up to emit counterexamples. This can be done by passing the --counterexample native option. For example, the JSON settings below configure two Viper backends ("silicon-debug" and "carbon-debug") to produce counterexamples (to switch between backends, use Ctrl+L or ⌘+L): json "viperSettings.verificationBackends": [ { "v": "674a514867b1", "name": "silicon-debug", "type": "silicon", "paths": [], "engine": "ViperServer", "timeout": 100000, "stages": [ { "name": "verify", "isVerification": true, "mainMethod": "viper.silicon.SiliconRunner", "customArguments": "--z3Exe $z3Exe$ --disableCaching --counterexample native $fileToVerify$" } ], "stoppingTimeout": 5000 }, { "v": "674a514867b1", "name": "carbon-debug", "type": "carbon", "paths": [], "engine": "ViperServer", "timeout": 100000, "stages": [ { "name": "verify", "isVerification": true, "mainMethod": "viper.carbon.Carbon", "customArguments": "--z3Exe $z3Exe$ --boogieExe $boogieExe$ --disableCaching --counterexample native $fileToVerify$" } ], "stoppingTimeout": 5000 } ]

Historical note

This extension is a follow-up project to the family of verification debugger prototypes developed as student projects at the Programming Methodology Group at ETH Zurich. In particular, some code is borrowed from Alessio Aurrechia's Master thesis project (which used symbolic execution traces and Alloy models, as opposed to Z3 models, to extract possible counterexamples).

Owner

  • Name: Viper Project
  • Login: viperproject
  • Kind: organization
  • Location: ETH Zurich

Verification Infrastructure for Permission-​based Reasoning

Citation (CITATION.cff)

sage: "If you use this software, please cite it as below."
authors:
- family-names: "Ter-Gabrielyan"
  given-names: "Arshavir"
  orcid: "https://orcid.org/0000-0003-0292-7750"
title: "Lizard: The Visual Debugger for Viper"
version: 0.1.0
#doi: 10.5281/zenodo.1234
date-released: 2021-08-11
url: "https://github.com/viperproject/lizard"

GitHub Events

Total
Last Year

Issues and Pull Requests

Last synced: 12 months ago

All Time
  • Total issues: 1
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 1
  • Total pull request authors: 0
  • Average comments per issue: 0.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • aterga (1)
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels

Dependencies

.github/workflows/update-vscode.yml actions
  • actions/checkout v2 composite
  • peter-evans/create-pull-request v3 composite
package-lock.json npm
  • 612 dependencies
package.json npm
  • @types/d3-graphviz ^2.6.7 development
  • @types/glob ^7.1.3 development
  • @types/mocha ^8.2.2 development
  • @types/node 14.x development
  • @types/vscode ^1.57.0 development
  • @typescript-eslint/eslint-plugin ^4.26.0 development
  • @typescript-eslint/parser ^4.26.0 development
  • css-loader ^5.2.6 development
  • d3 ^7.0.0 development
  • d3-graphviz ^4.5.0 development
  • eslint ^7.27.0 development
  • glob ^7.1.7 development
  • html-loader ^2.1.2 development
  • html-webpack-plugin ^5.3.1 development
  • mini-css-extract-plugin ^1.6.0 development
  • mocha ^8.4.0 development
  • sass ^1.35.1 development
  • sass-loader ^12.1.0 development
  • split-js ^1.0.1 development
  • ts-loader ^9.2.3 development
  • typescript ^4.3.2 development
  • vscode-test ^1.5.2 development
  • webpack ^5.39.1 development
  • webpack-cli ^3.3.1 development
  • @vscode/vsce ^2.19.0
  • json-formatter-js ^2.3.4
  • split.js ^1.6.5
  • webpack ^5.38.1
src/panel/package-lock.json npm
  • 495 dependencies
src/panel/package.json npm
  • @types/d3 ^6.7.1 development
  • @types/d3-graphviz ^2.6.6 development
  • @types/jquery ^3.5.5 development
  • @types/node 15.12.2 development
  • @types/split.js ^1.6.0 development
  • @types/webpack 5.28.0 development
  • css-loader ^5.2.6 development
  • d3 ^7.0.0 development
  • d3-graphviz 2.4.2 development
  • eslint ^7.28.0 development
  • html-loader ^2.1.2 development
  • html-webpack-inline-source-plugin 0.0.10 development
  • html-webpack-plugin ^5.3.1 development
  • jquery ^3.6.0 development
  • json-formatter-js ^2.3.4 development
  • mini-css-extract-plugin ^1.6.0 development
  • node-sass ^6.0.0 development
  • sass-loader ^12.1.0 development
  • split.js ^1.6.4 development
  • ts-loader ^9.2.3 development
  • typescript 4.3.2 development
  • @hpcc-js/wasm ^1.5.3
  • webpack ^5.39.1