Robert Constable在正确的典型编程上

||对话

罗伯特·l·康斯特布尔他是自动推理和软件验证领域Nup金宝博娱乐rl研究小组的负责人,并于1968年加入康奈尔大学。他指导了40多名计算机科学博士研究生,包括计算机科学系的第一个毕业生。他以将程序和数学证明联系起来的工作而闻名,这导致了可靠软件自动化生产的新方法。他写了三本关于这个主题的书以及许多研究文章。金宝博娱乐康斯特布尔教授毕业于普林斯顿大学,在那里他与计算机科学的先驱之一阿隆佐·丘奇共事。

卢克·穆罕沃斯:在你的一些工作中,例如,Bickford&Constables(2008),您讨论为设计程序的“逐个建设”和“安全逐建设”方法。你能解释一下这些方法是什么,以及为什么被使用?


罗伯特·康斯特布尔

简短的摘要

编程语言的历史表明,类型是有价值的,因为编译器可以检查程序的类型正确性,并通知程序员他们的代码是否与类型规范完全匹配。类型描述了对编程任务的要求,在数学和越来越多的计算中使用的非常丰富的类型系统完全描述了某些技术任务,我们将在下面看到。金宝博官方类型系统越多,有助于程序员的规格越多,可以了解其目标和实现金宝博官方它们的程序。金宝博官方系统设计人员可以准确地指定许多要求和计算任务,并将其组织成模块(或对象),成为用于分析和构建计算系统的蓝图。

当类型富有足够丰富以完全指定任务时,我们刚才概述的方法成为一个例子正确的建筑编程。这种方法已经在数学问题上研究了几十年,从60年代末到70年代初,也被用于编程问题。例如,如果要实现正确的基于构造的因式分解算术基本定理(FTA),即每一个大于1的自然数都可以被唯一地分解为一个质数的乘积,我们可以首先将这个任务表示为一个使用类型的规划问题。然后通过编码一个可计算函数来解决这个问题与适当的类型因子。对于程序员来说,类型可能就像FTA定理一样清晰。如下所示。它要求取一个大于1的自然数n作为输入,并返回一个数对(p,e)的列表,其中p是一个素数,e是它的指数。我们把列表写成[(p1e1),(p2e2),…,(pnen)]并要求n = p1E.1X…X pnE.n哪里p.E.意思是' p ^ e,和e一世是所有自然数字,x是乘法(并作为两种类型的笛卡尔乘积而过载)。此外,完整的FTA定理要求分解是唯一的。我们以后讨论唯一性。对于分解部分,考虑示例因子(24,750)= [(2,1),(3,2),(5,3),(11,1)]。自24,750以来,这是正确的= 2 x 9 x 125 x 11,其中53.是125。在丰富的系统中,可以完全描述算金宝博官方术基本定理的分解件作为编程任务最终的项目,因素,可以看作是完成因式分解的建设性证明。类型检查器检查程序是否具有正确的类型。这个项目因素正确的建筑因为众所周知,它具有编码以解决的问题的类型。

从属类型

这一段有点技术性,可以跳过——或者作为使用依赖类型的函数式语言编写因子分解的指南。以下是上面的大致情况分解任务在AGDA,COQ和NUPRL证明助手的编程语言的金宝博官方类型系统中描述了 - 稍后有点。在英语中,类型规范需要Nat,自然数的类型,0,1,2…,并且说:给定一个自然数n大于1,计算一对数字的列表,(p,e),其中p是素数,e是自然的数字,使得输入值n可以作为所有素数P的产品写入列表,每个列表升到与它配对的电源E(指数e)列出LST..符号上可以这样写n ++是那种(n: Nat n > 1).我们还定义了类型主要的作为(n: Nat ' (n))对于布尔值的表达式' (n)我们把它写成函数Nat布尔值。这是FTA因子化类型

(n: n ++) ->(lst:List[Prime x Nat] where n = prod(lst))。

注意符号x(' x Nat)表示类型构造函数订购对的数字。它的元素是有序对(p,e)正确的类型,p一种主要的E.一种Nat.当然,我们需要定义产品功能,刺激(lst),在列表中低水位体系域成对以正确的方式。这很简单,使用诸如AGDA,COQ和NUPRL等语言的功能编程,我们具有上述功能类型。我们可以将这种编程问题分配给第一年的本科生,他们将很容易地解决,特别是如果我们给他们快速' (n)过程。

编写简洁解决方案的另一种很好的方法是使用地图fold_left通常在列表处理功能库中提供的函数。该解决方案使用众所周知的地图减少范式在功能规划课程中教授多年并广泛用于行业。用地图解决并减少是一种良好的练习,因为减少功能fold_right.数学归纳法是把列表定义为一种特定的非常通用的递归程序。

历史的角度

从Algol 60到Java和OCaml等主流编程语言的发展表明,类型系统已经变得越来越具有表达性。金宝博官方例如,现在可以将函数作为对象来处理已经成为标准,例如,将函数作为输入传递,将函数作为输出产生,将函数作为显式值创建,就像我们在上面的FTA示例中所做的那样。类型检查和类型推断算法已经跟上了这一趋势,尽管OCaml还不能检查我们为FTA、Agda、Coq、Nuprl和其他由证明助手支持的编程语言创建的类型(它们都使用某种形式的自动推理帮助)。对使用非常丰富的类型定义的程序进行静态类型检查是一种明显有效的技术,它可以精确地指定任务、在编写代码时记录代码、使代码更易于他人阅读(包括您自己在几个月后重新访问代码时)、发现错误和安全地进行更改。使用更高阶的类型,如函数类型,可以精确地定义更多的编程任务,并可以生成完整的代码正确的建筑

到1984年,研金宝博娱乐究人员在这种类型检查技术中创造了一个极端点,其中类型系统非常丰富,它们基本上可以以完全“正式”的细节描述任何数学编程任务。金宝博官方类型还表示了对规范所依赖的数据和计算环境的假设。这些极其丰富的类型系统基本上可以表达数学中的任何问题金宝博官方。事实上,Coq已经被用于正式证明四色定理以及其他数学中的重要定理。由证明助手进行的类型检查通常需要人工干预以及复杂的推理算法。我们提到的类型系统金宝博官方也足够强大来描述FTA因数分解的唯一性。他们可以通过将任意因式分解转化为函数的标准因式来实现因素先前定义。可能会调用该函数正常化,它可以将任何分解转换为标准的作业,其中Primes按顺序提升到最高功率。

其中最知名的现代证明助理是Agda, Coq, HOL, Isabelle, MetaPRL, Minlog, Nuprl和PVS。Nuprl是其中的第一个,建于1984年,Coq助手是用OCaml编写的,并由INRIA通过法国政府提供支持。Coq被广泛教授并用于编程。这些证明助手帮助程序员使用自动推理方法检查极其丰富的规范。这些类型足够丰富,可以保证具有该类型的程序对指定的任务是正确的。这是一种主要形式的正确的构造编程,有时包括从一个说明可以实现的证明中提取程序的技术;这叫做使用证明的程序

金宝博娱乐研究目标

一个首要的研究目标是设计类型系金宝博娱乐统和编程助手来表达任何计算问题,并提供类型检查的机制,金宝博官方也许可以借助人类的帮助和使用自动推理工具,无论类型系统变得多么具有表现力。

金宝博娱乐在世界范围内,编程语言、形式化方法和逻辑的研究人员都在致力于这个目标。在研究文献中有很多引用这一目标的进展。金宝博娱乐亚当·克里帕拉的新书具有依赖类型的认证编程从MIT Press,2013年,提供了最新的景象,专注于广泛使用的COQ验证助理。1991年由Simon Thompson预订,类型理论与函数式编程,来自Addison-Wesley,是这个主题的早期综合文本书之一,因为它只是获得动力。Nuprl是自1984年以来仍然活跃的这种最古老的校验助手。它已在1986年的书中描述用Nuprl证明开发系统实现数学金宝博官方.Nuprl文献和2006年前后该领域的概述可以在技术文章“使用NUPRL计算类型理论的创新“ 来自应用逻辑学报,4,4,228-469,2006。作者的2010年关于“类型的胜利“在2010年的庆祝活动中数学原理在剑桥,英格兰叙述了100岁的类型理论故事,并通过施工编程来连接到当前对正确的型号的研究。金宝博娱乐金宝博官方它可供选择www.nuprl.org

当类型系统可以指定安全性金宝博官方属性时,已选中的程序是安全的建设.在构造编程的正确性和安全性方面,规范包括关于计算环境的假设,比如关于网络拓扑。如果这些假设不成立,比如因为网络拓扑发生了意外的变化,那么类型规范就不再足以保证正确性。因此,记录类型规范所依赖的假设是非常重要的。

对于许多问题,这些假设是稳定的,在这些情况下,这种正确性方法是非常有效的。在文献中有很好的例子;在网站上www.nuprl.org我们最近发布了一个简单的例子,以说明新人的方法。这是一个完整的正式证据,使我们能够通过施工计划构建正确的施工计划来解决用于从类型规范开始教授正式程序开发的“最大段”问题。

最近的工作

作者和他的同事在康奈尔最近使用NuPRL通过在数据库系统中使用的多PaxoS分布式共识协议协议的施工版本来创建正确的。金宝博官方这需要实现的分布式计算理论,这是稳步发展的。我们已经提出了这一协议攻击宽容,这是一种安全形式。共识协议对云计算至关重要,行业很难正确地建立它们,并使其确保它们被修改和改进。金宝博娱乐自1984年以来,研究人员创造了施工计划的数百个正确,并通过施工计划安全。全世界正在建造更多。

现代证明助手在施工方案中稳定和安全地变得更加强大,有效,因为有一个研究势在必行和使用它们的经济激励。金宝博娱乐作为工作的教导,也有强烈的激励软件基础宾夕法尼亚大学的本杰明·皮尔斯和他的同事展示的。证据助手是一种令人上瘾的技术,部分原因是它们使用得越多,就会不断提高自身的吸引力和价值。


路加福音:您认为将“施工正确”和“施工安全”的方法应用于通常被称为“人工智能”的方法的前景如何?


罗伯特: 这校对助理例如Agda, Coq和Nuprl,它们通过构建程序来支持正确的编程,它们本身就是人工智能的例子,因为它们使用人工智能中开发的自动推理工具。最早的证明助手,如波耶-摩尔证明器,出自爱丁堡大学的人工智能系。这一领域的重要著作之一,数学推理的计算机建模,艾伦·邦迪(Alan Bundy)在爱丁堡的著作是人工智能领域的里程碑,由学术出版社(Academic Press)于1983年出版。

在适当的时候,这些证明助手将使用其他人工智能工具,如那些可以将正式证明转化为自然语言证明的工具。在这方面已经取得了有趣的进展。比如我和Holland-Minkley, Barzilay在16篇文章中所写的“高级正式证明的口头化”th1999年全国人工智能大会,277 - 284将数论中的Nuprl证明翻译成自然语言。

这些系统也可以互相扩展。金宝博官方例如,现在我的同事Vincent Rahli和Abhishek Anand正在使用Coq证明器来检查他们想要添加到Nuprl的新规则,关于他们在Coq中辛苦形式化的Nuprl构造类型理论的语义模型是正确的。他们还使用Agda检查了某些规则。这正是你问的问题,答案是肯定的。

另一方面,当谈到机器学习算法时,他们成功的标准是更多的经验。他们真的表现得很好吗?Regina Barzilay(麻省理工学院)和Lillian Lee(康奈尔大学)教授在他们2002年的文章“bootstrapping词法选择”中使用了机器学习算法来提高从Nuprl数学到自然语言的机器翻译性能。对于这类工作,通过构造程序正确使用并不一定有意义。另一方面,我们可以想象这样一种情况,正确的数学翻译可能是至关重要的。在这种情况下,我们可能不会试图证明机器学习算法的特性,而是会尝试捕捉自然语言版本的含义,并将其与原始数学版本进行比较。

“了解自然语言数学”的工作将受到施工规划的正确性。已经有了优秀的工作来使用建设性类型理论来为自然语言理解提供语义基础。这本书由alne ranta,类型 - 理论语法,1994年的牛津大学就是一个很好的例子。它也是对构造型理论最好的介绍之一。

最终,机器学习算法将对证明助手的有效性产生重大影响。这是因为我们可以提高证明助手独立处理各种子任务的能力,方法是教它们专家如何处理这些任务。这种工作将是AI的两个方面结合在一起的一个很好的例子。机器学习指导机器证明,但自动推理工具检查它是一个正确的证明。


路加福音:在未来的10-20年里,您认为证明助手和相关工具会有什么发展?


罗伯特四十年来,我一直在研究证明助手、编程逻辑和构造型理论,其中的一部分工作是做出未来五到七年的预测,并试图吸引资金,以实现一个可行的目标,从而推动该领域的发展。为了保持可信度,你需要在任何时候都保持正确。我的这些预测中有8个是对的,而不是错的。所以我对未来5到7年的预测很有信心,我对未来10年有想法和希望,然后我对长期有信心。

短期内

在未来五年中,我们将通过施工规划在构建重要软件方面的施工方案和更多示例的验证软件系统,如Sel4内核,安全软件堆栈,英特尔硬件的功能以及重要协议以及重要协议的更多示例金宝博官方分布式计算,尤其是云计算。这将是因为它变得具有成本效益。即使在未来十年内,我也没有看到主要的工业努力。该领域将是持续的学术和工业研究的重点,它将对某些关键系统产生渐进效应。金宝博娱乐金宝博官方但是,在工业中广泛的展开部署将保持太贵。

我们将看到正式的工具,用于使网络战的冒犯和防御性武器更有效。其中一个关键的课程推动这是Stuxnet武器,最好和最昂贵的创造,显然是被击败的事实,因为它有一个导致其发现的错误。另一个教训是,进攻性武器一直在改善,辩方必须更加敏捷,不仅通过建设“堡垒等”系统建设安全,而且思考学习如何适应,恢复和恢复的生活响应实体。金宝博官方保持他们的核心功能。

在战争领域,成本很少是决定性因素,正式的方法工具与维持卓越军方的其他所需成本相比,没有令人难以苛刻的成本。在这个领域中,与建造和维护船只,飞机和火箭和防御者不同,成本在于培训和招募人员。这些人也将对私营部门提供宝贵的技能,并且该部门将持续受过受过良好教育的人才。

总体而言,投资先进的正规方法技术将被视为成本效益。校对助理是我们在本领域的最佳工具,我们知道如何通过投资更多地使它们能够明显更好。这些工具包括合成侧的AGDA,COQ,NuPRL,MINLOG和METAPRL和验证侧的ACL2,ISABELLE-HOL,HOL光,HOL和PVS。所有这些都很好,每个都具有重要的独特功能。所有取得了重大贡献。所有这些都有雄心壮志,在他们最有效地越来越有效。他们将吸引更多的资金,并将出现新系统。金宝博官方

中期

最目前的助理助手也在教育中使用。我似乎很清楚,与编程语言相结合的证明助手,例如带有LISP的COQ与OCAML和ACL2的COQ,将从用于编程课程中使用。其他校正助理也将朝着这个方向移动,肯定会这样做。教育中发生的事情将取决于大学中带出时尚的编程语言的力量。对我来说很清楚,COQ / OCAML系统将有机会在大学教育中被广泛采用,至少在金宝博官方欧洲和美国。它已经在常春藤联盟 - 康奈尔,哈佛,普林斯顿,春天和耶鲁所有人都投入了大量影响。我预测,在五年之内,我们将在Moocs中看到这种编程教育,我们将看到它进入精选的大学以及顶级高中。

所有的证明助理都有一些特殊的专业领域。如果有足够的资金,我们将看到他们利用这一点,并向各个方向推进他们的系统。金宝博官方Nuprl已经非常有效地通过构造分布式协议来构建正确的、容忍攻击的协议。这项工作很可能会继续下去,并导致在编程语言中构建通信原语,以匹配已经正式发展好的事件理论。Coq已经被用来构建一个经过验证的C编译器,在宾夕法尼亚大学和哈佛大学,Coq被用来验证微风编译器的新硬件设计,以支持安全特性,在麻省理工学院,他们使用Coq验证更多的软件堆栈与Bedrock系统。金宝博官方Coq还有很多其他的应用,不胜枚举。我们将看到更多的努力来正式证明数学中的重要定理,但很难预测是哪一个,用哪一个系统。金宝博官方目前在同伦理论中使用证明助手的努力将继续下去,并将产生重要的数学见解。证据助理也将支持努力建立更多的认证算法沿着库尔特梅尔霍恩的令人印象深刻的工作。

长期

当人们第一次遇到由世界级专家操作的证明助手时,很可能会感到震惊和震惊。这种人/机器的伙伴关系可以做一些看起来不可能的事情。他们可以完全精确地实时解决某些类型的数学问题,在Latex中留下一个可读的形式证明作为一个小时的工作记录。所有的书都是这样写的软件基础之前提到的宾夕法尼亚大学的一个项目。我预测,我们将看到更多可读的形式数学和计算理论的书籍以这种方式产生。在他们周围将出现一种技术,以促进这种写作,并将其包含在广泛分发的教育材料中。在mooc课程中使用证明助手给作业打分是可能的。而且,证明助手的使用迟早会在高中普及。

我认为我们还将看到通过互联网共享的校对助手调解的新型遥远的研究合作。金宝博娱乐我们将看到世界各地的联合研究团队攻击金宝博娱乐某些类型的理论问题,并构建施工的整体软件系统。金宝博官方我们已经看到了CoQ,Agda和Nuprl社区中的这一点,其中验证助理共享了非常相似和兼容的类型理论。

在工作中可能存在更大的力量,这是一个非常长期的力量,它具有编码的机制进入人类基因库的性质,这些机制传播和保留信息,这些信息定义了我们的物种。我们可能不是HOMO SAPIENS.毕竟,但是人类informatis.明智的比特并不总是那么明显,但信息比特进展得很好——至少到目前为止是这样。这就是我们人性的一面,我们为此建立了证据助理伙伴。它们是一个不断扩张的信息生态系统的一部分。金宝博官方进一步进化的证据助手有可能被大自然视为我们的一部分。


路加福音:谢谢你,鲍勃!