Lean语言如何连接数学与编程

news/2025/10/17 6:05:16/文章来源:https://www.cnblogs.com/codeshare1135/p/19146894

Lean语言如何连接数学与编程

本文基于Leo de Moura在2024年7月国际计算机辅助验证会议(CAV)上的主题演讲改编。

Lean项目概述

2013年,Lean项目启动,旨在弥合自动化与交互式定理证明器之间的差距。自成立以来,Lean在数学界的采用率空前,超越了以往形式化数学领域的努力。最新版本Lean 4使用Lean自身实现,同时也是一个功能齐全、可扩展的编程语言,具有强大的IDE支持、包管理和活跃的生态系统。

2023年,Sebastian Ullrich与作者共同创立了Lean聚焦研究组织(FRO),这是一个致力于推进Lean发展并支持其社区的非营利机构。Lean项目秉承促进去中心化创新的理念,赋能多元化的研究人员、开发者和爱好者社区,共同推动数学实践和软件开发的边界。

Lean简介

Lean是一种开源、可扩展的函数式编程语言和交互式定理证明器,使编写正确且可维护的代码变得简单。Lean编程主要涉及定义类型和函数,让用户能够专注于问题领域及其数据,而非编码细节。Lean有四个主要应用场景:形式化数学、软硬件验证、AI辅助数学与代码合成,以及数学与计算机科学教育。

形式化数学

Lean允许数学家使用对他们来说感觉自然的语法处理高级数学结构。数学界认可其实用性:例如,菲尔兹奖得主Peter Scholze和Terence Tao使用Lean验证他们的新结果;《量子杂志》将Lean誉为数学领域最大突破之一,并且其已被众多流行科学和学术出版物报道。

截至2024年7月,Lean数学库已收到超过300位数学家的贡献,包含158万行代码,在使用中的形式化数学系统中居于领先地位。这一显著增长是在Lean简洁且年轻的情况下实现的:它比同类库至少年轻十年。

软硬件验证

Lean将形式化验证、用户交互和数学严谨性相结合,使其对软硬件验证极具价值。Lean是一个既可编程证明又可验证程序的系统。额外优势是Lean能生成高效代码,其最初为数学家设计的可扩展特性,对于编写清晰可维护代码时创建抽象也非常方便。其益处延伸至任何需要极高精度和安全性的系统,包括航空航天、密码学、Web服务、自动驾驶汽车、生物医学系统和医疗设备等行业。

AI辅助数学与代码合成

Lean受到开发数学和代码合成AI的团体欢迎。关键原因之一是Lean的形式化证明可由机器检查,并能通过外部证明检查器独立审计。此外,Lean的可扩展性允许用户深入系统内部,包括表示证明和代码的数据结构。此功能也用于从Lean证明自动生成动画。

AI研究人员正在利用大语言模型创建Lean形式化证明,并自动将散文翻译成形式化数学。某机构发布了基于Lean的强化学习环境lean-gym。某机构在其数学超级智能平台开发中使用了Lean,该AI模型旨在保证准确性并避免幻觉。某机构创建的AI模型已解决10个国际数学奥林匹克竞赛问题,某机构则在Lean中形式化了与AI安全相关的理论结果。此外,LeanDojo是一个使用大语言模型自动化Lean中证明构建的开源项目。

Lean将机器可检查证明、系统内省和可扩展性独特结合,使其成为推进数学和代码合成AI研究的理想工具。

数学与计算机科学教育

数百万人在学生时代学习数学并在整个职业生涯中使用它。自成立以来,Lean项目一直支持学生的数学推理需求,并使更多样化的人群能够为数学和计算机科学领域做出贡献。有多种教育资源可用于学习Lean,包括互动电脑游戏、计算机科学和数学教科书、大学课程和按需教程。Lean FRO致力于扩展Lean的教育内容,并设想一个孩子们使用Lean作为学习数学的游乐场的未来,按照自己的节奏进步并获得即时反馈,类似于许多人学习编码的方式。

Lean快速导览

Lean结合了编程和形式化验证。让我们通过一个小例子快速了解如何在Lean中编写代码并证明关于该代码的属性。

在Lean中编写代码

首先,定义一个连接两个列表的简单函数:

def append (xs ys : List a) : List a :=match xs with| [] => ys| x :: xs => x :: append xs ys

此函数使用模式匹配定义。对于基本情况,将空列表[]附加到ys得到ys。符号x :: xs表示头为x尾为xs的列表。对于递归情况,将x :: xs附加到ys得到x :: append xs ys。此外,append函数是多态的,意味着它适用于任何类型a的列表。

可扩展语法

上面使用的符号x :: xs并非内置到Lean中,而是使用infixr命令定义:

infixr:67 " :: " => List.cons

infixr命令定义了一个新的中缀运算符x :: xs,表示List.cons x xs。此命令实际上是使用Lean的卫生宏系统实现的宏。Lean的可扩展语法允许用户定义自己的领域特定语言。

证明代码属性

接下来,我们将证明关于append函数的一个属性:连接后列表的长度是它们长度之和。

theorem append_length (xs ys : List a): (append xs ys).length = xs.length + ys.length := byinduction xs with| nil => simp [append]| cons x xs ih => simp [append, ih]; omega

这里,theorem引入了一个名为append_length的新定理。语句(append xs ys).length = xs.length + ys.length是我们要证明的。by ...块包含证明。在此证明中:

  • induction xs with启动对xs的归纳证明;
  • nil情况使用Lean简化器simp证明基本情况,参数append指示简化器展开append的定义;
  • cons x xs ih情况证明归纳步骤,其中ih是归纳假设,也使用simp和完成算术推理的omega

在此证明中,inductionsimpomega是策略。策略是将证明的一种状态转换为另一种状态的关键,在Lean的交互式定理证明中至关重要。

Lean在某机构的实际应用

在某机构,Lean被用于多个开源项目,以应对复杂的验证和建模挑战。这些项目不仅突出了Lean在不同领域的实际应用,也强调了某机构对开源开发和协作的承诺。我们涵盖四个关键项目:Cedar、LNSym和SampCert(其Lean源代码已在GitHub上可用),以及AILean(正在探索大语言模型与形式化数学的关系,其代码尚未开源)。

Cedar:开源策略语言和评估引擎

Cedar是一种开源策略语言和评估引擎。Cedar使开发人员能够将细粒度权限表达为易于理解的策略,并在其应用程序中强制执行,从而将访问控制与应用程序逻辑解耦。Cedar支持常见的授权模型。它是首个从头开始构建,使用自动化推理进行形式化验证,并利用差分随机测试进行严格测试的策略语言。

Cedar项目使用Lean为Cedar运行时的每个核心组件创建可执行的形式化模型。该模型作为高度可读的规范,允许团队使用Lean证明关键的正确性属性。

选择Lean对Cedar建模是因为其快速的运行时、广泛的库、IDE支持和小型可信计算基。快速的运行时支持Cedar模型的高效差分测试。这些库提供了由开源社区构建的可重用验证数据结构和策略。Lean的小型可信计算基使Cedar能够自信地利用这些贡献,因为Lean检查其正确性,仅需要信任Lean的最小证明检查内核。

LNSym:密码学验证的符号模拟

LNSym是Armv8原生代码程序的符号模拟器。目前正在开发中,重点在于实现对密码机器代码程序的自动化推理。许多密码例程用汇编语言编写,以优化底层处理器的性能和安全性。LNSym旨在降低验证密码例程的成本,最终使密码学开发人员能够对其原生代码程序进行形式化推理。

LNSym使用Lean作为建模Arm指令语义和密码协议的形式化规范语言,并作为推理这些工件的定理证明器。由于Lean程序是可执行的,规范通过全面的一致性测试实现了高度信任。Lean协调证明,使得繁重且通常繁琐的工作通过决策程序自动完成。当证明自动化失败时,用户可以将Lean用作交互式定理证明器。这种交互式与自动化定理证明的结合确保了验证任务的进展不受证明自动化限制的阻碍。

SampCert:形式化验证的差分隐私原语

SampCert是一个形式化验证的差分隐私原语开源库,被某机构清洁房间差分隐私服务用于其快速且可靠的采样算法。使用Lean,SampCert提供了离散高斯采样器的唯一验证实现。

尽管SampCert专注于软件,但其验证严重依赖于Mathlib(Lean数学库)。解决数据隐私实际问题的代码验证依赖于从傅里叶分析到数论和拓扑的数学概念的形式化。

AILean:AI用于数学与数学用于AI

AILean正在探索大语言模型与形式化数学的关系。这种探索是双向的:AI用于数学和数学用于AI。在AILean中,大语言模型用于增强形式化数学中的证明自动化和用户体验。大语言模型可以分析定理陈述和现有证明步骤,建议相关的引理、定义或策略,以指导用户完成证明。它们还可以识别常见错误或不一致之处,提出修正或替代方法,从而改进证明开发过程。

关键要点

Lean是一个复杂系统,但其正确性仅依赖于一个小的可信内核。此外,所有证明和定义都可以导出并独立审计和检查。这对于数学和软件验证社区来说是一个关键特性,因为它消除了信任瓶颈。无论您是谁;如果Lean检查了您的证明,全世界都可以在此基础上构建。这使得从未谋面的大型数学家群体能够协作并共同工作。此外,它允许用户扩展Lean,而无需担心引入可能损害系统逻辑一致性的可靠性错误。

Lean的可扩展性支持定制,这在其资源有限的前十年尤为重要。Lean的可扩展性允许社区扩展系统,而无需与其开发人员同步。自托管,或在Lean中实现Lean,也确保了用户无需学习不同的编程语言即可访问系统的所有部分。这使得扩展Lean变得简单方便。

某机构引入的FRO模型在支持Lean并帮助其过渡到自给自足的基础方面发挥了重要作用。Lean项目已显著成长,如果没有某机构确保慈善支持的努力,推动其前进将会很困难。正如某机构和某机构基金会对开源项目的成功和可持续性至关重要一样,某机构的支持对Lean的持续进展也至关重要。

要了解更多关于Lean的信息,请访问其官方网站。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Github上文本切分相关的优秀项目

Github上文本切分相关的优秀项目Github上有几个不错的文本切分相关的优秀项目,涵盖了不同技术方向和应用场景:AntSK-FileChunk特点:基于语义理解的智能文本切片工具,支持PDF、Word、纯文本等多种格式,通过语义分析…

微信机器人开发

微信机器人开发、微信二次开发文档、微信个人发消息api "WTAPI"是一个基于微信开放平台的二次封装API服务,旨在简化开发者与微信对接的流程。提供了丰富的功能API,包括好友管理、消息管理、群管理、朋友圈…

原型链污染学习

目录示例题目题目1题目2思路如何找到修改的变量?(题目1思路&步骤)题目2思路题目2做题步骤 前两天在打几场新生赛练手的时候,遇到了两三道关于python原型链污染的基础题,发现这方面知识点还是匮乏,所以以这两道题目…

重新认识 Golang 中的 json 编解码

欢迎访问我的个人小站 莹的网络日志 ,不定时更新文章和技术博客~json 是我的老朋友,上份工作开发 web 应用时就作为前后端数据交流的协议,现在也是用 json 数据持久化到数据库。虽然面熟得很但还远远达不到知根知底…

(二)CUDA在Windows系统上的编译运行方法

前言 本文记录cuda库在windows系统上的编译运行的3种方式,主要包括命令行编译、VisualStudio2017编译、VSCode上编译等。 ​一、windows环境下CUDA环境配置 1.下载MinGW以使用GCC编译器 下载MinGW链接:https://githu…

关于价值原语与AI元人文构想的对话全记录——DeepSeek研究

关于价值原语与AI元人文构想的对话全记录——DeepSeek研究 基于这份详尽的对话记录,我们可以进行一次深入的、系统性的研究,超越表面的技术讨论,探寻其背后的哲学意义、现实可行性及未来路径。 这份对话展现了一场思…

251017

251017为了满足别人给我的不可能完成的任务,我编了一个又一个的故事,虽然这些故事从来没有真实的发生过,但一定是别人想发生的,我来像母亲一样哄骗他们,大家一起在白天做梦,真真假假假假真真,反正明天不是阴天就…

关于价值原语与AI元人文构想的对话全记录

关于价值原语与AI元人文构想的对话全记录 第一阶段:价值原语的哲学解析 用户:帮我分析,价值原语,如尊严,可以如何继续拆分 助手:从伦理学、哲学和价值理论角度对“尊严”进行结构化拆分:自主性 - 个人决策控制能…

升鲜宝生鲜配送供应链管理系统,辅助开发工具,《多语言自动翻译与导出工具(WinForms版)》开发文档 及 阿里云机器翻译,数据库Mysql .net 全部源代码

多语言自动翻译与导出工具(WinForms版)开发文档 一、系统简介 本工具是一款用于自动翻译多语言字段并导出国际化数据的桌面应用,支持从 MySQL 数据库读取中文内容,调用阿里云机器翻译 API 自动生成 繁体中文 (zh-T…

植物大战僵尸全系列下载 PVZ植物大战僵尸全集版分享下载 原版民间修改版含安卓手机+电脑+ios各平台

PVZ植物大战僵尸全集版分享下载 原版民间修改版含安卓手机+电脑+ios各平台 《植物大战僵尸》凭借其经典的玩法,催生了大量官方版本和极具创意的民间改版。以下我将为你…

Pytorch66页实验题

import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt import numpy as npprint("林丽坤参与了 …

记一次激活Jetbrains全家桶流程

最初是在网上第三方找到的Crack文件,该文件的原作者与原网址不得而知,按照网上的二手教程进行操作,结果Pycharm激活完成了,IDEA却没有。今天突发奇想,想到激活文件sniarbtej-2024.2.8.jar应该是个极少见、极有特色…

uni-app x开发商城系统,商品列表

一、概述 上一篇已经实现了Icon 图标显示,接下来,展示商品列表数据,效果如下:二、布局页面 可以看到,显示为2列,每一列有2条数据。 这里依然使用flex布局,在开发的时候,我们可以在页面中,先把数据固定好,可以…

PySimpleGUI 中有没有类似VB的timer组件

在PySimpleGUI中,没有直接等同于VB的Timer组件,但可通过以下两种方式实现类似功能,且PySimpleGUI 5.0+版本提供了更优化的定时器管理方案: 一、通过window.read(timeout)模拟定时器原理:利用window.read(timeout)…

【填坑】电脑用户名有中文字符,如何与github建立SSH连接

前情提要 因为我之前很作死的在电脑本地用户名中设置了中文字符,导致始终无法与github建立ssh连接 如今通过hexo在github上建立了一个博客,为了更新方便,如今是必须要姐姐这个ssh连接github的历史遗留问题了。 好在…

向量空间与子空间

映射 对于集合 \(X,Y\),定义映射 \[F:X \to Y \]表示 \[\forall x\in X, F(x)\in Y \]若 \(\forall x_1\neq x_2\),\(F(x_1)\neq F(x_2)\),称 \(F\) 为单射。 若 \(\forall y\in Y\),\(\exists F(x)=y\),称 \(F\)…

西工大开源 Easy Turn:全双工轮次转换检测模型;百度 MuseSteamer 引入开放世界生成能力丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态…

10/16

今天体测了,肺活量5700,引体向上也有分,明天一定好好学习

MrakDown学习

MrakDown学习$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");MarkDown 标题 +空格+名字 字体 (粗体)Hello World (斜体)Hello World (斜体加粗)Hello World …

2025.10.16总结

对uml九种图的总结 1. 用例图核心描述:从用户(参与者)角度描述系统的功能需求。它定义了系统的边界,说明了“谁”在系统“内部”能“做什么”。 核心元素: 参与者:系统外部的、与系统交互的人、组织或其他系统。…