smtprofiling

Profile F* SMT obligations sent to Z3 to diagnose slow verification queries.

8|4|Updated Mar 25, 2026
One-click install
npx skills add https://github.com/FStarLang/proof-copilot --skill smtprofiling
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: smtprofiling
Source: https://github.com/FStarLang/proof-copilot/tree/main/plugins/proof-copilot/skills/smtprofiling
Command: npx skills add https://github.com/FStarLang/proof-copilot --skill smtprofiling

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

This Skill helps you diagnose why F* proofs are slow, unstable, or failing by inspecting the SMT queries sent to Z3 and pinpointing the exact obligations that need attention.

Core Features & Use Cases

  • Query Isolation: Generate per-obligation .smt2 files so you can profile a single proof step instead of guessing across the whole module.
  • Z3 Performance Analysis: Inspect query statistics and quantifier profiles to identify cascades, high instantiation counts, and expensive solver behavior.
  • Proof Stabilization Guidance: Apply proven fixes such as adding patterns, splitting queries, pruning facts, reducing fuel, or refactoring lemmas and modules.
  • Use Case: A proof that suddenly starts requiring a huge rlimit can be isolated, profiled, and rewritten into a smaller, more stable verification flow.

Quick Start

Ask the assistant to profile the failing F* proof, extract the relevant SMT query, and recommend the most likely stabilization technique.

Frequently Asked Questions about smtprofiling

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

FAQPage Schema
How do I diagnose slow F* proofs using SMT profiling?

SMT profiling diagnoses slow F* proofs by inspecting the SMT queries sent to Z3, isolating per-obligation .smt2 files to pinpoint exact verification steps needing attention.

Why does my F* verification suddenly require a huge rlimit?

A huge rlimit in F* verification indicates an unstable proof that can be identified by extracting the relevant SMT query, profiling Z3 quantifier instantiations, and applying stabilization techniques.

How do I fix unstable Z3 quantifier instantiations in F* and Pulse projects?

Fix unstable Z3 quantifier instantiations in F* and Pulse by profiling SMT obligations, identifying cascades or high instantiation counts, and adding patterns or splitting queries.

What is the best way to stabilize failing F* verification queries?

The best way to stabilize failing F* verification queries is to apply proof stabilization guidance such as splitting queries, pruning facts, reducing fuel, or refactoring lemmas and modules.

Can I profile a single F* proof step instead of the whole module?

Yes, query isolation generates per-obligation .smt2 files so you can profile a single F* proof step and analyze Z3 performance for that specific obligation instead of guessing across the module.

When should I refactor lemmas to fix slow F* proof performance regressions?

Refactor lemmas to fix slow F* proof performance regressions when Z3 profiling reveals expensive solver behavior or cascading quantifier instantiations that fact pruning and fuel tuning cannot resolve.