pulseverifier
Use fstar.exe to verify Pulse code and interpret the errors reported
Install
mkdir -p .claude/skills/pulseverifier && curl -L -o skill.zip "https://mcp.directory/api/skills/download/4076" && unzip -o skill.zip -d .claude/skills/pulseverifier && rm skill.zipInstalls to .claude/skills/pulseverifier
About this skill
Invocation
This skill is used when:
- Verifying Pulse (.fst) files with
#lang-pulsedirective - Debugging separation logic proof failures
- Checking resource management correctness
Core Operations
PULSE_HOME is usually located adjacent to the FStar directory.
Basic Verification
# Verify Pulse file (--include <PULSE_HOME>/out/lib/pulse is required)
fstar.exe --include <PULSE_HOME>/out/lib/pulse Module.fst
# With include paths for Pulse library
fstar.exe --include <PULSE_HOME>/out/lib/pulse --include out/lib/pulse --include lib/pulse/lib Module.fst
# Verify interface first, then implementation
fstar.exe --include <PULSE_HOME>/out/lib/pulse --include paths... Module.fsti
fstar.exe --include <PULSE_HOME>/out/lib/pulse --include paths... Module.fst
Building with Pulse Repository
# In pulse repository root
make -j4
# Or verify specific file
cd /path/to/pulse
fstar.exe --include out/lib/pulse --include lib/pulse/lib lib/pulse/lib/Module.fst
Pulse-Specific Errors
"Application of stateful computation cannot have ghost effect"
Cause: Trying to call a stateful stt function inside a ghost context
Diagnosis:
- Variables bound with
with x y z. _are ghost - If an
ifcondition uses ghost values, both branches become ghost
Solutions:
- Read from actual data structures instead of ghost sequences:
// WRONG: bucket_ptrs is ghost from 'with'
let ptr = Seq.index bucket_ptrs idx;
// RIGHT: Read from actual vector
let ptr = V.op_Array_Access vec idx;
- Restructure to perform stateful ops before ghost conditionals:
// Do stateful work first
let result = stateful_operation();
// Then do ghost reasoning
if ghost_condition then ... else ...
"Expected a term with non-informative (erased) type"
Cause: Binding a concrete type from a ghost expression Solutions:
- Use assertion instead of let binding:
// WRONG
let x : list entry = Seq.index ghost_seq idx;
// RIGHT
assert (pure (Cons? (Seq.index ghost_seq idx)));
- Keep ghost values as ghost:
let x : erased (list entry) = Seq.index ghost_seq idx;
"Could not prove post-condition" (separation logic)
Cause: Resources don't match expected slprop
Diagnosis Steps:
- Check fold/unfold balance
- Verify rewrite statements are correct
- Ensure all resources are accounted for
Solutions:
- Add explicit fold/unfold:
unfold (my_predicate args);
// ... work with internal structure ...
fold (my_predicate args);
- Use rewrite for type equality:
rewrite (pred x) as (pred y); // when x == y is known
- For OnRange predicates:
get_bucket_at ptrs contents lo hi idx; // Extract element
// ... use element ...
put_bucket_at ptrs contents lo hi idx; // Put back
"Ill-typed application" in fold/unfold
Cause: Predicate arguments don't match definition Solutions:
- Check all arguments are provided
- Verify implicit arguments are inferable
- Add explicit type annotations
Proof Patterns
FiniteSet Reasoning
// ALWAYS call this before FiniteSet assertions
FS.all_finite_set_facts_lemma();
// Now SMT can prove these
assert (pure (FS.mem x (FS.insert x s)));
assert (pure (FS.cardinality (FS.remove x s) == FS.cardinality s - 1));
Sequence Equality
// Use extensional equality
assert (pure (Seq.equal s1 s2));
// NOT propositional equality
// assert (pure (s1 == s2)); // Often fails
Ghost Lemma Calls
// Call F* lemmas in ghost context
my_lemma arg1 arg2;
assert (pure (lemma_conclusion));
Resource Management Verification
Checking for Memory Leaks
Look for:
drop_calls - should only be on empty/null resources- All allocated resources must be freed or returned
- Box.box allocations must have corresponding B.free
Acceptable Drops
// OK: Empty linked list (null pointer)
drop_ (LL.is_list null_ptr []);
// NOT OK: Non-empty resources
// drop_ (LL.is_list ptr (hd::tl)); // Memory leak!
Verification Checklist
Before considering code complete:
- No
admit()calls - No
assume_calls - No
drop_of non-empty resources - Interface (.fsti) verified separately
- Implementation (.fst) verified
- rlimits ≤10 throughout
- All queries pass (no cancelled in --query_stats)
More by FStarLang
View all →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
rust-coding-skill
UtakataKyosui
Guides Claude in writing idiomatic, efficient, well-structured Rust code using proper data modeling, traits, impl organization, macros, and build-speed best practices.
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.