【论文精读】形式化方法概貌

读前阅读

形式化方法(formal methods)(知乎)
在这里插入图片描述

1、形式化方法介绍

形式化方法,中文也称形式方法、正规方法。在计算机科学和软件工程领域,形式化方法是基于严格的数学基础,通过采用数学逻辑证明来对计算机软硬件系统进行建模、规约、分析、推理和验证,是用于保证计算机软硬件系统正确性以及安全性的一种重要方法。

形式化方法使用数学及逻辑证明的手段对计算机系统进行建模、规约、分析、推理,其主要涵盖以下几个研究方向:定理证明、形式模型、形式语义与形式建模、形式规约、形式验证技术。

形式化方法最初应用在硬件上,验证硬件的正确性,后面逐渐应用到软件编程中,能够在软件中找到软件的错误,验证软件的安全可靠。

2、形式化方法应用

形式化方法是从硬件设计开始普及的。一个著名的例子是:当年Intel的Pentium CPU浮点运算单元出错(FDIV Bug),数以万计的CPU不得不回收和替换,给Intel造成了巨大损失(475M $)。从那之后,Intel开始在其芯片设计中广泛采用形式化方法。计算机硬件巨头如IBM,AMD, NVIDIA 和 CADENCE等等也都是形式化方法的使用者。

形式化方法最新的应用成果是在工业上,比如一些极其重要且对安全性要求极高的领域(几乎不允许差错),比如航空航天,高铁地铁等等。

举个例子:1996年,欧洲航天局首次发射的阿丽亚娜5型(Ariane 5)火箭,由于惯性导航系统发送的错误指令(浮点数转换为整数造成溢出),导致火箭在发射仅仅37秒后便偏离了预定轨道,最终坠毁。欧洲航天局的巨额研发经费(8B $)付之一炬。在那之后不久,EADS公司开发阿丽亚娜火箭的任务调度模型就开始使用形式化方法。

美国国家宇航局NASA和英国国防部在90年代相继发布设计标准,形式化方法的使用位列其中。我国的玉兔号月球车控制系统和我国第一个自主研发的空间飞行器嵌入式实时操作系统SpaceOS,也都是通过形式化方法验证其正确性。

将形式化方法带到这些领域的是法国人Abrial,他发明了B方法,成功应用在法国自动驾驶地铁14号线——得益于他的贡献,使得罢工期间这条线几乎没有受到影响——最重要的两大系统:控制系统和通信系统。接着该方法被广泛采纳,在世界各地的自动驾驶地铁中得到应用,例如上海2021年1月底开通的地铁15号线,据我所知,这条全国最高等级的自动驾驶地铁,通过了形式化方法的验证,保障了15号线自动驾驶功能的安全;又如中国第一艘飞向火星的萤火号,也采用形式化方法进行验证。

3、形式化方法基本概念

形式化方法是基于严格数学基础,对计算机软(硬)件系统进行形式规约、开发和验证的技术。其中,形式规约(formal specification)使用形式语言构建所开发的软件系统的规约,它们对应于软件生命周期不同阶段的制品,刻画系统不同抽象层次的模型和性质,例如需求模型、设计模型甚至代码和代码的执行模型等形式验证(formal verification)是证明不同形式规约之间的逻辑关系, 这些逻辑关系反映了在软件开发不同阶段软件制品之间的需要满足的各类正确性需求。例如, 形式验证给出“系统设计模型满足若干特定性质”的证明构造。在形式规约和验证的基础上,形式化开发主要是构造、证明形式规约之间的等价转换和精化关系,以系统的形式模型为指导,逐步精化,开发出满足需要的系统,也称为构造即正确(correct by construction)的开发。

形式化方法与其他软件开发方法的主要区别在于:**其描述软件及其性质的语言是无歧义的,构造和验证软件的方法是严格的。**在软件工程中,形式化方法提供了工程化系统设计的一种比较透彻的思维方式,可以很好地支持抽象模型建立、系统精化、模型和证明重用;形式化开发过程具有很好的可重复性,相应的软件制品模型也具有较强的可分析性和可验证性。因而, 形式化方法可以有效地提高和保障系统的可信性。

形式规约:是由形式规约语言严格描述的系统模型或者系统需要满足的性质。前者是模型规约,后者是性质规约。形式规约是形式化方法的基础。模型规约语言利用数学结构描述系统的状态变化或者事件轨迹,它直接定义所描述系统模型的结构、功能行为甚至非功能行为(如时间)。模型规约给出了系统开发过程中不同抽象层次的模型,有相应的逻辑推理系统支持其分解和组合,完成不同层次间规约的转换和精化。性质规约语言基于程序逻辑系统,通过逻辑公式来描述一组性质以定义所期望的系统行为。性质规约不直接定义系统的具体行为。基于性质的形式规约偏向于说明性的,逻辑约束往往是最小必要的,以给出较大的实现空间。

通过对编程语言的语义进行严格的定义,加之使用形式模型对计算机系统的行为进行建模,最终形成形式化规约说明书来对计算机系统的行为进行推理验证,形式规约说明是对计算机系统进行验证的基础,形式规约说明的基础是形式语义学和形式建模

形式建模:是对计算机软硬件系统的行为和性质用某种形式模型精确的刻画。形式模型一般采用通用形式建模语言(如Petri Net、Event-B、Pi-演算、CSP、SysML、Lusture等)或者专用形式模型(如有限自动机、下推自动机、概率自动机等)来进行。函数式程序可以用树自动机、高阶下推自动机来建模,自适应系统与多智能体一般使用Petri网、UML、Z以及马尔可夫模型等来建模,对于深度神经网络的形式建模最近也成为研究热点。

形式语言:在数学、逻辑和计算机科学中,形式语言(formal language)是用精确的数学或机器可处理的公式定义的语言。如语言学中语言一样,形式语言一般有两个方面:语法和语义。专门研究语言的语法的数学和计算机科学分支叫做形式语言理论,它只研究语言的语法而不致力于它的语义。

形式语义学:在程序设计语言的早期,语义用自然语言解释,程序语言的解释器或编译器按照语义将该语言程序编译成计算机可处理的机器语言程序。这种自然语言解释的语义不精确、有歧义,无法支持对程序正确性的严格证明和分析。为了帮助理解使用程序设计语言、支持语言标准化、指导语言设计、帮助开发更好的编译器以及分析证明程序的性质和程序之间的等价性,需要对程序语言的语义进行抽象和严密的定义。

形式语义学(formal semantic)是研究程序设计语言的语义的学科,以数学为工具,利用符号和公式,精确地定义和严格地解释计算机程序设计语言的语义,从而消除设计者、开发者和使用者之间的理解的差异性。形式语义帮助理解语言,指导语言的设计,帮助编写编译器和语言系统,支持程序验证和软件可靠性,有助于软件规范化。

形式验证:在计算机硬件(特别是集成电路)和软件系统的设计过程中,形式验证的含义是根据某个或某些形式规约或属性,使用数学的方法证明其正确性或非正确性。其神秘感大抵来源于定义中的两个严谨而且抽象的关键词——“形式化规约”和“数学方法证明”。事实上,揭开这层神秘的面纱,你会发现形式化验证的许多有趣之处。

注意形式化验证(Formal Verification)与程序测试(Testing)之间的关系。“程序测试能证明错误的存在,但不能证明错误不存在”。Edsger Dijkstra(1972年图灵奖获得者、形式化方法核心思想的提出者)如此评述。

在实践中,尤其是在代码足够复杂的场景中,形式化验证(Verification)与程序测试方法(Testing) 的验证效果有如云泥之别。举个例子来说:2009年,澳大利亚的科学家使用形式化方法对工业级操作系统seL4微内核进行了完整功能性验证,验证方式同时以形式化验证和程序测试两种方式分别展开,验证的结果是:形式化方法共发现460多个Bug,而程序测试只发现了16个Bug。

更有趣的是,在以高验证成本著称的形式化验证领域,完全验证seL4微内核只需要600万美元的验证成本,而以测试的方式通过CC EAL6级认证的成本竟高达8700万美元。由此可见,通过形式化验证可以更经济的为seL4微内核提供更强的安全性保证。

在形式语义与形式建模以及形式规约的基础上,将计算机系统的分析与验证问题转化为逻辑推理问题或者形式模型的判断问题,用定理证明工具/求解器或者某个形式模型的原型工具来进行验证。形式化验证主要的技术有定理证明模型检测

定理证明:其基本思想是将程序满足其形式规约的证明问题转化为一组数学命题的证明。若这一组数学命题,称作证明义务(p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值