其他
在 Lean/Mathlib…
在 Lean/Mathlib 中按类型签名模式查找引理,发现某类型可用引理,或做类型导向证明搜索。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在 Lean/Mathlib 证明中知道特定
解决思路
- 使用 `loogle-search` 按类型签名模式搜索 Mathlib 引理。
- 按模式搜索示例:`loogle-search "Nontrivial _ ↔ _"`。
- 搜索函数式模式示例:`loogle-search "(?a → ?b) → List ?a → List ?b"`。
- 搜索同时包含多个名字的引理示例:`loogle-search "IsCyclic, center"`。
- 需要 JSON 输出时附加 `--json`,例如:`loogle-search "List.map" --json`。
- 启动服务器以进行快速查询并让索引常驻内存:`loogle-server &`。
- 查询语法:`_` 表示任意单个类型。
- 查询语法:`?a`、`?b` 表示类型变量;同名变量表示同一类型。
- 查询语法:`Foo, Bar` 表示结果必须同时提到 `Foo` 和 `Bar`。
- 查询语法:`Foo.bar` 表示精确名称匹配。
- 查找 `Nontrivial` 与基数关系的引理:`loogle-search "Nontrivial _ ↔ _ < Fintype.card _"`。
- 查找 map 类函数:`loogle-search "(?a → ?b) → List ?a → List ?b"`,会找到 `List.map`、`List.pmap` 等。
- 查找循环群与中心相关的所有内容:`loogle-search "IsCyclic, center"`,会找到 `commutative_of_cyclic_center_quotient` 等。
- 查找 `Fintype.card` 引理:`loogle-search "Fintype.card"`。
- 性能:服务器运行时每次查询约 100-200ms。
- 性能:冷启动(无服务器)每次查询约 10s,因为要加载 343MB 索引。
- 设置:先构建 Loogle:`cd ~/tools/loogle && lake build`。
- 设置:构建 Mathlib 缓存:`lake build LoogleMathlibCache`,或使用 `--write-index`。
- 与证明集成:在 Lean 证明中卡住时,先确定需要的类型形状。
- 与证明集成:向 Loogle 查询以找到引理名。
- 与证明集成:在证明中应用该引理。
- 证明集成示例:目标为从 `1 < Fintype.card G` 推出 `Nontrivial G`;查询 `loogle-search "Nontrivial _ ↔ 1 < Fintype.card _"`;找到 `Fintype.one_lt_card_iff_nontrivial`;使用 `exact Fintype.one_lt_card_iff_nontrivial.mpr h`。
适用边界 · 注意事项
- 未构建 Loogle、LoogleMathlibCache 或索引时,无法执行查询。
- 只知道自然语言描述而不知道类型形状时,按类型签名模式搜索不适合。
- 非 Lean/Mathlib 环境或不使用 Mathlib 的代码搜索中不适用。