Validates logical conjectures by checking the satisfiability of their negation.

Install

mkdir -p .claude/skills/prove-z3prover && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/17804" && unzip -o skill.zip -d .claude/skills/prove-z3prover && rm skill.zip

Installs to .claude/skills/prove-z3prover

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Prove validity of logical statements by negation and satisfiability checking. If the negation is unsatisfiable, the original statement is valid. Otherwise a counterexample is returned.
184 charsno explicit “when” trigger
Advanced

Key capabilities

  • Prepares negated formula for satisfiability checking
  • Invokes prove.py with conjecture and variable declarations
  • Interprets prover output for validity
  • Reports counterexamples for invalid statements
  • Handles unknown or timeout results
  • Logs run entries to z3agent.db

How it works

The skill proves the validity of logical statements by negating the conjecture and checking its satisfiability using a prover.

Inputs & outputs

You give it
A logical statement (conjecture) in SMT-LIB2 or natural language
You get back
Validity status (valid, invalid with counterexample, unknown, or timeout)

When to use prove

  • Proving logical implications
  • Finding counterexamples for code logic
  • Validating SMT-LIB2 assertions

About this skill

Given a conjecture (an SMT-LIB2 assertion or a natural language claim), determine whether it holds universally. The method is standard: negate the conjecture and check satisfiability. If the negation is unsatisfiable, the original is valid. If satisfiable, the model is a counterexample.

Step 1: Prepare the negated formula

Action: Wrap the conjecture in (assert (not ...)) and append (check-sat)(get-model).

Expectation: A complete SMT-LIB2 formula that negates the original conjecture with all variables declared.

Result: If the negation is well-formed, proceed to Step 2. If the conjecture is natural language, run encode first.

Example: to prove that (> x 3) implies (> x 1):

(declare-const x Int)
(assert (not (=> (> x 3) (> x 1))))
(check-sat)
(get-model)

Step 2: Run the prover

Action: Invoke prove.py with the conjecture and variable declarations.

Expectation: The script prints valid, invalid (with counterexample), unknown, or timeout. A run entry is logged to z3agent.db.

Result: On valid: proceed to explain if the user needs a summary. On invalid: report the counterexample directly. On unknown/timeout: try simplify first, or increase the timeout.

python3 scripts/prove.py --conjecture "(=> (> x 3) (> x 1))" --vars "x:Int"

For file input where the file contains the full negated formula:

python3 scripts/prove.py --file negated.smt2

With debug tracing:

python3 scripts/prove.py --conjecture "(=> (> x 3) (> x 1))" --vars "x:Int" --debug

Step 3: Interpret the output

Action: Read the prover output to determine validity of the conjecture.

Expectation: One of valid, invalid (with counterexample), unknown, or timeout.

Result: On valid: the conjecture holds universally. On invalid: the model shows a concrete counterexample. On unknown/timeout: the conjecture may require auxiliary lemmas or induction.

Parameters

ParameterTypeRequiredDefaultDescription
conjecturestringnothe assertion to prove (without negation)
varsstringnovariable declarations as "name:sort" pairs, comma-separated
filepathno.smt2 file with the negated formula
timeoutintno30seconds
z3pathnoautopath to z3 binary
debugflagnooffverbose tracing
dbpathno.z3-agent/z3agent.dblogging database

Either conjecture (with vars) or file must be provided.

When not to use it

  • When the conjecture is not an SMT-LIB2 assertion or natural language claim
  • When a summary is not needed for valid statements
  • When the user does not want to try simplify or increase timeout for unknown/timeout results

Limitations

  • Requires the conjecture to be well-formed SMT-LIB2 or natural language
  • If the conjecture is natural language, it requires an 'encode' step first
  • May return 'unknown' or 'timeout' for complex conjectures

How it compares

This skill determines universal validity by negating a conjecture and using a satisfiability checker, providing counterexamples for invalid statements, unlike direct logical evaluation.

Compared to similar skills

prove side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
prove (this skill)04moReviewAdvanced
python-repl64moReviewBeginner
compare-cpython-versions17moReviewAdvanced
detect-silent-processing-failures04moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry