aptos-move-prover

Prove Move smart contract properties with Move Prover and MSL.

Updated Nov 25, 2025
One-click install
npx skills add https://github.com/gounthar/bazel-riscv --skill aptos-move-prover
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: aptos-move-prover
Source: https://github.com/gounthar/bazel-riscv/tree/main/.claude/skills/aptos/move-prover
Command: npx skills add https://github.com/gounthar/bazel-riscv --skill aptos-move-prover

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Provides expertise on Move Prover and MSL to prove contract properties for all inputs.

Core Features & Use Cases

  • MSL & Spec Blocks: preconditions, postconditions, invariants.
  • Aborts & Modifies: verifying abort codes and state changes.
  • Quantifiers & Pragma: advanced verification strategies.
  • Use Case: Prove critical invariants across complex contracts.

Quick Start

Ask: "How do I specify and prove a transfer invariant with Move Prover?"

Frequently Asked Questions about aptos-move-prover

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

FAQPage Schema
How do I prove correctness properties for Move smart contracts?

Move Prover uses the Move Specification Language (MSL) to formally verify contract properties for all inputs. You write spec blocks with preconditions, postconditions, invariants, and abort conditions, then the prover generates proofs or counterexamples using SMT-based solvers like Z3 or CVC5.

What are Move Prover spec blocks and how do I write them?

Spec blocks define formal specifications using MSL constructs: requires (preconditions), ensures (postconditions), aborts_if (abort conditions), modifies (state changes), and emits (events). Attach them to Move functions and modules to specify expected behavior the prover will verify.

Can I verify token transfer invariants with Move Prover?

Yes. Move Prover verifies invariants across complex contracts, including token transfer logic. Define invariants in spec blocks to assert properties that must hold across all inputs and state changes; the prover proves them or produces counterexamples showing violations.

What does it mean when Move Prover fails to prove a specification?

When a proof fails, Move Prover returns a counterexample—a concrete input or state sequence that violates your specification. This identifies the bug or incomplete specification so you can fix the contract logic or refine the spec to match actual behavior.

Do I need advanced SMT solver knowledge to use Move Prover?

No. Move Prover abstracts SMT solvers (Z3, CVC5) internally. You write specifications in MSL syntax; the prover handles solver integration. Understanding basic predicate logic and invariant design helps, but deep solver expertise is not required.

How do quantifiers and pragma directives work in Move specifications?

Quantifiers (forall, exists) express properties over collections or global state in MSL. Pragma directives configure verification strategies—like loop unrolling depth or timeout limits—to optimize proof search and handle complex specifications.