Skip to main content

Veripy

A production-ready auto-active verification system for Python, similar to Dafny and Verus.

Overview

Veripy transforms Python code verification from a work-in-progress into a production-ready system with automatic invariant inference, comprehensive error reporting, and a professional CLI.

Soundness note

Veripy is not sound for full Python today. The core VC engine is intended to be sound for a restricted, “verification-oriented” subset (roughly: side-effect-free code over int/bool plus mathematical arrays, with structured if/while, and user-supplied invariants), and it rejects or approximates many Python features (exceptions, dynamic dispatch, aliasing/mutation semantics of real lists/dicts/objects, etc.).

Recent work is moving toward a Dafny/Boogie-style explicit heap model for aliasing + mutation (lists/dicts/fields as references) and for exception safety (e.g., bounds and div/mod by zero become proof obligations). This is still a work in progress and many Python features remain unsupported.

Key Features

Auto-Active Verification

  • Automatic loop invariant inference
  • Type-based constraint generation
  • Arithmetic lemma automation
  • Multiple inference strategies (NONE, SIMPLE, AGGRESSIVE, FULL)

Production Readiness

  • Professional CLI with multiple commands
  • Rich terminal output with syntax highlighting
  • JSON output for CI/CD
  • Comprehensive error reporting with counterexamples
  • Source location tracking

Recursive Functions

  • Termination checking with decreases clauses
  • Tail recursion detection
  • Call graph analysis

Installation

pip install py-veripy

For development:

make install-dev

Usage

Basic Verification

import veripy as vp

vp.enable_verification()

@vp.verify(requires=['x > 0'], ensures=['ans == x * 2'])
def double(x: int) -> int:
    return x * 2

vp.verify_all()

Deppy-Style Contracts

import veripy as vp

vp.enable_verification()
vp.scope("demo")

@vp.verify()
@vp.requires("x > 0")
@vp.guarantee("result > x")
def succ(x: int) -> int:
    return x + 1

vp.verify_all()

Veripy normalizes Deppy-style result postconditions to its internal ans binding and also exposes lightweight sidecar metadata helpers such as @vp.about(...), @vp.proof_for(...), and @vp.z3_hint(...).

Lean4 Export

import veripy as vp

@vp.verify(requires=["x > 0"], ensures=["ans > x"])
def succ(x: int) -> int:
    return x + 1

cert = vp.compile_to_lean(succ)
print(cert.render())

# Optional, if Lean is installed locally:
# cert.verify_with_lean()

The Lean backend now exports Veripy's actual heap-lowered VC obligations rather than re-translating raw Python syntax. In practice that means the generated Lean theorems track the same pre => wp and side-condition formulas the SMT backend checks, including summary assumptions for verified callees and explicit heap state binders when lists/dicts/fields are involved.

CLI Usage

# Verify files
veripy verify file.py

# With counterexamples and statistics
veripy verify --counterexample --statistics file.py

# JSON output for CI/CD
veripy verify --output json file.py

Auto-Active Features

from veripy.auto_active import auto_infer_invariants

invariants = auto_infer_invariants({
    "loop_var": "i",
    "init": 0,
    "condition": "i < n",
    "body": []
})

Architecture

veripy/
├── core/           # Verification condition generation, AST transformation
├── auto_active/    # Auto-active features (invariant inference, lemmas)
├── cli/            # Command-line interface
├── parser/         # Syntax parsing
├── typecheck/      # Type checking
├── error_reporter.py
├── recursive.py
└── prettyprint.py

Development

make test          # Run tests
make test-cov      # With coverage
make lint          # Linting
make format        # Formatting
make typecheck     # Type checking
make check         # All checks

Dependencies

  • z3-solver - SMT solver
  • rich - Terminal output
  • click - CLI framework
  • pyparsing - Expression parsing
  • apronpy - Abstract interpretation

Metadata

Release files for py-veripy 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for py-veripy 0.1.1
File Size Uploaded Provenance
py_veripy-0.1.1.tar.gz 105.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for py-veripy 0.1.1
File Interpreter ABI Platform
py_veripy-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 230.4 kB

Release files / py_veripy-0.1.1.tar.gz

Download URL py_veripy-0.1.1.tar.gz
Size 105.6 kB
Tags Source
SHA-256 checksum
How to use checksums
240dda9895446bddd161f34abc08f17d055170b89e68f07e777ccb968309ee4b
BLAKE2b-256 checksum
How to use checksums
24a6cae0ff9e455141dbe844320302651f47c96f7344d17375f9afe62f0a65a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release files / py_veripy-0.1.1-py3-none-any.whl

Download URL py_veripy-0.1.1-py3-none-any.whl
Size 124.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1e1159c17694ff61758a7b0040470e319eb2f0171c5ab00160acc42d6efd9863
BLAKE2b-256 checksum
How to use checksums
a746ae9d9772c8cf74eb6c44b2fa0744d7fbcc3783e817969ea9aa99798c12da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Security for py-veripy 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page