Skip to main content
Glama

rei-verify

反証機械 (refutation machine) — 专精于否定而非生成的验证基础设施 + MCP 服务器。

版本: 0.1.0a1 (2026-08-19) — 4 个原语 + 4 个反证工具 + 8 个 MCP 工具 + 集成演示。 测试 198/0 PASS。


为什么是「反证机械」

生成正在饱和。反证不会饱和。

当前 LLM 很流畅。它们能输出看似合理的证明思路、看似合理的代码、看似合理的定理名称,而与其是否为事实无关。即使基准测试饱和到 96%,这一结构也不会改变。这个世界所缺少的不是「制造看似合理之物的机器」,而是 「能可靠杀死看似合理之物的机器」

反证机械的核心承诺:

  • 收到主张后,将计算资源分配给反例搜索。证明尝试放在后面。

  • 如果未找到反例,则明确返回 「未找到的搜索空间形态」(不将沉默伪装成成功)。

  • 输出中必定附带 「若该主张为假则会崩溃的位置」。Lean 4 的零 sorry 是这一原则最严格的特殊案例。

  • 「未能反证」「正确」 在类型层面被当作不同事物处理。


Related MCP server: prova-mcp

4 值判定(「绝对不说谎」核心纪律)

class Verdict(str, Enum):
    CONFIRMED = "confirmed"           # post-condition PASS + marker 空
    REFUTED = "refuted"               # 具体的な counter-witness が 得られた
    HOLDING = "holding"               # counter-witness 未発見 かつ marker 非空
    INCOMPLETE_FRAME = "incomplete_frame"  # 主張自体が well-formed でない

不采用二元 TRUE/FALSE = 未被反证 ≠ 正确。IUT 12 年持有纪律的类型化。

「不将沉默伪装成成功」的类型保证:除 CONFIRMED 外的所有判定必须 至少包含一个 IncompleteMarker(维度 + 已尝试内容 + 未尝试内容 + 原因)(数据类不变量,不可违反)。


4 个原语 (rei_verify)

原语

角色

Verdict

4 值枚举

IncompleteMarker

4 种维度词汇 (search_space / witness_type / compute_budget / frame) + 所有字段非空要求

AuditChain

sha256 哈希链式追加 JSONL + 篡改检测(verify() 返回 broken_at 索引)

VerifiedExecution

前置检查 + 动作 + 后置检查 + 审计 原子化捆绑 的上下文

4 个反证工具 (rei_verify.*)

反证机械的核心。所有工具返回 VerdictWithMarkers(4 值判定 + 标记 + 审计哈希)的一致形状。

工具

模块

含义

判定模式

refute_lean_source

.refute

执行 Lean 4 源码,验证 sorry / native_decide / 不允许的公理

CONFIRMED / REFUTED / HOLDING / INCOMPLETE_FRAME

search_counterexample

.search

在可迭代空间 + 可调用谓词中搜索反例

REFUTED / HOLDING / INCOMPLETE_FRAME(从不 CONFIRMED)

assert_breakpoints

.breakpoint

N 个带标签案例 × 各自逻辑的穷举检查

REFUTED / HOLDING / INCOMPLETE_FRAME(从不 CONFIRMED)

hold_verdict

.hold

声明式 HOLDING 生成(「保留的类型化」)

HOLDING / INCOMPLETE_FRAME(仅此)

★ 工具输出 CONFIRMED 的只有 refute_lean_source(仅限 Lean 4 内核认定为无 sorry 的案例)。其他 3 个工具始终返回 REFUTED 或 HOLDING = 「反例缺失不等于证明」 纪律的类型层面保证。

8 个 MCP 工具

可从 Claude Desktop / Cursor / Cline 等 LLM 客户端直接调用:

工具

用途

create_audit_chain

创建命名审计链

append_audit_entry

追加原始条目

verify_audit_chain

完整性遍历 + 篡改检测

record_verdict

简单追加 4 值判定 + 标记(强制不变量)

refute_lean

验证 Lean 4 源码

search_counterexample_explicit

反例搜索(x 绑定表达式 + 样本列表)

assert_breakpoints_explicit

穷举检查(ctx 绑定表达式 + 带标签字典)

hold_verdict_tool

声明式 HOLDING

MCP 安全表达式采用 受限求值 = 预先拒绝 __import__ / exec / eval / open / __ 前缀,仅允许 _SAFE_BUILTINS 白名单(abs/min/max/sum/len/int/float/str/bool/round/any/all/range)。


安装

pip install rei-verify           # core primitives (no external deps)
pip install rei-verify[mcp]      # + MCP server

或从源码安装:

git clone https://github.com/fc0web/rei-verify.git
cd rei-verify
pip install -e .[mcp]

需要 Python 3.10+(数据类 + 枚举 + 类型新特性)。核心原语仅依赖标准库(即使没有 mcp 包也能导入)。


用法 — 库

VerifiedExecution(自定义)

from pathlib import Path
from rei_verify import (
    Verdict, IncompleteMarker, PostCheckResult,
    VerifiedExecution, AuditChain,
)

audit = AuditChain(Path("./reasoning.jsonl"))
ve = VerifiedExecution(
    claim="1 + 1 == 2",
    pre_check=lambda: True,
    post_check=lambda r: PostCheckResult(refuted=(r != 2), markers=[]),
    audit=audit,
)
result = ve.run(lambda: 1 + 1)
# result.verdict == Verdict.CONFIRMED
# result.audit_hashes == [h1, h2, h3, h4, h5]  # 5 phase entry

refute_lean_source

from rei_verify.refute import refute_lean_source

result = refute_lean_source(
    claim="trivial True holds",
    lean_source="theorem trivial_true : True := trivial\n",
    audit=audit,
    theorem_name="trivial_true",
    timeout_sec=60,
)
# result.verdict == Verdict.CONFIRMED  (axiom-free, ~1200 ms)

默认允许的公理 = Mathlib 基础 [propext, Classical.choice, Quot.sound]。sorry / native_decide / 不允许的公理会被路由到 HOLDING。

from rei_verify.search import search_counterexample

result = search_counterexample(
    claim="no n in [1,100] equals 42",
    predicate=lambda x: x == 42,
    space=range(1, 101),
    audit=audit,
    space_description="range(1, 101)",
)
# result.verdict == Verdict.REFUTED  (witness marker: n=42)
  • 穷举 → HOLDING(search_space 标记,「缺失 ≠ 证明」)

  • 时间/样本预算 → HOLDING(compute_budget 标记)

assert_breakpoints

from rei_verify.breakpoint import Breakpoint, assert_breakpoints

result = assert_breakpoints(
    claim="Collatz t1=1 orbits descend",
    breakpoints=[
        Breakpoint("n=27", assertion=lambda: descent(27), context={"n": 27}),
        Breakpoint("n=703", assertion=lambda: descent(703), context={"n": 703}),
        Breakpoint("n=6171", assertion=lambda: descent(6171), context={"n": 6171}),
    ],
    audit=audit,
    stop_on_first_failure=True,  # False で 全 breakpoint 実行 (集計目的)
)
  • 任意断点为 False → REFUTED(标签 + 上下文作为见证)

  • 全部通过 → HOLDING(「列出的检查点已穷举 ≠ 覆盖所有案例」)

hold_verdict

from rei_verify.hold import hold_verdict

result = hold_verdict(
    claim="my analytical claim under investigation",
    markers=[
        IncompleteMarker(
            dimension="search_space",
            what_was_tried="5 counterexample approaches",
            what_was_not_tried="structural refutation via categorical semantics",
            reason="categorical angle deferred to next session",
        ),
    ],
    audit=audit,
    notes="manual reasoning pause",
    require_multi_dimension=True,  # 単一 dim なら augmentation marker 追加
)
# result.verdict == Verdict.HOLDING  (audit chain 4 phase entries + caller markers)

用法 — MCP(Claude Desktop)

claude_desktop_config.json

{
  "mcpServers": {
    "rei-verify": {
      "command": "python",
      "args": ["-m", "rei_verify"]
    }
  }
}

或(已安装脚本):

{
  "mcpServers": {
    "rei-verify": {
      "command": "rei-verify"
    }
  }
}

MCP 表达式示例(搜索用 x 绑定,断点用 ctx 绑定):

{
  "tool": "search_counterexample_explicit",
  "arguments": {
    "chain_id": "chain-abc123",
    "claim": "no perfect square in [1,100] equals 42",
    "samples": [1, 4, 9, 16, 25, 36, 49, 64, 81, 100],
    "predicate_expr": "x == 42",
    "space_description": "perfect squares up to 100"
  }
}
{
  "tool": "assert_breakpoints_explicit",
  "arguments": {
    "chain_id": "chain-abc123",
    "claim": "Collatz t1=1 descent",
    "breakpoints": [
      {"label": "n=27 case", "assertion_expr": "ctx['descent'] < 0",
       "context": {"n": 27, "descent": -0.5}},
      {"label": "n=703 case", "assertion_expr": "ctx['descent'] < 0",
       "context": {"n": 703, "descent": 0.2}}
    ]
  }
}

集成演示

examples/collatz_t1_ones_lyapunov_demo.py — 使用 assert_breakpoints 对 trailing_ones(n)=1 的 Collatz 奇数 n 执行 Lyapunov α-descent 扫描。

python examples/collatz_t1_ones_lyapunov_demo.py

示例输出(1,048,575 个样本 / 76.7 毫秒):

α=0.5〜0.85: WITNESS  n=9         r(n)=0.885622  → α refuted ✓
α=0.9:       WITNESS  n=17        r(n)=0.905315  → α refuted ✓
α=0.93:      WITNESS  n=57        r(n)=0.930288  → α refuted ✓
α=0.95:      WITNESS  n=313       r(n)=0.950121  → α refuted ✓
α=0.97:      WITNESS  n=14,601    r(n)=0.970001  → α refuted ✓
α=0.99:      NO WITNESS in range  max r=0.981135 < 0.99  → α NOT refuted in sample

VERDICT: REFUTED  (α=0.99 が サンプル範囲 で 未 refute = finite absence report)
audit chain: 6 entries、 sha256 hash chain intact

见证 n 随 α 收紧而增大(n=9 → n=14,601)= 直接观察到 r(n) → 1 当 n → ∞ 的有限反映,工具遵守了 「不将有限缺失自动升级为 CONFIRMED」 纪律的实例。详细的诚实范围请参见演示内注释。


测试覆盖率

累计 198/0 PASS(6 个测试文件):

文件

断言数

内容

test_skeleton.py

37

Verdict + IncompleteMarker + PostCheckResult + VerdictWithMarkers + AuditChain + VerifiedExecution 不变量 + 4 值判定路径

test_mcp_layer.py

30

工具直接调用 + 验证 + 篡改检测 + 冒烟注册

test_refute.py

22

parse_lean_axioms + classify_axioms + 前置检查 + 实时冒烟(Lean 4.33)

test_search.py

37

4 个退出路径 + 每个样本错误 + 受限求值安全性(8 个恶意表达式被拒绝)+ MCP 工具

test_breakpoint.py

33

前置检查 + 判定路径 + stop_on_first_failure + 时间预算 + var_name 扩展

test_hold.py

39

前置检查 + 有效 HOLDING + require_multi_dimension + 不变量 + MCP + 4 工具形状一致性

# individual
python test/test_skeleton.py
python test/test_refute.py       # requires 'lean' on PATH for live smoke

# all
for f in test/test_*.py; do PYTHONIOENCODING=utf-8 python -u "$f" | tail -3; done

给维护者:PyPI 受信发布者设置

本仓库的 .github/workflows/publish.yml 支持 v 标签推送时发布到 PyPI 正式版* + workflow_dispatch 时发布到 TestPyPI 试运行。使用前需要在 PyPI / TestPyPI 两侧注册受信发布者并创建 GitHub 环境。

详细步骤请参见 TRUSTED_PUBLISHER_SETUP.md

⚠️ 标签推送前请双重检查 workflow.yml + 受信发布者注册(防止「标签 = 发布触发器」事故)。


设计

完整原理请参见 DESIGN.md(8 节):

  • 设计起点(Rei 栈 4 原则)

  • 4 个原语详细说明

  • 判定规则表(单一真相来源)

  • 反证机械 3+1 工具映射

  • 与框架漂移检测器的关系

  • 非目标(骨架范围外)

  • 依赖(零外部依赖的意图)

  • 诚实范围


相关项目


作者

藤本 伸树 (Nobuki Fujimoto)

许可证

MIT(v0.x 不可撤销)。v1.0+ 可能采用 AGPL-3.0 + 商业双许可证。请参见 LICENSE


诚实范围(不可妥协的底线)

  • (i) 骨架的反证工具仅与 Lean 4 直接协作(单文件 lean 执行),依赖 Mathlib 的证明需另开迭代(通过 lake 项目)

  • (ii) IncompleteMarker.dimension 词汇初始仅 4 种,扩展需基于操作经验

  • (iii) 哈希链用于篡改检测,加密签名(如 Sigstore 等)是另一关注点

  • (iv) 受限求值弱于 AST 级别分析(如 asteval 等),高可靠性需求需另开迭代添加依赖

  • (v) 「反证机械」的原创性主张为零([[feedback-world-uniqueness-claim-controllable]])= 仅是基于属性的测试(Hypothesis)+ Lean 4 sorry 检查 + Coq / Isabelle 系行业标准的集成纪律层,新颖性仅在于「4 值判定 + 标记不变量 + 哈希链的类型级集成 + MCP 包装器」的组合纪律

  • (vi) 集成演示(Collatz t1=1)并非 藤本先生实际 Lyapunov 分析的 再现 — 仅为简化版 V = log2(n) 和有限样本下的 工具行为演示,真正复现需通过藤本先生实际 V + 条件 + Lean 4 形式化另开迭代

  • (vii) refute_lean 的「无 sorry」判定依赖 #print axioms = 若 Lean 本身存在内核错误则无法验证(内核错误超出 Rei 范围)

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    A
    maintenance
    MCP server that gives LLMs access to formal verification via Z3 and SWI-Prolog, plus tree-sitter-based source code analysis. Translates natural language problems into formal logic using a template-based pipeline, verifies results with mathematical certainty, and analyzes call graphs for reachability, dead code, and impact analysis.
    89
    207
    Apache 2.0
  • F
    license
    A
    quality
    B
    maintenance
    A calibrated faithfulness screen for informal↔Lean 4 statement pairs, served over MCP. It provides deterministic checks and deep LLM-based analysis to help draft Lean statements.
    2
    6
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that provides tools for certificate verification, equivalence proving, and pre-registration sealing, enabling AI agents to re-derive verdicts from artifacts rather than trust assertions.
    9
    Apache 2.0

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/fc0web/rei-verify'

If you have feedback or need assistance with the MCP directory API, please join our Discord server