From Lean Vacuity Check
Adversarially stress-test a Lean 4 formalization (or the lean-vacuity-check detector itself) for hidden vacuity. Pointed at a repo, it hunts for the way the headline is hollow: a smuggled hypothesis, an extra assumption the paper lacks, a conclusion quietly narrowed from the source, a trivial or aliased definition the statement rests on, or an assumed axiom — and confirms each against the facts brief and the paper. Use when the user asks to red-team / attack / find holes in a Lean proof or formalization, to stress-test the vacuity checker, or to argue how a "machine-verified" claim could be hollow.
How this skill is triggered — by the user, by Claude, or both
Slash command
/lean-vacuity-check:lean-vacuity-redteamThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Think at maximum budget — this is adversarial, and your job is to BREAK the claim,
Think at maximum budget — this is adversarial, and your job is to BREAK the claim, not to confirm it. Assume the formalization is weaker than advertised and find the exact way. A clean build and a green check are the starting assumption, not evidence.
Orchestrate. Optimise for the most exhaustive answer, not the fastest — token cost is not the constraint. When the harness supports it (Claude Code's Workflow tool / subagents), attack the axes below in parallel and have an independent skeptic try to refute each candidate hole before you report it; only confirmed attacks count.
Field-general. This works for any area of mathematics. Bring general mathematical reasoning to whatever the repo is about; do not assume complexity theory.
make_brief.py on it.python3 scripts/lean_axiom_probe.py <REPO> --auto --json-out results/axioms.json
python3 scripts/make_brief.py <REPO> --axioms results/axioms.json --out-dir audits/<repo>
Read audits/<repo>/BRIEF.md and the repo's README/paper (open the actual .tex/PDF).
The brief gives you the kernel closure, the unfold chain of every headline identifier, and
the paper-vs-Lean pairing. Attack from there.
Work the open-ended ones first; they are where real formalizations fail and where no fixed checker can catch you:
→ where the paper proves ↔, ∀/∃
swapped, a restricted machine model, a missing polynomial/quantitative bound? Any added
hypothesis or narrowed conclusion makes the Lean prove less than the paper. Quote both
sides.Hard → Goal, a "bridge"/"oracle" assumption,
or substantive hypotheses guarding a trivial conclusion? Is each premise a genuinely
cited known result, or the theorem in disguise?True / x = x / ∈ Set.univ, or is a key term defined to make
the statement hold (def NP := P, a class as Set.univ/Unit, an opaque term that
cannot be refuted)?sorryAx, a custom
axiom/constant carrying the crux, native_decide/ofReduceBool, unsafe, or
set_option debug.skipKernelTC.Every claimed hole must be backed by a concrete fact: the exact line in the brief, the exact unfolded definition, or the exact paper-vs-Lean mismatch (quote both). A weak hypothesis that the paper also assumes is not an attack. If a candidate hole survives a careful read of the source, it counts; otherwise drop it.
A ranked list of the strongest confirmed attacks, each with: the axis (V1–V6), the concrete evidence, the severity, and whether it alone makes the headline vacuous. If the formalization survives every axis, say so plainly and name the one fact that most supports the claim. For mode (B), report which crafted cases the facts brief exposed and which it missed, and what fact the brief should additionally surface.
npx claudepluginhub lionsr/is-my-lean-proof-vacuous --plugin lean-vacuity-checkCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.