smt-verify

Convert VDM-SL proof obligations to SMT-LIB and verify with Z3.

1|Updated Mar 31, 2026
One-click install
npx skills add https://github.com/kotaroyamame/formal-agent-contracts --skill smt-verify
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: smt-verify
Source: https://github.com/kotaroyamame/formal-agent-contracts/tree/main/skills/smt-verify
Command: npx skills add https://github.com/kotaroyamame/formal-agent-contracts --skill smt-verify

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

Converts VDM-SL proof obligations into SMT-LIB and automatically verifies them using the Z3 solver.

Core Features & Use Cases

  • PO translation & SMT-LIB generation from VDM-SL obligations using formal type and expression mapping rules.
  • Automated proving with Z3: Run satisfiability checks, interpret results (unsat, sat, unknown), and extract counterexamples when available.
  • End-to-end workflow support: Handles common PO types (invariant satisfiability, state init, map apply, subtype, operation postconditions) and integrates with a complete verification pipeline.

Quick Start

Provide a VDM-SL PO file and run the SMT verification workflow to obtain the verdict.

Frequently Asked Questions about smt-verify

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I verify VDM-SL proof obligations automatically?

Automated VDM-SL proof obligation verification works by translating the obligations into SMT-LIB format and checking them with the Z3 solver. It returns proved, counterexample, or unknown verdicts for each obligation.

What types of VDM-SL proof obligations can Z3 verify?

Z3 verifies common VDM-SL proof obligations such as invariant satisfiability, state initialization, map apply, subtype checks, and operation postconditions by mapping them into SMT-LIB expressions for solver evaluation.

Do I need VDMJ to generate proof obligations for SMT verification?

VDMJ is required to generate the VDM-SL proof obligations needed for SMT verification. The workflow takes these generated POs, applies formal type and expression mapping rules, and converts them into SMT-LIB format.

How does VDM-SL to SMT-LIB translation work for formal verification?

VDM-SL to SMT-LIB translation applies defined formal type and expression mapping rules to proof obligations. This conversion standardizes VDM-SL logic into SMT-LIB syntax so the Z3 solver can evaluate satisfiability.

What does it mean when Z3 returns a counterexample for a VDM-SL proof obligation?

A counterexample indicates the VDM-SL proof obligation is satisfiable, meaning Z3 found a specific state where the invariant or condition fails. The verification workflow extracts and reports this counterexample.

Are there limitations to automated formal verification with Z3 for VDM-SL models?

Automated formal verification with Z3 can return an unknown result for VDM-SL proof obligations if the solver cannot determine satisfiability. This occurs when translated SMT-LIB expressions fall outside Z3's decidable logic fragments.