fstar-verification

Prove software correctness with F* using dependent types and SMT-based verification.

Updated Nov 19, 2025
One-click install
npx skills add https://github.com/manutej/fstar-labs --skill fstar-verification
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: fstar-verification
Source: https://github.com/manutej/fstar-labs/tree/main/skill
Command: npx skills add https://github.com/manutej/fstar-labs --skill fstar-verification

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

This Skill guides engineers in building formally verified software using F*, leveraging dependent types, refinement types, and SMT-based verification to ensure correctness from specification to extraction.

Core Features & Use Cases

  • Dependent types for precise specifications and safer APIs.
  • Refinement types and SMT-driven verification with tactic-based proof capabilities.
  • Code extraction to OCaml, F#, C, WebAssembly, enabling production use.
  • Use cases include cryptographic libraries, secure protocols, low-level systems, and verifiable parsers.

Quick Start

Create a simple HelloWorld.fst module with a function and a postcondition, then run the F* tool on HelloWorld.fst to observe automatic verification.

Frequently Asked Questions about fstar-verification

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

FAQPage Schema
How do I prove software correctness using dependent types and refinement types?

You prove software correctness using dependent types and refinement types by writing formal specifications in F* and relying on SMT-based verification to automatically check that your implementation satisfies the required properties.

Can I extract verified F* code to OCaml, F#, C, or WebAssembly?

Yes, you can extract verified F* code to OCaml, F#, C, and WebAssembly. This code extraction mechanism allows you to compile mathematically proven secure modules into production environments while preserving their verified correctness guarantees.

What is the best way to verify cryptographic libraries and low-level systems?

The best way to verify cryptographic libraries and low-level systems is using F*, which combines dependent types, refinement types, and SMT automation to mathematically prove that security-critical modules function correctly and are free from vulnerabilities.

How do I use tactics for SMT-based verification in F*?

You use tactic-based proof capabilities in F* to guide the SMT solver when automated verification stalls. Tactics allow you to break down complex proof obligations for security-critical modules and low-level systems into manageable, verifiable steps.

How do I write a simple F* function with a postcondition and verify it?

To write a simple F* function with a postcondition, create a HelloWorld.fst module, define your function with a refinement type specifying the postcondition, and run the F* tool to observe the automatic SMT-based verification process.