Skip to content
nddcv1Public

About

Evidence-backed prerequisite graphs for informal math textbooks and notes

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

17 Commits

Folders and files

Repository files navigation

ProofMap

把数学教材与笔记变成一张每条边都能引用原文的先修依赖图。

在线结构版 · 证据版合成 demo · 设计文档

在线主页是完整结构版:只覆盖数学分析上/下,共 17 章、357 个节点;保留章节、定理名称、编号、页码和依赖边,不含教材原文。高数 C 习题课讲义、线性代数、数学分析脉络已从图中移除。带原文证据的交互样例是 合成 demo(两章合成数据)。完整的教材原文图只能本地构建,避免公开上传版权内容和私人笔记。

ProofMap 结构版

带证据原文的合成 demo:

ProofMap 证据版 demo

它做什么

  • 从数学教材的 chunks.jsonl 中抽取定义、定理、引理、推论、命题。
  • 把独立的证明 chunk 归属到它证明的定理或例题。
  • 抽取四类依赖边:编号引用、命名引用(如 Rolle 定理)、指代引用(“上述定理”)、定义概念边。
  • 每条自动边都保存证明原文中的 quote 和字符区间;没有证据就不生成边。
  • 生成一个单文件、离线可打开的交互 HTML:按章过滤、只看先修/后继、生成学习路径、点开每条边看原文。
  • 抽取错误通过 corrections.yaml 修正,不需要改代码。

方向约定:A → B 表示学 B 之前要先会 A。

为什么值得做

GitHub 上的定理依赖图大多绑定 Lean:形式化数学的依赖是现成的。面向非形式化的中文教材和笔记、要求每条边可追溯原文、并报告抽取误差的项目很少。ProofMap 处理的是“教材散文里的依赖”,难点和卖点都在这里。

快速开始

需要 Python 3.10+。推荐用 uv:

uv sync --extra dev
uv run proofmap build --chunks examples/demo/chunks.jsonl --out build/demo --book demo
uv run proofmap render --build build/demo --out demo.html

打开 demo.html 即可离线浏览。也可以直接打开仓库里的 docs/index.html(在线 demo 的同一份文件)。

用 pip 的话:

python -m venv .venv
# Windows: .venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
pip install -e ".[dev]"
proofmap build --chunks examples/demo/chunks.jsonl --out build/demo --book demo
proofmap render --build build/demo --out demo.html

配合 math-kb 使用

如果你已经有 math-kb 的教材切块 chunks.jsonl:

uv run proofmap build --chunks <path-to-chunks.jsonl> --out build/mathanalysis --book shufeng,shuxia
uv run proofmap audit --build build/mathanalysis
# 本地完整证据版
uv run proofmap render --build build/mathanalysis --out build/mathanalysis/proofmap.html
# 不含教材原文的公开结构版
uv run proofmap render --build build/mathanalysis --out docs/index.html --structure-only

例如本地 math-kb 的产物在 D:/zzt/math-kb/data/chunks.jsonl,把上面的占位路径替换掉即可。--book shufeng,shuxia 只保留数分上/下册;另外三本书不进入图,但 math-kb 原始数据不会被删除。--structure-only 会剥离 statement、proof、别名、source_chunks 和证据引用,只保留结构信息。

build/mathanalysis/ 里会有:

  • nodes.jsonl / attachments.jsonl / edges.jsonl / graph.json
  • attachment_audit.md:归属歧义、未归属、被 detach 的证明
  • edge_audit.md:各类型边数量、未解析/歧义引用、孤立节点、环
  • node_audit.md:重复编号、合并记录、解析警告

build/ 已在 .gitignore 中。不要提交教材原文、私有笔记或原始 PDF。

输出界面

  • 左右两侧分别是过滤器和节点详情;中间是按书/章过滤的依赖图。
  • 实线=定理依赖,虚线=定义概念,点线=指代引用,粗红线=人工确认。
  • 结构版保留章节、定理名称、编号、页码、依赖方向、类型和置信度;默认显示依赖最密的章节,章节下方有“查看全书”入口。
  • 证据版还可以看陈述、归属证明和每条先修边的原文;Markdown 与 LaTeX 在浏览器内用 MathJax SVG 离线渲染。
  • 定理节点优先显示具体名称:教材括注名 → 常用定理名 → 简洁描述名;重名会追加编号。没有正式名称的定理会得到自动描述名。config/theorem_names.yaml 已人工校正默认的第九章,其他章节可以继续补;corrections.yaml 的 names 段优先级更高。
  • 选中节点后可以:
    • 只看先修 / 只看后继;
    • 生成上游拓扑排序的“学习路径”;
    • 搜索名称、编号或 id。
  • 默认隐藏无依赖节点;可以手动切换章节或勾选“显示孤立节点”。

当前状态(2026-11-01)

证据版 demo(examples/demo,合成数据):

  • 12 个节点,11 条边,9 个证明全部归属。
  • 8 个手标证明:attachment accuracy 1.000,edge precision 1.000,edge recall 1.000。
  • 62 个自动化测试。

数学分析子集基线(数分上+下,未提交数据):

  • 覆盖 17 章、357 个节点、115 条边、0 个环。
  • 数学分析上:9 章,143 个节点;数学分析下:8 章,214 个节点。
  • 316 个证明已归属,37 个歧义,12 个未归属;64 条未解析/歧义引用,全部写入 edge_audit.md。
  • 高数 C 习题课讲义、线性代数、数学分析脉络已从 ProofMap 构建中排除(math-kb 源数据未删)。

这些数字是基线,不是“已完成”的声明。真实的 30 个证明黄金集还没标;当前只对 demo 报告指标。

抽取流程

chunks.jsonl
   │  节点抽取(定义 / 定理族,稳定 ID,分页合并)
   ▼
nodes.jsonl ──► 证明归属(同节 + 邻近 + 打分 + 歧义清单)
   │
   ▼
边抽取(编号 → 命名 → 指代 → 定义术语)
   │
   ▼
corrections.yaml(别名 / 强制归属 / 加删边)
   │
   ▼
graph.json ──► 单文件 HTML

证明归属

在同一个 section 内向前最多 5 个 chunk 找最近的定理/例/习题:

  • 同 section +0.45;距离 1–5 加 0.40–0.10;
  • 证明里点名目标编号/标题 +0.30;
  • 目标已有内联证明 −0.50;
  • 最近的目标且分数 ≥0.55 直接归属;其余要求分差 ≥0.15,否则进歧义清单。

边类型

type 含义 置信度
numbered_ref 由定理 9.2.2 explicit
named_ref 由 Rolle 定理 explicit
anaphora_ref 由上述定理 tentative
definition_term 证明/陈述里出现定义术语 inferred
manual corrections.yaml 人工添加 confirmed

同一对节点只保留最强的一条证据边(manual > numbered > named > llm > anaphora > definition)。

数据契约

nodes.jsonl 一行一个节点,至少包含:

{
  "id": "shuxia:定理9.2.2",
  "kind": "theorem",
  "subkind": "theorem",
  "label": "定理 9.2.2",
  "title": "……",
  "aliases": ["定理 9.2.2"],
  "book_id": "shuxia",
  "chapter": "第9章 数项级数",
  "section": "§9.2 上极限与下极限",
  "pdf_page": 31,
  "printed_page": 8,
  "statement": "……",
  "proof": "……",
  "source_chunks": ["shuxia-p0031-0123"]
}

edges.jsonl 一行一条边:

{
  "from": "shuxia:定理7.1.2",
  "to": "shuxia:定理9.2.2",
  "type": "numbered_ref",
  "confidence": "explicit",
  "proof_chunk": "shuxia-p0313-1053",
  "evidence": {
    "quote": "由定理 7.1.2 可知……",
    "char_start": 123,
    "char_end": 156
  },
  "source": "rule"
}

纠错

corrections.yaml 支持:

proof_attachments:
  force:
    - proof_chunk: shuxia-p0313-1053
      target: shuxia:定理9.2.2
      reason: 证明正文复述了该定理条件
  detach:
    - proof_chunk: shuxia-p0401-1402
      reason: 实为例题证明,误挂到定理

aliases:
  shufeng:定理5.2.3:
    - Rolle 定理
    - 罗尔定理

names:
  shuxia:定理9.3.2: 比较判别法

edges:
  add:
    - from: shuxia:定义9.2.1
      to: shuxia:定理9.2.2
      reason: 证明直接使用上极限定义
  remove:
    - from: shuxia:定理3.1.2
      to: shuxia:定理9.2.2
      reason: OCR 编号误匹配

传给 build:--corrections corrections.yaml。

评测

uv run proofmap eval --build build/demo --gold gold/demo_gold.yaml

输出:

gold proofs: 8
attachment accuracy: 1.000
edge precision: 1.000
edge recall: 1.000
tp=11 fp=0 fn=0

黄金集格式见 gold/README.md。gold/textbook_starter.yaml 故意留空:30 个真实教材证明必须人工标注,不能用工具输出回填。

CLI

proofmap build   --chunks <path> --out <dir> [--book a,b] [--corrections yaml]
proofmap audit   --build <dir>
proofmap render  --build <dir> --out <html>
proofmap query   prereq <node-id> [--depth N|all] [--include-concepts]
proofmap query   dependents <node-id> [--depth N|all]
proofmap eval    --build <dir> --gold <yaml>

所有命令支持 --json。query 的输出是上游/下游节点的层级列表。

开发

uv sync --extra dev
uv run --extra dev pytest -q

测试覆盖:节点抽取与分页合并、证明归属、编号/命名/指代引用、定义概念边、纠错、证据 span、环检测、审计、评测、渲染、CLI 端到端。

已知限制

  • v0.1 是纯规则;隐式依赖会漏,LLM 闭集补边在 v0.2。
  • 只收显式 kind=definition;正文里的“称…为…”定义还没抽。
  • 不做跨书依赖,例如数分下引用数分上的定理会进未解析清单。
  • 数分基线里仍有 37 个歧义、12 个未归属证明;需要看 attachment_audit.md 或写 corrections。
  • 没有正式名称的定理会得到自动描述名或“章节主题(编号)”;可以用 corrections.yaml 的 names 段覆盖。
  • 证据页的陈述、证明和证据引用用 Markdown + MathJax SVG 离线渲染;结构版不含原文;终端 CLI 仍输出纯文本。
  • 30 个真实教材证明的黄金集还没标,因此不对真实数据宣称 precision/recall。
  • 公开结构版不包含教材原文;完整证据只在本地构建或合成 demo 中。
  • 笔记覆盖(Obsidian)在 v0.2,还没做。

License

MIT。第三方前端库的许可证在 proofmap/render/vendor/*.LICENSE,说明见 THIRD_PARTY_NOTICES.md。

About

Evidence-backed prerequisite graphs for informal math textbooks and notes

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages