Movement 强化形式验证框架
Movement 的 aptos-core 存储库中的新拉取请求(PR #308)通过 Lean 4 扩展了 Move 标准库的形式验证基础设施。此更新引入了 `vector::index_of` 函数的完整正确性证明,并为错误处理、选项类型、签名者操作和定点算术等基础标准库操作建立了新的规范模块。
Vector Index_Of 精化证明
此更新的核心是对 `vector::index_of`(`stdModuleEnv` 中的字节码索引 19)的全面精化证明,在 `Refinement/Vector.lean` 中添加了 927 行新代码。该证明涵盖了完整的执行路径:循环设置(从 `evalProg` 到循环头的 7 个步骤)、找到路径(元素匹配返回 `(true, k)`)和迭代路径(不匹配时前进到 `k+1`)。关键证明技术包括使用 `(List.map MoveValue.u64 xs).length.toUInt64` 来匹配 VM 步骤计算,启用反射性证明,并对追踪偏移参数的归纳证明采用 `suffices` 泛化。证明包括顶级定理 `vectorIndexOf_returnValues_found` 和 `vectorIndexOf_returnValues_notFound`。
新标准库规范模块
该拉取请求引入了五个新的规范模块,涵盖核心标准库操作:
• Error.lean — 规范错误代码和中止代码算术
• Option.lean — `option::swap_or_fill` 规范和属性
• Signer.lean — 签名者地址提取操作
• FixedPoint32.lean — 定点算术,包括 `create_from_rational`、`floor`、`ceil`、`round`、`min` 和 `max` 操作
• BitVector.lean — 位向量操作,如 `new`、`set`、`shift_left` 和 `is_index_set`
每个模块包括字节码程序、原生函数模型以及连接到 Move 字节码解释器的精化证明。
测试和验证
这些更改通过了全面的测试:`lake build` 仅以预先存在的 `sorry` 警告成功完成,`lake build difftest` 差分测试可执行文件编译无误,完整的差分测试管道在 Rust 语料库验证、Move VM 预言生成和 Lean 评估器验证中实现了 227 个通过测试和零个失败。
对 Move 开发的意义
这一形式验证扩展加强了 Move 生态系统在字节码级别证明标准库函数正确性的能力。精化证明将高级 Move 代码连接到低级字节码执行,使开发者和审计人员能够验证关键操作的行为完全符合规范。错误处理、选项、签名者和算术规范的增加为依赖这些原始类型的复杂 DeFi 和区块链操作的正确性证明提供了基础。

