agentsclimarketplace

Proof driven

Skill OutlineDriven/odin-claude-plugin/skills/proof-driven

Use when using property-based testing, theorem proving, or formal proof tactics with a zero-unproven-property policy.From its SKILL.md

Install
npx -y skills add OutlineDriven/odin-claude-plugin --skill proof-driven

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

6.8 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

Proof-driven development

Prove properties from requirements before writing code. Proofs guide implementation, not the reverse.

Modern insight (2025): PBT + example tests pairing is the standard -- properties discover edge cases, example tests prevent regressions and serve as documentation. AI-assisted PBT (Anthropic 2025) can generate properties from docstrings, but human judgment for property selection remains essential.

See frameworks for language-specific PBT and stateful testing tools. See examples for brief property test patterns per language. See formal-tools for theorem provers and bounded model checkers.


Property Categories

CategoryDescriptionExample
PostconditionOutput satisfies contractsorted(sort(xs))
InvariantProperty preserved by operationlen(xs) == len(sort(xs))
Idempotencef(f(x)) == f(x)deduplicate(deduplicate(xs))
Inverse / Round-tripg(f(x)) == xdecode(encode(x)) == x
Model-basedImplementation matches referencemy_sort(xs) == stdlib_sort(xs)
CommutativityOrder doesn't mattera + b == b + a
MetamorphicRelationship between outputssin(-x) == -sin(x)

Most effective (OOPSLA 2025): Model-based properties (~80% bug detection), postconditions (~65%). Least effective: properties that reimplement the logic under test.


When to Apply

  • Critical algorithms (sort, search, crypto, compression)
  • Financial calculations (rounding, currency conversion)
  • Consensus/distributed protocols (invariants across nodes)
  • Safety-critical systems (medical, automotive, aerospace)
  • Data structure invariants (balanced tree, heap property)
  • Serialization round-trip (encode/decode fidelity)
  • Stateful systems (databases, queues, caches) -- via stateful PBT

Reasoning approach

Before attempting a proof, reason through the property: SHORT-form KEYWORDS for internal scratchwork, break down the property into hypothesis and assumptions, critically review which proof strategy fits (induction, case analysis, contradiction, construction), validate each strategy against the property structure. Work through the proof step-by-step, verifying each step against the axioms. If a step fails, diagnose why before revising the strategy. For numeric calculation arising in the proof (e.g., bound arithmetic, complexity sums), invoke fend per the baseline rule; never self-calculate. Symbolic reasoning, case enumeration, and induction structure are in-head. They are not arithmetic.

When NOT to Apply

  • UI rendering, visual layout
  • Simple CRUD endpoints
  • Configuration management
  • Non-critical utility code
  • Rapidly changing requirements (properties are expensive to maintain)

Anti-patterns

  • Happy-path-only properties: Properties must cover edge cases -- that's their primary value
  • Skipping stateful testing for stateful systems: Use model-based stateful PBT (Hypothesis RuleBasedStateMachine, jqwik stateful)
  • Properties that test the framework: assert fast_check works is not assert my_code works
  • Conflating PBT with unit testing: PBT explores input space; unit tests verify known examples. Use both.
  • Not using shrinking: If counterexample is 500-line input, it's useless. Shrinking finds minimal failing case.
  • Reimplementing logic in properties: Property should be simpler than the code. If property is as complex as implementation, it adds no confidence.

Shrinking

Shrinking transforms a failing complex input into the minimal input that still fails. This is the most valuable feature of PBT frameworks.

  • Integrated shrinking (Hypothesis, Hedgehog): Generates shrink tree during generation. Preserves generator invariants. Superior approach.
  • Type-based shrinking (QuickCheck): Separate shrinker functions. Can violate generator constraints.
  • Always investigate shrunk counterexamples: They reveal the essential failure, stripped of noise.

PBT vs Fuzzing (decision guidance)

AspectPBTFuzzing
Input generationGuided by propertiesGuided by code coverage
OracleUser-written property assertionsCrashes/exceptions/timeouts
Best forCorrectness, algorithms, contractsSecurity, memory safety, crash detection
Convergence (2025)Hybrid tools (Bolero, Antithesis) combine both approaches

Proof Strategies

  • Simplification: Reduce by known rules, use shrinking to find minimal counterexamples
  • Arithmetic: Generate numeric edge cases (0, 1, MAX, negative, overflow boundaries)
  • Case analysis: Split on constructors/variants, test each branch independently
  • Induction: Recursive/sequential properties via stateful testing
  • Fuzzing: Empirical exploration when properties are hard to specify formally
  • Metamorphic relations: When oracle is unknown, test relationships between outputs

Theorem Hierarchy

Main Property (Goal)
|-- Supporting Property 1
|   +-- Helper Property 1a
|-- Supporting Property 2
+-- Edge Case Property 3

Workflow (language-neutral)

  1. PLAN -- Identify correctness, safety, invariant, and termination properties. Design hierarchy. Choose property categories.
  2. CREATE -- Write property test files. One property per concern. Tag by category (postcondition, invariant, inverse, etc.).
  3. VERIFY -- Run all properties. Count unproven (skipped/pending). Analyze counterexamples via shrinking.
  4. REMEDIATE -- Fill in each skipped property using proof strategies. Convert every counterexample to a permanent regression test.

Constitutional Rules (Non-Negotiable)

  1. CREATE First: Generate all property test artifacts from plan design before verification
  2. Complete All Proofs: Zero skipped/pending properties in final code
  3. Totality Required: All definitions must terminate
  4. Target Mirrors Model: Implementation structure corresponds to proven model
  5. Iterative Remediation: Fix proof failures, don't abandon verification

Validation Gates

GatePass CriteriaBlocking
FrameworkPBT framework available and configuredYes
PropertiesAll property tests passYes
UnprovenZero skipped/pending propertiesYes
Coverage>= 80% line coverageIf present

Exit Codes

CodeMeaning
0All properties pass, zero unproven/skipped
11Property testing framework not available
12No property tests created
13Property tests failed or proofs incomplete
14Coverage gaps (properties missing)

What ships with it: 3 files

4.8 KB alongside SKILL.md

references/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.