×

数字程序的形式验证:从C注释程序到机械证明。 (英语) Zbl 1264.68054号

总结:数字程序可能需要高水平的保证。这可以通过应用形式化方法来实现,例如机器检查证明。但是,当我们对C代码感兴趣时,这些工具处理数学定理,在C代码中,数值计算是使用浮点运算执行的,而证明工具通常处理精确的实数运算。为了实现对C程序的高度信任,我们使用了一系列工具:Frama-C,它的Jessie插件,Coq、Gappa、Alt-Ergo、CVC3和Z3中的Why和providers。
这种方法需要对C程序进行注释:必须精确地指定每个函数,我们通过证明程序符合其规范并且不会发生运行时错误来证明程序的正确性。本文的目的是通过各种示例说明这种方法的特点。

MSC公司:

68纳米30 软件工程的数学方面(规范、验证、度量、需求等)
60年第68季度 规范和验证(程序逻辑、模型检查等)
68甲15 编程语言理论
2004年第65季度 计算机算术的数值算法等。
PDF格式BibTeX公司 XML格式引用
全文: 内政部 哈尔

参考文献:

[1] Ayad,A.,Marché,C.:浮点程序的多验证。摘自:Giesl,J.,Hähnle,R.(编辑)第五届国际自动推理联合会议。爱丁堡斯普林格人工智能课堂讲稿(2010)·Zbl 1291.68321号
[2] Barnett M.,Leino K.R.M.,Schulte W.:规范#编程系统:概述。In:安全、可靠和互操作智能设备的构造和分析(CASSIS’04)。计算机科学课堂讲稿,第3362卷,第49-69页。施普林格,柏林(2004)
[3] Baudin,P.,Filliátre,J.-C.,Marché,C.,Monate,B.,Moy,Y.,Prevosto,V.:ACSL:ANSI/ISO C规范语言(2008)。http://frama-c.cea.fr/acsl.html
[4] Bertot Y.,Casteéran P.:交互式定理证明和程序开发。Coq'Art:归纳结构的微积分。施普林格,柏林(2004)·Zbl 1069.68095号
[5] 博尔多(Boldo),S.:前葡萄球菌(Preuves formelles en arithmétiquesávirgule flottante)。里昂高等师范学院博士论文(2004)
[6] Boldo S.:关于Veltkamp/Dekker算法的形式证明的完整浮点证明示例的缺陷。收录:Furbach,U.,Shankar,N.(编辑)第三届国际自动推理联合会议。《计算机科学讲义》,美国西雅图,第4130卷,第52-66页。柏林施普林格出版社(2006)·Zbl 1222.65156号
[7] 博尔多,S.:Floats&Ropes:正式数值程序验证的案例研究。参加:第36届国际自动化、语言和编程学术讨论会,希腊罗多斯。计算机科学课堂讲稿——ARCoSS,第5556卷,第91-102页。施普林格,柏林(2009)·Zbl 1248.65045号
[8] Boldo S.:Kahan的正确判别计算算法终于得到了正式证明。IEEE传输。计算。58(2), 220–225 (2009) ·Zbl 1367.65206号 ·doi:10.1109/TC.2008.200
[9] Boldo,S.、Clément,F.、Filliátre,J.-C.、Mayero,M.、Melquiond,G.、Weis,P.:波动方程解析方案的形式证明:方法误差。摘自:《第一届交互式定理证明会议论文集》,苏格兰爱丁堡。LNCS,施普林格,柏林(2010)·Zbl 1291.68329号
[10] Boldo,S.、Daumas,M.、Kahan,W.、Melquiond,G.:准确判别式的证明和认证。参加:第十二届IMACS-GAMM科学计算、计算机算术和验证数值国际研讨会,德国杜伊斯堡(2006)
[11] Boldo,S.,Filliátre,J.-C.:浮点程序的形式验证。摘自:第18届IEEE计算机算术国际研讨会,法国蒙彼利埃,第187-194页(2007年)
[12] Boldo,S.、Filliátre,J.-C.、Melquiond,G.:结合Coq和Gappa来验证浮点程序。在:第16届符号计算与机械推理集成研讨会,加拿大大弯。《人工智能课堂讲稿》,第5625卷,第59-74页。施普林格,柏林(2009)·Zbl 1247.68232号
[13] Boldo,S.,Nguyen,T.M.T.:数值程序的硬件依赖证明。摘自:穆尼奥斯,C.(编辑)第二届美国国家航空航天局正式方法研讨会论文集。编号NASA/CP-2010-216215,NASA会议出版物,美国华盛顿特区,第14-23页(2010年)
[14] Boldo S.,Nguyen T.M.T.:编译器优化时数值程序的证明。因诺夫。系统。柔和。工程7,1-10(2011)·doi:10.1007/s11334-010-0138-8
[15] Burdy L.、Cheon Y.、Cok D.R.、Ernst M.D.、Kiniry J.R.、Leavens G.T.、Leino K.R.M.、Poll E.:JML工具和应用概述。国际期刊软件。技术工具。Transf公司。(STTT)7(3),212-232(2005)·doi:10.1007/s10009-004-0167-4
[16] Carré,B.,Garnsworthy,J.:SPARK——用于安全关键编程的带注释的Ada子集。参见:《1990年TRI-ADA会议记录》,TRI-ADA'90,第392-402页。ACM出版社,纽约(1990)
[17] Carreño,V.A.,Miner P.S.:HOL和PVS中IEEE-854浮点标准的规范。In:HOL95:第八届高阶逻辑定理证明及其应用国际研讨会,犹他州阿斯彭格罗夫(1995)
[18] 库索,P.,库索,R.,费雷特,J.,毛博恩,L.,米内,A.,莫尼奥,D.,对手,X.:ASTRéE分析仪。In:员工持股计划。计算机科学讲义,第3444卷,第21-30页(2005)·Zbl 1108.68422号
[19] Daumas M.,Rideau L.,Théry L.:浮点数的通用库及其在精确计算中的应用。摘自:第十四届高阶逻辑定理证明国际会议,苏格兰爱丁堡,第169-184页(2001)·Zbl 1005.68544号
[20] Dekker T.J.:一种扩展可用精度的浮点技术。数字数学18(3),224–242(1971)·Zbl 0226.65034号 ·doi:10.1007/BF01397083
[21] Delmas,D.,Goubault,E.,Puto,S.,Souyris,J.,Tekkal,K.,Védrine,F.:在安全关键航空电子软件上实现FLUCTUAT的工业应用。收录于:FMICS,LNCS,第5825卷,第53-69页。柏林施普林格出版社(2009)
[22] Filliátre J.-C.,MarchéC.:演绎程序验证的Why/Krakatoa/Caduceus平台。摘自:Damm,W.,Hermanns,H.(编辑)第19届计算机辅助验证国际会议。计算机科学课堂讲稿,第4590卷,第173-177页。柏林施普林格出版社(2007)
[23] Gerlach,J.,Burghardt,J.:关于使用frama-c验证c++标准库中算法的经验报告。收录:Beckert,B.,Marché,c.(编辑)面向对象软件的形式验证,国际会议上发表的论文,《信息学中的卡尔斯鲁厄报告》,第191-204页。法国巴黎,2010年6月。http://digbib.ubka.uni-karlsruhe.de/volltexte/1000019083
[24] Goubault E.,Putt S.:数值算法的静态分析。收件人:Yi,K.(eds)SAS。LNCS,第4134卷,第18-34页。柏林施普林格出版社(2006)·Zbl 1225.68073号
[25] Harrison,J.:浮点三角函数的形式验证。摘自:《第三届计算机辅助设计形式方法国际会议论文集》,德克萨斯州奥斯汀,第217-233页(2000)
[26] 新泽西州海厄姆:《数值算法的准确性和稳定性》,第2版,xxx+680页,SIAM,费城(2002)。http://www.maths.manchester.ac.uk/\(\sim\)higham/阿斯纳/·兹比尔1011.65010
[27] 电气与电子工程师协会:IEEE浮点运算标准。IEEE标准754-2008(2008)·Zbl 1143.76549号
[28] Kahan,W.:关于无超精密算法浮点计算的成本。全球网络文档,2004年11月
[29] Leavens G.T.:没有很多浮点问题。J.对象技术。5(2), 75–83 (2006) ·doi:10.5381/jot.2006.5.2.c8
[30] Melquiond,G.:Coq系统中的浮点运算。摘自:《第八届实数与计算机会议记录》,第93-102页。圣地亚哥·德孔波斯特拉,西班牙(2008)
[31] Melquiond,G.:用计算证明实值函数的界。摘自:Armando,A.,Baumgartner,P.,Dowek,G.(编辑)《第四届自动推理国际联席会议论文集》,澳大利亚悉尼。人工智能课堂讲稿,第5195卷,第2-17页(2008年)·Zbl 1165.68464号
[32] Monniaux,D.:统计分析:传统。法国格勒诺布尔约瑟夫·傅里叶大学的直接研究习惯(2009年)
[33] Moy,Y.,Marché,C.:Jessie Plugin教程,铍版本。INRIA(2009)。http://www.frama-c.cea.fr/jessie.html
[34] Moy Y.,MarchéC.:安全检查子程序合同的模块化推理。J.塞姆。计算。45, 1184–1211 (2010) ·Zbl 1213.68385号 ·doi:10.1016/j.jsc.2010.06.004
[35] Necula,G.C.,McPeak,S.,Rahul,S.P.,Weime,W.:Cil:用于分析和转换C程序的中间语言和工具。In:编译器构造会议(CC'02)(2002)·Zbl 1051.68756号
[36] Russinoff D.M.:AMD-K7处理器的浮点乘法、除法和平方根算法符合IEEE标准的机械检查证明。LMS J.计算。数学。1, 148–200 (1998) ·Zbl 0910.68008号 ·doi:10.1112/S1461157000000176
[37] Sterbenz P.H.:浮点计算。普伦蒂斯·霍尔,上马鞍河(1974)
[38] Veltkamp,G.W.:dubbele precisie的Algolprocedures voor het berekenen van een inwendig产品。RC-Informatie 22,埃因霍温技术学院(1968)
[39] Wilkinson,J.H.:《代数过程中的舍入误差》。Prentice-Hall,Upper Saddle River,NJ 07458,USA(1963年)·Zbl 1041.65502号
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。