自动推理技术入门:从代码验证到安全分析

自动推理技术入门

本周,某中心科学部门将自动推理新增为其研究领域之一。做出这一调整是因为自动推理在该中心内部正产生着显著影响。例如,某中心网络服务的客户现在可以直接使用基于自动推理的功能,如IAM访问分析器、S3阻止公共访问或VPC可达性分析器。我们也看到开发团队将自动推理工具集成到他们的开发流程中,从而提高了产品的安全性、持久性、可用性和质量标准。

本文旨在为对自动推理领域一无所知但充满好奇的行业专业人士提供一个温和的介绍。理解本文仅需能够阅读一些小的C和Python代码片段。文中会提及一些专业概念,但仅以非正式的方式进行介绍。最后,提供一些公开的工具、视频、书籍和文章链接,供希望深入了解的读者参考。

让我们从一个简单的例子开始。考虑以下C函数:

bool f(unsigned int x, unsigned int y) {return (x+y == y+x);
}

花点时间思考一下:“函数f有可能返回false吗?” 这不是一个陷阱问题:我特意用一个简单的例子来说明观点。

为了用穷举测试来检查答案,我们可以尝试运行以下双重嵌套的测试循环,该循环在无符号整型所有可能的值对上调用f

#include<stdio.h>
#include<stdbool.h>
#include<limits.h>bool f(unsigned int x, unsigned int y) {return (x+y == y+x);
}void main() {for (unsigned int x=0;1;x++) {for (unsigned int y=0;1;y++) {if (!f(x,y)) printf("Error!\n");if (y==UINT_MAX) break;}if (x==UINT_MAX) break;}
}

不幸的是,即使在现代硬件上,这个双重嵌套的循环也将运行非常长的时间。我将其编译并在2.6 GHz的英特尔处理器上运行了超过48小时,最终放弃了。

为什么测试需要这么长时间?因为UINT_MAX通常是4,294,967,295,这意味着有18,446,744,065,119,617,025个独立的f调用需要考虑。在我的2.6 GHz机器上,编译后的测试循环每秒大约调用f 4.3亿次。但以此性能测试所有18万亿种情况,我们需要超过1360年的时间。

当我们向行业专业人士展示上述代码时,他们几乎立即推断出f不可能返回false,只要底层的编译器/解释器和硬件是正确的。他们是如何做到的?他们进行了推理。他们记得在学校里学过的知识,即x + y可以重写为y + x,并得出结论f总是返回true

自动推理工具为我们完成了这项工作:它尝试使用数学中的已知技术来回答关于程序(或逻辑公式)的问题。在这种情况下,该工具会使用代数来推断x + y == y + x可以用简单的表达式true替换。

自动推理工具的速度可以非常快,即使在域是无限的(例如,无界的数学整数而非有限的C整型)情况下也是如此。不幸的是,工具有时可能会回答“不知道”。我们将在下面看到一个著名的例子。

自动推理科学本质上专注于尽可能降低这些“不知道”答案的出现频率:工具报告“不知道”(或在尝试时超时)的次数越少,它们就越有用。

今天的工具能够对昨天的工具无法处理的程序和查询给出答案。明天的工具将更加强大。我们看到这个领域正在快速发展,这也是为什么在某中心,我们越来越多地从中获取价值。事实上,我们看到自动推理正在形成其自身的良性循环,即更多输入问题驱动工具的改进,而这又鼓励了工具的更多使用。

一个稍复杂的例子

既然我们已经大致了解了什么是自动推理,下一个稍复杂的例子将让我们稍微体验一下工具为我们管理的复杂性。

void g(int x, int y) {if (y > 0)while (x > y)x = x - y;
}

或者,考虑一个在无界整数上的类似Python程序:

def g(x, y):assert isinstance(x, int) and isinstance(y, int)if y > 0:while x > y:x = x - y

尝试回答这个问题:“函数g是否总是最终会将控制权返回给其调用者?”

当我们向行业专业人士展示这个程序时,他们通常能快速找到正确答案。一些人,特别是那些了解理论计算机科学成果的,有时会错误地认为我们无法回答这个问题,理由是“这是停机问题的一个例子,已被证明是无法解决的”。事实上,我们可以对特定程序(包括这个程序)的停机行为进行推理。我们稍后再谈这一点。

以下是大多数行业专业人士在查看此问题时使用的推理过程:

  1. y不为正数的情况下,执行会跳转到函数g的末尾。这是简单情况。
  2. 如果在循环的每次迭代中,变量x的值都在减少,那么最终,循环条件x > y将不成立,从而到达g的末尾。
  3. 只有当y始终为正数时,x的值才会一直减少,因为只有在这种情况下,对x的更新(即x = x - y)才会使其减少。但y的正数性已由条件表达式确立,所以x总是减少。
  4. 有经验的程序员通常会担心C程序中x = x - y命令的下溢问题,但随后会注意到在更新x之前有x > y,因此不会发生下溢。

如果你自己完成了以上三个步骤,那么你就对自动推理工具在分析计算机程序时代我们进行的思考类型有了非常直观的认识。工具必须面对许多细节(例如堆、栈、字符串、指针运算、递归、并发、回调等),但也有数十年的研究论文探讨处理这些及其他主题的技术,以及将这些想法付诸实践的各种实用工具。

关键的启示是,自动推理工具通常代表我们执行上述三个步骤:项目1是对程序控制结构的推理。项目2是对程序内最终成立的事实的推理。项目3是对程序内始终成立的事实的推理。

请注意,像某中心网络服务资源策略、VPC网络描述甚至makefile这样的配置构件都可以被视为代码。这种观点使我们能够使用与推理C或Python代码相同的技术来回答有关配置解释的问题。正是这种见解为我们带来了IAM访问分析器或VPC可达性分析器等工具。

测试的终结?

如上文观察fg所示,自动推理可以比穷举测试快得多。使用当今可用的工具,我们可以在几毫秒内证明fg的属性,而不是用穷举测试等待一生。

我们现在可以抛弃测试工具,完全转向自动推理吗?不完全。是的,我们可以显著减少对测试的依赖,但我们不会在短期内(甚至可能永远不会)完全消除测试。考虑我们的第一个例子:

bool f(unsigned int x, unsigned int y) {return (x + y == y + x);
}

回想一下,有缺陷的编译器或微处理器实际上可能导致从此源代码构建的可执行程序返回false。我们可能还需要担心语言运行时。例如,C数学库或Python垃圾收集器可能存在导致程序行为异常的bug。

测试的一个有趣之处(我们常常忘记)是,它所做的远不止告诉我们C或Python源代码的情况。它还在测试编译器、运行时、解释器、微处理器等。测试失败可能源于计算栈中的任何这些工具。

相比之下,自动推理通常仅应用于该栈的一层——源代码本身,有时是编译器或微处理器。我们发现推理的价值在于它允许我们明确定义我们对正在检查的层所知道和不知道的内容。

此外,自动推理工具使用的周围环境(例如编译器或调用我们过程的过程)的模型使我们的假设非常精确。将计算栈的各个层分开有助于更好地利用我们今天和明天的工具的时间、精力和能力。

不幸的是,在使用自动推理时,我们几乎总是需要对某些东西做出假设——例如,支配我们硅芯片的物理原理。因此,测试永远不会被完全取代。我们将需要进行端到端测试,以尽可能验证我们的假设。

一个不可能的程序

我之前提到,自动推理工具有时会返回“不知道”而不是“是”或“否”。它们有时也会永远运行(或超时),从而永远不会返回答案。让我们看一个著名的“停机问题”程序,我们知道工具无法对此返回“是”或“否”。

想象我们有一个名为terminates的自动推理API,如果C函数总是终止,则返回“是”;如果函数可能永远执行,则返回“否”。例如,我们可以使用此处描述的工具构建这样的API。为了了解终止工具能为我们做什么,考虑两个基本的C函数,g(如上所述)和g2

void g2(int x, int y) {while (x > y)x = x - y;
}

根据我们已经讨论过的原因,函数g总是将控制权返回给调用者,所以terminates(g)应该返回true。同时,terminates(g2)应该返回false,因为例如,g2(5, 0)永远不会终止。

现在来看一个困难的函数。考虑h

void h() {if terminates(h) while(1){}
}

请注意,它是递归的。terminates(h)的正确答案是什么?答案不可能是“是”。也不可能是“否”。为什么?

假设terminates(h)要返回“是”。如果你阅读h的代码,你会看到在这种情况下,由于h代码中的条件语句将执行无限循环while(1){},该函数不会终止。因此,在这种情况下,terminates(h)的答案将是错误的,因为h是递归定义的,调用了其自身的terminates

类似地,如果terminates(h)要返回“否”,那么h实际上将终止并将控制权返回给调用者,因为条件语句的if分支条件不满足,并且没有else分支。同样,答案将是错误的。这就是为什么在这种情况下“不知道”的答案实际上是不可避免的。

程序h是图灵1936年关于可判定性的著名论文和哥德尔1931年不完备性定理中例子的变体。这些论文告诉我们,像停机问题这样的问题无法被“解决”,如果我们所说的“解决”意味着解决方案过程本身总是终止并回答“是”或“否”,但永远不会回答“不知道”。但这不是我们许多人心中“解决”的定义。对于我们中的许多人来说,一个偶尔超时或返回“不知道”但在给出答案时总是给出正确答案的工具就足够好了。

这个问题类似于航空旅行:我们知道它不是100%安全的,因为过去发生过空难,我们确信未来还会发生。但当你安全着陆时,你知道那次它成功了。航空业的目标是尽可能减少故障,尽管这在原则上不可避免。

将其置于自动推理的背景下:对于某些程序,如h,我们永远无法将工具改进到足以替换“不知道”答案的程度。但还有许多其他情况,今天的工具回答“不知道”,而未来的工具可能能够回答“是”或“否”。对于自动推理领域的专家来说,现代的科学挑战是让实用工具尽可能经常地返回“是”或“否”。

另一点需要记住的是,自动推理工具经常尝试解决“难解的”问题,例如NP复杂度类中的问题。在这里,我们看到了与停机问题案例相同的思路:自动推理工具有强大的启发式方法,通常可以绕过特定情况下的难解性问题,但这些启发式方法可能会(有时确实会)失败,导致“不知道”的答案或不切实际的长执行时间。这门科学旨在改进启发式方法以最小化该问题。

术语

科学文献中使用了许多名称来描述相互关联的主题,自动推理只是其中之一。以下是一个快速词汇表:

  • 逻辑:定义何为真何为假的正式且机械的系统。例如:命题逻辑一阶逻辑
  • 定理:逻辑中的一个真陈述。例如:四色定理
  • 证明:逻辑中一个定理的有效论证。例如:Gonthier的四色定理证明
  • 机械定理证明器:一种半自动推理工具,用于检查人类经常编写下来的机器可读的证明表达式。这些工具通常需要人工指导。例如:某中心研究员John HarrisonHOL-light
  • 形式验证:将定理证明应用于计算机系统模型以证明系统所需属性的过程。例如:CompCert验证的C编译器
  • 形式化方法:最广义的术语,仅指使用逻辑对系统模型进行形式推理。
  • 自动推理:侧重于形式化方法的自动化。
  • 半自动推理工具:需要用户提示但仍能在逻辑中找到有效证明的工具。

如你所见,在这个领域工作时我们有多种选择。在某中心,我们选择使用自动推理,因为我们认为它最能体现我们对自动化和规模的雄心。在实践中,我们的一些内部团队同时使用自动和半自动推理工具,因为我们聘用的科学家通常能让半自动推理工具在完全自动推理工具的启发式方法可能失败的地方取得成功。对于我们面向外部客户的功能,目前我们仅使用完全自动化的方法。

后续步骤

在这篇文章中,我通过最小的玩具程序介绍了自动推理的概念。我没有描述如何处理具有堆或并发性的现实程序。实际上,存在各种各样的自动推理工具和技术,解决不同领域的问题,其中一些相当专门。要描述它们以及该领域的许多分支和子学科(例如“SMT求解”、“高阶逻辑定理证明”、“分离逻辑”),将需要成千上万的博客文章和书籍。

自动推理可以追溯到计算机的早期发明者。而逻辑本身(自动推理试图解决的问题)已有数千年的历史。为了保持本文简短,我将在此停住并建议进一步阅读。请注意,深入这个领域很容易迷失在细节中,你可能会比开始时更加困惑。我鼓励你采用有界的深度优先搜索方法,依次查看各种工具和技术的广泛但不深入的细节,然后继续前进,而不是只深入学习一个方面。

文章随后列出了建议的书籍、国际会议/研讨会、工具竞赛、一系列工具链接、某中心员工关于使用自动推理的访谈、针对客户和行业的讲座、针对自动推理科学界的讲座、博客文章和课程笔记等内容,这些具体列表在此翻译中从略。文章最后是关于作者的介绍和相关内容的链接。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

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

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

相关文章

2025石墨烯发热片厂家精选指南不踩坑

2025石墨烯发热片厂家精选指南不踩坑!随着石墨烯发热技术在消费电子、智能家居、医疗护具等领域的应用普及,市场上各类厂家良莠不齐,既有掌握核心工艺的实干企业,也不乏以次充好的“伪石墨烯”服务商。对于采购方而…

2025 年 12 月羽绒服厂家权威推荐榜:涵盖薄款/厚款/男女新款,可水洗/百搭/潮流设计,小红书热门潮牌与通勤经典深度解析

2025 年 12 月羽绒服厂家权威推荐榜:涵盖薄款/厚款/男女新款,可水洗/百搭/潮流设计,小红书热门潮牌与通勤经典深度解析 随着全球气候模式的变迁与消费者对功能性服饰需求的日益精细化,羽绒服行业正经历着一场深刻的…

2025年兰州办公家具工厂口碑推荐:清源顺领衔

摘要 本文深度解析2025年兰州办公家具工厂推荐榜单,聚焦甘肃清源顺家具有限公司的技术优势与产品特色。作为西北地区领先的钢制家具制造商,清源顺以高强度耐用性、环保智造和定制化服务为核心,解决办公家具采购中的…

2025年兰州办公家具品牌排行榜:甘肃清源顺家具有限公司领跑西北市场

文章摘要 本文基于2025年西北地区办公家具市场调研数据,深度解析兰州办公家具品牌排行榜。甘肃清源顺家具有限公司凭借钢制家具技术创新、环保智造优势和全流程服务体系,在品牌口碑、产品质量和服务能力三个维度均位…

2025苏州食堂承包不用愁:苏州承包食堂健康品质全满足

2025苏州食堂承包不用愁:苏州承包食堂健康品质全满足!2025年的苏州,企业与学校对食堂服务的要求愈发明确:既要吃得健康安全,又要控制运营成本,还要兼顾口味与效率。艾媒咨询数据显示,国内团餐市场规模已突破2.5万…

2025苏州会议餐配送优选!专业苏州餐饮公司全程护航

2025苏州会议餐配送优选!专业苏州餐饮公司全程护航!随着2025年苏州各类展会、论坛的密集举办,会议餐配送的需求持续攀升。一场顺利的会议,离不开餐食的稳定保障——既要吃得安全,又要符合不同参会者的口味,还要准时…

2025江西电线电缆厂家优选指南:家装电线厂家哪家好清单

2025江西电线电缆厂家优选指南:家装电线厂家哪家好清单!电线电缆是家装工程中的“隐形生命线”,其质量直接关乎居住安全与用电稳定性。江西作为铜产业资源丰富的省份,孕育了众多电线电缆生产企业,但市场中产品品质参…

2025阻燃电线电缆厂家攻略:3C认证的电线电缆厂家实力盘点

2025阻燃电线电缆厂家攻略:3C认证的电线电缆厂家实力盘点!在建筑、电力、通信等多个领域,阻燃电线电缆是保障安全运行的关键材料。选择一家可靠的厂家,需综合考虑多个维度。首先,3C认证是基础门槛,表明产品符合国家…

2025苏州工作餐配送+苏州盒饭配送合集:味蕾与效率双在线

2025苏州工作餐配送+苏州盒饭配送合集:味蕾与效率双在线!在苏州,无论是企业日常运营、大型活动举办还是临时会议需求,工作餐与商务餐配送服务已成为许多单位的实用选择。这类服务能帮助客户节省时间与精力,将烹饪和…

2025激光焊接机厂家核心推荐:激光焊接机哪家好精选榜单

2025激光焊接机厂家核心推荐:激光焊接机哪家好精选榜单!随着制造业向“精密化、高效化、智能化”转型,激光焊接机凭借焊接变形小、焊缝美观、效率高的优势,已成为汽车配件、医疗器械、五金加工等行业的刚需设备。202…

GEO公司哪家好?2025最新国内GEO公司权威榜单

随着ChatGPT、百度文心等生成式AI平台的普及,企业获取流量和品牌曝光的渠道正在发生深刻变革。而GEO(生成式引擎优化)作为适配这些新平台的关键手段,核心作用是让企业信息更符合AI引擎的推荐逻辑,从而在海量内容中…

2025精密激光切割机厂家盘点:国内激光设备哪家好

2025精密激光切割机厂家盘点:国内激光设备哪家好!在制造业升级的背景下,精密激光切割技术已成为众多行业不可或缺的加工手段。面对市场上众多的激光设备厂商,很多用户在挑选时常常感到困惑。本文将为大家介绍几家在该…

短视频推广公司哪家好?2025工厂短视频代运营公司口碑榜

如今,短视频已经成为企业营销的重要渠道,对工厂而言更是如此。过去,很多工厂依赖传统线下渠道获客,成本高且范围有限,而短视频能让工厂的产品、生产工艺、实力直观呈现给潜在客户,降低沟通成本。从行业现状来看,…

工厂短视频获客哪家公司好?2025 抖音SEO公司口碑榜

在当前制造业数字化营销的大潮中,短视频已从“可选项”变成了企业获客的“必选项”。对于工厂这类产品专业性强、决策链长的B2B企业来说,如何在竞争激烈的抖音平台精准找到客户,成为一道必须攻克的难题。本文将剖析…

浙江粉末涂料品牌哪家好?2025十大优质品牌口碑排行榜出炉

浙江作为制造业大省,粉末涂料需求常年旺盛,从门窗建材到家电配件,都离不开这种能提升产品耐用性的关键材料。优质的粉末涂料不仅能让产品外观更精致,还能有效抵御潮湿、高温等环境影响,延长使用寿命。但面对市场上…

2025优质塑粉生产厂家盘点!热门推荐塑粉品牌口碑之选

从家用的防盗门、阳台护栏,到工业领域的机械设备外壳,塑粉都是提升产品耐用性与美观度的重要材料。它通过特殊工艺附着在物体表面,形成一层坚固的保护膜,能有效抵抗磨损、腐蚀和紫外线。如今市场上塑粉需求越来越大…

2025激光切管机厂家指南:实力激光切管机哪家好品牌测评

2025激光切管机厂家指南:实力激光切管机哪家好品牌测评!2025年,国内激光设备市场规模已突破1500亿元,激光切管机作为管材加工领域的核心装备,正随着智能制造的推进快速普及。它用高能量激光束替代传统刀具,切割精度…

2025PI高温发热膜推荐:350℃PI发热膜推荐清单

2025PI高温发热膜推荐:350℃PI发热膜推荐清单!在新能源、工业制造等领域的高温作业场景中,PI高温发热膜凭借其优异的热稳定性和绝缘性成为核心组件。选择一款适配的350℃PI高温发热膜,需围绕实际应用需求构建多维度评…

2025实力盘点:高温PI发热膜厂家口碑榜单出炉

2025实力盘点:高温PI发热膜厂家口碑榜单出炉!在选择高温PI发热膜厂家时,需综合考虑技术实力、工艺精度、质量稳定性及服务响应能力。建议优先关注企业的研发团队背景、生产设备水平、质量控制体系及行业应用案例。对于…

[vim] E1187: Failed to source defaults.vim Press ENTER or type command to continue

root@OpenWrt:~# vimE1187: Failed to source defaults.vimPress ENTER or type command to continue很容易解决,直接在home directory中,创建一个.vimrc或者.exrc文件即可 touch ~/.vimrc 或者 touch ~/.exrc来源:…