Build Proof Dependency Graph logo

Build Proof Dependency Graph

Community
scottnarmstrong
build-proof-dependency-graph

Build an independently reviewed, source-level dependency database anchored to exact author-frozen Lean declarations. Use after source-first approval of one-declaration anchor files, when an orchestrator must trace roots through LaTeX, Markdown, or other line-addressable proof sources, expose substantive proof steps and external inputs, and produce a structurally checked graph for later Lean orchestration. Do not use this skill to inspect implementation Lean code or decide whether any theorem is proved.

Overview

Publisherscottnarmstrong
RepositoryLeanAutoformalizationSkills
Skill namebuild-proof-dependency-graph
Stars
66
Forks
7
Bundled files
6
LicenseCC-BY-4.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 6 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by scottnarmstrong on GitHub. Read the source before you install it.

Installation

Install the Build Proof Dependency Graph AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/scottnarmstrong/LeanAutoformalizationSkills/tree/main/skills/build-proof-dependency-graph
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/scottnarmstrong/LeanAutoformalizationSkills.git /tmp/LeanAutoformalizationSkills
mkdir -p .claude/skills
cp -r /tmp/LeanAutoformalizationSkills/skills/build-proof-dependency-graph .claude/skills/build-proof-dependency-graph
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Build Proof Dependency Graph in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Build Proof Dependency Graph on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Build Proof Dependency Graph is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Build a Proof Dependency Graph

Construct the mathematical topology from the supplied proof text, after the author has approved a small set of exact one-declaration Lean anchor files. Produce a database that a later Lean orchestrator can use immediately, while making no claim that an anchor's proof has been completed.

Keep the boundary sharp

  • Read the source corpus and its cited mathematical inputs. Among Lean files, read only the designated frozen declaration files and frozen-anchor manifest needed to identify the author-approved anchors. Never read implementation modules, proof-status ledgers, or arbitrary Lean declarations.
  • Do not interpret proof bodies, sorry, axioms, imports, or Lean status. A manifest may allowlist draft sorry bodies, but that is later orchestration policy, not evidence this skill can use.
  • Initialize Lean planning fields only: LEAN_STATUS: NOT_STARTED, LEAN_REF: -, and LEAN_NOTE: - for ordinary nodes; use ASSUMED for explicit standing-assumption nodes and EXTERNAL for cited external results.
  • Treat the bundled linter as a database and topology checker. It never interprets Lean proof status and cannot decide whether the extracted mathematics is correct or complete.
  • Treat FROZEN_ANCHORS as immutable Lean ABI nodes. Each anchor has one manifest ID, declaration file, declaration export, source-record ID/version, and author-controlled elaborated ABI hash. With --source-root, the linter hashes the manifest file named in the graph header, parses its identity schema, and requires an exact unique match for every frozen graph node. It never reads Lean proof bodies or interprets manifest state, sorry, or proof metadata. A source-statement correction creates a new versioned anchor and invalidates old audits; neither graph edges nor amendments can change an anchor ABI.
  • Record source-only statement fields for every node. For an anchor, they are a review aid alongside its frozen Lean statement, not permission to edit it.
  • The schema names CONTRACT_ID and CONTRACT_VERSION identify a source-statement record only. That record is not a theorem statement, candidate declaration, approval surface, or substitute for the actual frozen Lean export.
  • Stop after delivering the reviewed graph, coverage manifest, generated dashboard, and unresolved source questions. Do not begin formalization.

Use the bundled resources

Before delegating, read references/agent-packets.md for the extraction and review packet specifications.

Copy these assets into the target project and replace their placeholders:

Run scripts/proof_depgraph.py --help for linter options. Keep the script in the skill or copy it into the target project if the graph will be maintained there.

Phase 0: author-freeze anchors before graph extraction

Work source-first. Select one or a few declaration-sized definitions/theorems per subsection that carry its mathematical interface. Only their actual exact Lean declarations may become anchors. Markdown descriptions, candidates, tracked probes, placeholder types/bodies, fallback definitions, and promised future characterizations have no anchor status. A transient untracked file may elaborate the exact final command and must then be deleted.

The author approves the complete exact Lean command before dependency extraction. Place each in its own declaration-only .lean file. Freeze each approved keystone proposition or theorem with the exact body by sorry and manifest state DRAFT_SORRY; do not wait for its proof before anchoring the graph. The durable manifest must record and allowlist that exact body, provider, declaration/ABI hash, and quarantine. The theorem statement is already final but remains FROZEN_UNPROVED. Definitions neither contain nor depend on a draft placeholder.

If the source defines an object by a characteristic property, prove and audit its exact well-definedness theorem first. Only afterward materialize the definition and its separately named, sorry-free full characterization; treat them as one versioned semantic unit. Downstream graph nodes depend on the characterization theorem, not merely on the definition's codomain. The well-definedness theorem may itself be an exact frozen theorem root before the definition exists.

The well-definedness theorem must not assume any existence, integrability, linearity, quadraticity, symmetry, representability, or other proof step unless the source states it as a premise. Model those results as dependencies. After a genuine ∃! result is proved, unique choice is legitimate; a fallback or non-unique selection is not.

Create the manifest before the graph using the frozen-anchor manifest schema. For every anchor record its node ID, project-relative file, exact export, source-record ID/version, elaborated ABI SHA-256, source locator, author/version, and draft-body policy. The ABI hash is supplied and controlled by the authoring process; this skill records it but does not compute or certify it from Lean. With --source-root, the graph linter verifies the header's exact manifest file SHA-256 and binds graph fields to the JSON entry; it never opens Lean proof bodies.

Only then create the graph header: FROZEN_ANCHORS names these node IDs and FROZEN_MANIFEST records its durable relative path and hash. Every graph root must be an anchor. Non-anchor nodes must use - for all FROZEN_* fields. No anchor may be a route, step, application, assumption, or external node.

When the author splits one source theorem or lemma into multiple anchors, record the split ruling and its constant/witness policy in every affected source-statement record: shared means shared across exports; independent means each export may choose its own witness. A shared witness requires a joint frozen anchor; graph edges between separate existential exports do not make their witnesses equal. Do not derive either policy from graph topology.

Phase 1: freeze the extraction specification

Record before reading proofs:

  1. the already author-approved root anchor or anchors;
  2. every in-scope source file and a revision, hash, or dated snapshot;
  3. the exact IDs and scopes of standing assumptions, recorded in STANDING_ASSUMPTIONS, and the policy for cited external results;
  4. stable notation, carrier, normalization, quantifier, and convention choices that a global reviewer must track;
  5. the threshold for a substantive proof-step node;
  6. exclusions, such as background exposition outside the root closure;
  7. the central writer's stable agent/session identity.

Prefer source labels as node IDs. For unlabeled Markdown results, derive IDs from stable heading anchors and semantic slugs. Use parent#slug for an unlabeled proof step. Never make a line number part of an ID; retain line numbers only as revisable locators.

Check every designated root anchor against its source statement before extracting its proof. Record all source-visible premises and the outer-to-inner quantifier order, especially dependency restrictions such as C depending only on d. The graph's source fields may not mention an intermediate estimate merely because the proof uses it, and they may never change the anchor file.

Phase 2: inventory before interpreting

Build the coverage manifest mechanically and then inspect it manually. Include:

  • theorem-like environments and named claims;
  • definitions used by proofs;
  • labeled or reused displayed formulas;
  • Markdown theorem/proof headings;
  • explicit citations and cross-references;
  • proof paragraphs likely to contain unnamed substantive steps.

Give every inventory item exactly one disposition: one or more graph nodes, or EXCLUDED with a concrete reason. An inventory is a checklist, not proof that coverage is complete; fresh reviewers must compare it with the raw corpus.

Phase 3: extract in parallel

Partition ownership into non-overlapping, line-addressable slices aligned to complete statement/proof units whenever possible. Read-only context may overlap across slice boundaries, but node ownership may not. Assign one worker per slice and keep one distinct orchestrator as the single writer and adjudicator. Choose models and reasoning effort appropriate to the mathematics and the repository's resource policy; give every worker a bounded brief.

Require workers to return packets only. Each proposed node must include:

  • exact statement and proof locators;
  • a stable source-family CONTRACT_ID and its CONTRACT_VERSION, which together form the versioned source identity;
  • normalized SOURCE_HYPOTHESES, SOURCE_QUANTIFIERS, SOURCE_CONCLUSION, and CONSTANT_SCOPE fields read from the statement rather than its proof;
  • a stable ID and kind;
  • direct prerequisites with source evidence for every edge;
  • explicit standing-assumption and external-input nodes;
  • substantive child steps;
  • alternative proof routes;
  • ambiguities and cross-slice references.

Do not ask extraction workers to set Lean status or edit the database. Give them the approved anchor IDs and source statement locators, but do not give them implementation modules or proof-status material. Reuse a worker for follow-ups within its slice, but use fresh agents for independent review.

Phase 4: model the proof faithfully

Use only direct dependency edges. Do not add a prerequisite merely because it appears earlier in the paper. An edge can still be direct even when another path makes it transitively redundant: retain it when the target's own proof explicitly invokes or logically consumes that prerequisite.

Create a step node when omitting the step would hide a plausible Lean lemma or an independently failing obligation. Typical examples are a nontrivial estimate, construction, case split, parameter or witness choice, theorem application, quantifier closure, carrier change, or reused intermediate claim. Do not create nodes for routine algebra or purely syntactic rewrites unless they change hypotheses, constants, carriers, or quantifier strength.

If the source asserts or needs a substantive bridge without actually proving it, keep that bridge as a step or application node and mark NOTE with a clear SOURCE_GAP: explanation. Its STATEMENT_SOURCE may point to the target statement and its PROOF_SOURCE to the prose where the bridge is invoked. TOPOLOGY_STATUS judges whether this modeling is accurate, not whether the source proves the mathematics, so an independently confirmed gap can be REVIEWED. Do not silently fill an omitted bridge merely because a reviewer can reconstruct a proof; apply the substantive-step threshold to what the source actually supplies. Never invent a proof-status-like topology value.

Interpret DEPS conjunctively. If the source offers alternative derivations, create one KIND: route node for each derivation and list them in ROUTES on the target. One available route will later suffice. Never put alternatives in one comma-separated DEPS list. ROUTE_FOR is exclusively the ownership field for these route nodes; do not use it as a parent pointer for ordinary proof steps or displays.

Represent standing assumptions and external results as explicit leaf nodes. Do not hide them in notes or magic dependency tokens. Only IDs frozen in the header may use KIND: assumption; the linter rejects undeclared assumption nodes.

Do not turn every bound variable or theorem-local premise into a node. Keep a premise inside its statement unless it is a genuine standing assumption or a substantive obligation established elsewhere. A named local hypothesis package may map to the enclosing theorem node in the coverage manifest; naming alone does not make it a globally ASSUMED leaf. A conditional lemma may therefore be a node without separate nodes for all of its premises. At each later application, create direct dependencies for the source steps that discharge those premises, splitting out a substantive application node when necessary.

Keep source-statement fields and proof topology separate. DEPS names results the source proof consumes; it never enlarges SOURCE_HYPOTHESES. If result B is used to prove A, represent B as a dependency of A, not as an allowed hypothesis of A. A genuinely conditional source lemma records its displayed premises in SOURCE_HYPOTHESES; a helper with additional premises is not the same source node. Never use an edge to launder proof content into a statement.

Phase 5: merge through one writer

Have the orchestrator merge packets, normalize IDs, record its identity in WRITER, and resolve only local, well-supported conflicts. Preserve uncertainty as TOPOLOGY_STATUS: DISPUTED rather than guessing.

For every dependency or route edge, add one EDGE: record naming the target, the target proof's locator where the prerequisite is consumed, and a short direct-use rationale. Do not cite only the prerequisite's own proof site.

Run the linter after each merge wave. Resolve duplicate IDs, dangling edges, route-ownership errors, cycles, uncovered inventory items, and source-path errors before beginning review.

Phase 6: run independent topology audits

Give fresh reviewers the raw source slice, coverage entries, and merged node blocks, but not the extractor's private rationale. Ask them to try to refute the graph by finding:

  • omitted statements, displays, definitions, or implicit bridge steps;
  • dependencies that are missing, reversed, merely transitive, or unnecessary;
  • hidden assumptions or external inputs;
  • alternatives incorrectly modeled as conjunctions;
  • definition/projection cycles;
  • source ranges or statement boundaries that do not match the text;
  • source-statement records that omit, add, reorder, or rescope hypotheses, quantifiers, conclusions, or constants;
  • conditional theorem premises that a downstream application never supplies;
  • EDGE locators that cite the prerequisite instead of its use by the target;
  • cross-slice edges that neither local extractor owned.

Require a distinct reviewer for every accepted node. Set TOPOLOGY_STATUS: REVIEWED only after that review; otherwise retain PROPOSED or DISPUTED.

Delegate at least one fresh adversarial pass over the complete root closure to an agent distinct from the writer and the relevant extractors. Use one or two fresh reviewers with sufficient mathematical capability and have the distinct orchestrator adjudicate their findings. Check root identity, statement strength, carriers, normalizations, quantifier order, constant scope, exact source-statement fields, conditional-premise discharge at consumers, edge use sites, global conventions, cross-section edges, and the AND/OR route structure. Record the independent reviewer and durable report in GLOBAL_REVIEWER and GLOBAL_REVIEW_REF; the linter rejects a global reviewer who is the writer or already served as a node extractor. The orchestrator must enforce the stronger procedural rule that this agent did not perform an earlier slice review.

Phase 7: validate and publish

Run, at minimum:

bash
python3 scripts/proof_depgraph.py \
  --db DEPGRAPH.md \
  --manifest DEPGRAPH_COVERAGE.md \
  --source-root . \
  --require-reviewed \
  --require-complete-coverage \
  --require-initial-lean-status \
  --require-all-reachable \
  --write-dashboard

python3 scripts/proof_depgraph.py \
  --db DEPGRAPH.md \
  --manifest DEPGRAPH_COVERAGE.md \
  --source-root . \
  --require-reviewed \
  --require-complete-coverage \
  --require-initial-lean-status \
  --require-all-reachable \
  --check

Do not call the graph ready until:

  • every root exists and its full dependency closure is represented;
  • every graph node feeds at least one declared root;
  • every coverage item is mapped or explicitly excluded;
  • every in-closure node is independently reviewed;
  • every node has reviewed, complete source-statement fields;
  • every edge has source evidence;
  • the global reviewer is independent of the central writer;
  • no topology dispute, dangling reference, ownership error, or cycle remains;
  • the generated dashboard is current;
  • all ordinary Lean fields remain initialized rather than inferred.

Report the node and edge counts, roots and root-closure size, dependency leaves, external and assumption boundaries, alternative-route count, topology-review queue, explicit SOURCE_GAP nodes, excluded inventory items, and any unresolved questions. Do not compute or report a Lean proof frontier in this skill.

Hand the published graph and frozen-anchor manifest to the later Lean orchestrator only after this gate passes. That workflow develops implementation lemmas beneath the anchors and must compile an exact-type probe before marking an anchor certified; this source-only skill neither creates nor evaluates that probe. The required order is always author-frozen anchors → anchored source graph → Lean orchestration, never the reverse.

Maintain structural history

During initial one-writer drafting, edit proposed records normally. After the graph is published, correct structural facts with append-only AMEND records and an independent reviewer. Never silently rewrite historical dependency or source claims in a shared campaign. Corrections to source-statement fields on ordinary graph nodes are structural changes: use reviewed SET_CONTRACT_ID, SET_CONTRACT_VERSION, SET_SOURCE_HYPOTHESES, SET_SOURCE_QUANTIFIERS, SET_SOURCE_CONCLUSION, or SET_CONSTANT_SCOPE amendments. A frozen anchor is different: never amend its statement/proof source locators or source identity. Create a new versioned declaration file and manifest entry, update the author-approved anchor list, and invalidate every audit tied to the old ABI. DEPS may be amended as proof topology evolves, but it never alters an anchor ABI.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Build Proof Dependency Graph AI skill do?

Build an independently reviewed, source-level dependency database anchored to exact author-frozen Lean declarations. Use after source-first approval of one-declaration anchor files, when an orchestrator must trace roots through LaTeX, Markdown, or other line-addressable proof sources, expose substantive proof steps and external inputs, and produce a structurally checked graph for later Lean orchestration. Do not use this skill to inspect implementation Lean code or decide whether any theorem is proved.

Why use Build Proof Dependency Graph on TypingMind?

Because you install it once and use it with any model. Build Proof Dependency Graph is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Build Proof Dependency Graph in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/scottnarmstrong/LeanAutoformalizationSkills/tree/main/skills/build-proof-dependency-graph. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Build Proof Dependency Graph?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Build Proof Dependency Graph?

As many as you like. As long as a model supports skills, you can use Build Proof Dependency Graph with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Build Proof Dependency Graph AI skill free?

Yes. It is published on GitHub by scottnarmstrong under the CC-BY-4.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇