跳到内容

hkhlaaf/T2型

 
 

存储库文件导航

===========================================T2临时逻辑验证器============================================在这个目录中,您可以找到T2时序逻辑证明程序的源代码。T2旨在证明程序的时间属性,如安全性、,终止,或逻辑CTL中指定的属性。在本文档中,我们首先讨论如何使用该工具并解释如何构建然后,我们对实现进行了大致概述,最后列出了工具的开发人员并指出一些相关的研究论文。-----------T2号楼-----------窗户~~~~~~~要构建T2,我们建议使用Visual Studio(2013或更高版本),但您可以也请遵循下面提供的Mono说明。在Visual Studio中,使用了NuGet包是通过Visual Studio管理的,不需要手动下载(即跳过步骤(4))。要使用附带的libz3.dll,您需要安装Visual Studio 2015C++运行时来自https://www.microsoft.com/en-us/download/details.aspx?id=48145使用Mono(适用于Linux和MacOS)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~要构建T2,您首先需要构建。z3/spacer的NET绑定使用单声道。为此,您需要从“spacer-t2”分支获取z3源属于https://bitbucket.org/spacer/code网站(参见步骤(1))。安装一些需要的。NET库,您需要NuGet,您可以从…获得http://nuget.org/nuget.exe.让$NUGET作为NUGET.exe下载的路径,$Z3DIR为中的目录要存储Z3源代码的目录,以及$T2DIR你想存储T2信号源。您可以设置这些环境变量通过在shell中“export NUGET=/path/to/NUGET.exe”。然后按照这些步骤:(0)安装生成过程所需的软件,获取T2源:*克++*蟒蛇*单声道。网络4.0*X构建*fsharp(fsharp)在Debian(>>squezy)或Ubuntu(>=14.04 LTS)系统上,这就足够了:$sudo apt-get安装build-essential python mono-complete mono-xbuild fsharp在OS X上,从安装Mono MDK for Mac OShttp://www.mono-project.com/download/并安装XCode开发工具(例如,通过在中执行“gcc”终端——如果还没有,OSX将提供安装XCode)。要下载T2源代码:$mkdir-p“$T2DIR”$git克隆https://github.com/mmjb/T2.git网址$export T2DIR=“$T2DIR/T2”(1) 构建z3。在Linux上,以下配方检索z3源并构建z3:$mkdir-p“$Z3DIR”$pushd“$Z3DIR”$git克隆https://bitbucket.org/spacer/code网站$cd代码$git结账空格-t2$ ./配置$cd版本$制造$popd美元在OS X上,您需要强制执行32位构建(为了与Mono兼容):$mkdir-p“$Z3DIR”$pushd“$Z3DIR”$git克隆https://bitbucket.org/spacer/code网站$cd代码$git检查垫片-t2$ ./配置$cd版本$perl-i-pe的/-D_AMD64_/-arch i386/;s/LINK_EXTRA_FLAGS=/$&-arch i386/'配置.mk$制造$popd美元(2) 构建。z3的NET绑定:$pushd“$Z3DIR/code/src/api/dotnet/”$xbuild微软。Z3.c项目$popd美元(3) 更新z3及其。T2源树中的NET绑定:$cp“$Z3DIR/src/api/dotnet/obj/Debug/Microsoft.Z3.*”“$T2DIR/scr/”$cp“$Z3DIR/build/libz3.*”“$T2DIR/src/”(4) 通过NuGet获取所需的软件包(可能需要先导入证书):$mozroots--导入--同步$pushd“$T2DIR/src”$mono$NUGET恢复$chmod+x包/FsLexYacc.*/build/*exe$popd美元(5) 构建T2,在调试模式下:$pushd“$T2DIR/src”&&xbuild&&popd在版本配置中:$pushd“$T2DIR/src”&&xbuild/property:Configuration=Release&&popd(6) 按如下方式运行T2(对于发布版本,将“Debug”替换为“Release”)$mono“$T2DIR/src/bin/Debug/T2.exe”例如,要执行测试套件:$pushd“$T2DIR/test”&&mono“$T2DIR/src/bin/Debug/T2.exe”-测试----------运行T2----------T2从命令行运行,以下命令行参数是用于定义证明目标:-input_t2<字符串>:T2语法中输入文件的路径。例如,请参阅test/*.t2。-终止:尝试证明(不)终止。-安全<int>:尝试证明位置<int>的不可达性。-ctl<ctl_Formula>:尝试证明<CTL_Formula>适用于该程序。公式格式如下:-路径和时间量词用方括号括起来,例如[AG]、[EF]和[AW]。-量词后面的子公式必须包含在括号,例如[AG](x>0)和[EF]([AG],y<x))。有关更多CTL公式示例,请参阅programTests.fs或解析器absparse.fsy中的定义。-ctlstar<ctlstar_Formula>:尝试证明<CTLStar_Formula>适用于该程序。公式格式如下:-E F(G((tt>0)||(A F(尾波==0)))-一次可以配对一个路径和一个时间量词,用空格隔开,后跟段落,例如。E F(x==0)、E F(G(tt>0))和A F(G(E F(x==0))。-量词后面的子公式必须包含在括号,如上所示。有关更多CTL公式示例,请参阅programTests.fs或解析器absparse.fsy中的定义。-公平性<fairness_Condition>:尝试在<Fairness_Condition>下证明终止/a CTL公式。<Fairness_Condition>的格式为“(<P>,<Q>)”,其中如果计算中有无限多个状态,那么计算是不公平的满足<P>,而<Q>只满足有限次。例如“(P==1,Q==1)”,更多示例可以是在programTests.fs中找到。修改T2输出行为的常用选项:-超时<int>:设置超时(秒)。-打印(_P):打印结果说明(仅用于终止)。-日志:启用详细日志记录。这将打印大量输出,并且可能非开发人员很难理解。Windows上T2的典型调用和输出如下所示:$src/bin/Debug/T2.exe-input_T2 test/testsuite/small02.T2-安全10000-超时42安全证明成功$src/bin/Debug/T2.exe-input_T2 test/testsuite/small01.T2-终止-print_proof终止证明成功使用了以下特定于切点的词典排序函数:*对于切入点7,使用以下秩函数/界限(按优先级降序):-RF x,绑定2$src/bin/Debug/T2.exe-input_T2测试/testsuite/heidy1.T2-CTL“[AG](x_1>=y_1)”临时证明成功$src/bin/Debug/T2.exe-input_T2 test/bakery.T2-CTL“[AG](NONCRITICAL<=0||([AF](CRITICAL>0))”-公平“(P==1,Q==1)”临时证明成功请注意,T2在证明失败且启用日志记录时创建“缺陷”文件。可以使用sdvdefect.exe(SDV附带)查看defect.tt文件分发)。-------------开发T2-------------在下面,我们稍微讨论了实现的几个部分更详细地解释高级算法(来自我们的论文)是如何实现的在T2中实现。基础知识、胶水和测试:~~~~~~~~~~~~~~~~~~~~~~~实施:*主.fs:T2程序校准器的顶级文件。*programTests.fs,测试/*:T2测试套件和oru示例集合的实现。*参数.fs:工具的命令行参数,以及存储参数的位置。*对数英尺:用于控制日志记录的中央机制。*utils.fs、gensym.fs:Helper函数和现有F#数据结构的本地扩展。*absflex.fsl、absparse.fsy、parseError.fs:用于解析T2文件的F#Lexer/Yacc文件。*z.fs:F#函数连接到Z3决策过程。程序的表示~~~~~~~~~~~~~~~~~~~~~~~~~~我们使用非常简单的程序表示,使用控制流图用线性算术表示的“假设”和“分配”命令注释超过整数。不支持递归、过程、并发、堆、非线性。为了处理更复杂的程序,我们使用SLAyer[8]或Thor等工具[17] ,可用于生成有用程序的算术抽象证明终止。在文献中我们知道如何处理递归/过程(例如[10])、并发(例如[10)和非线性算术(例如[16]),但这些功能在T2中没有实现。实施:*程序.fs:算术、非递归程序的简单表示。*反例.fs:处理反例的例程,反例是程序的序列命令。*分析.fs:各种标准编译器级程序分析工具(例如live variable分析)。*变量fs:程序变量的表示。*输入.fs:用于将程序表示加载到工具中的接口。*输出.fs:以其他格式输出(中间)程序的方法集合。*术语.fs:表示术语的数据类型。*公式.fs、关系.fs和稀疏线.fs:表示线性公式和关系的数据类型。许多计算是在基于变量映射的项的稀疏表示上实现对应系数。通常,这与线性不等式,其中术语的含义是小于或等于0。例如,“2*x<=4*y”表示为一个映射m,其中m.[x]=2,米[y]=-4。*支配者.fs,scc.fs:使用[33]中的技术计算支配者,强连接组件计算。终止证明算法~~~~~~~~~~~~~~~~~~~~~~~~~~~~~在这里,该工具实现了基于TERMINATOR的终止证明方法(例如[6,22,23])进行了一些修改,如[1]和[3]所述。对于那些不太精通正式方法文学最好的开始可能是通过阅读[6]。该技术的思想是减少对逐步演变的安全问题的终止论据。这个根据反例对当前终止参数进行细化来自安全标准器,这导致了套索反例的形式。T2实现了[1,3]中的优化/扩展/修改修改原始技术以搜索词典终止从依赖-对-对方法到终止证明。实施:*终止.fs:包含函数“provider”中的主终止证明循环,如原始基于细化的终止文件[6,22,23]所述。它还集成了词典终止证明的优化在此设置中,如[1,3]所述。*套索.fs:实现分析反例套索所需的子流程细化终止参数,如[1,3,22,23]所述。*仪器.fs:提供基于细化所需的程序修改程序终止分析。初始转换由“instrument_F”(F~ finally)执行,和后续修改步骤(用于更改的终止参数)位于instrument_*_RF和switch_to_*函数中。*等级功能.fs:实现实际的秩函数合成算法(基于Farkas的引理),见[24,25,26,27]。*recurrentsets.fs:基于[36]的基本非终结证明技术,适用于套索设置。时态逻辑(CTL)证明算法~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~T2的这个版本包含了描述的分支时间逻辑验证器[34]中。对于那些不熟悉时序逻辑验证的人无限状态系统,请参阅[7],其中一种技术可以减少描述了一个程序分析问题的时态属性验证。在这个无限状态程序的CTL模型检查器中,我们采用了众所周知的自下而上的有限状态CTL模型检查策略[35]到无限状态使用前置条件合成的程序。我们利用技术来证明综合先决条件的程序的安全性、终止性和非终止性断言输入属性的CTL子公式的满足性,然后使用剩余证明中的前提条件。因此,我们的实现不会需要明确考虑嵌套时间量词的情况。实施:*终止.fs:函数“bottomUp”中的主循环驱动证明过程。它首先初始化前置条件映射,然后调用自身递归用于每个CTL子公式。然后使用程序“校准仪”将反例返回到用于合成的子公式前提条件。然后每个程序位置的几个前提条件可以是同时计算。此过程还传播找到的前提条件在整个图中,没有显式地重新计算它们,如中所述[34].*仪器.fs:将模型检查简化为安全检查程序“instrument_(X|F|G|…)”基础良好,由程序“合并程序和属性”。安全/可达性校准仪~~~~~~~~~~~~~~~~~~~~~~~~~~在这里,我们使用麦克米兰的“带插值的惰性抽象”技术来证明安全性(也称可达性)。在我们证明的主要应用中终止安全问题是终止有效性的编码论点。我们的版本是增量的,随着防终止搜索的建立可达性问题,然后根据发现的反例,对可达性问题并重新检查它。实施:*可达性.fs:基于国际刑警组织的安全/可达性验证程序遵循[28]的策略。*priostack.fs:安全校验器中使用的优先级堆栈实现。*interpolantSequence.fs:基于Farkas引理的插值合成[29]中的技术。*symex.fs:惰性抽象过程中使用的符号执行抽象解释~~~~~~~~~~~~~~~~~~~~~~~我们使用了几种抽象解释技术[31]。特别是重要的是在套索分析。实施:*IIntAbsDom.fs:抽象域的接口(即[31])。*间隔IntDomain.fs:间隔域。见[32]。*八角2.fs:八角形域。见[30]。------------以下人员对此版本的T2做出了贡献:*Josh Berdine(MSR研究员)*玛丽·博克(伦敦玛丽女王大学为期12周的本科生实习生)*Marc Brockschmidt(MSR研究员)*陈洪毅(路易斯安那州立大学12周博士实习生)*Nathan Chong(帝国理工学院为期12周的博士实习生)*拜伦·库克(伦敦大学学院MSR研究员)*Ruslan Ledesma Garza(慕尼黑技术大学12周博士实习生)*Mihaela Gheorghiu(多伦多大学12周博士实习生)*Samin Ishtiaq(MSR研究员)*Heidy Khlaaf(伦敦大学学院博士承包商)*Zachary Kincaid(多伦多大学12周博士实习生)*马特·刘易斯(牛津大学12周博士实习生)*Abigail See(剑桥大学为期12周的本科生实习生)*Vlad Shcherbina(莫斯科国立大学12周博士实习生)*Christoph Wintersteiger(MSR研究员)----------工具书类----------[1] 通过合作实现更好的终止证明Marc Brockschmidt、Byron Cook、Carsten Fuhs2013年CAV[2] 程序中不确定性的推理拜伦·库克和埃里克·科斯金2013年PLDI[3] 拉姆齐vs.词典终止证明拜伦·库克(Byron Cook)、阿比盖尔·西(Abigail See)和弗洛里安·祖勒(Florian Zuleger)2013年TACAS[4] 作为程序分析任务的时间属性验证(扩展版本拜伦·库克(Byron Cook)、埃里克·科斯基宁(Eric Koskinen)、莫西·瓦迪(Moshe Vardi)系统设计中的形式方法(CAV特刊),2012年[5] 非线性命令序列终止性的证明Domagoj Babic、Byron Cook、Alan J.Hu、Zvonimir Rakamaric计算的形式方面(SEFM特刊),2012年[6] 证明程序终止(评论文章)拜伦·库克、安德烈亚斯·波德尔斯基、安德烈·里巴尔琴科ACM通信,第54卷第5期,2011年5月[7] 作为程序分析任务的时间属性验证拜伦·库克、埃里克·科斯基宁、莫西·瓦尔迪2011年CAV[8] SLAyer:系统级代码的内存安全Josh Berdine、Byron Cook、Samin Ishtiaq2011年CAV[9] 使用决策谓词进行预测拜伦·库克和埃里克·科斯金2011年POPL[10] 终止汇总:不退回!拜伦·库克、安德烈亚斯·波德尔斯基、安德烈·里巴尔琴科FMSD(2009)35:369-387[11] 证明非阻塞算法不会阻塞Alexey Gotsman、Byron Cook、Matthew Parkinson和Viktor Vafeiadis2009年POPL[12] 项目终止原则拜伦·库克2008年马克托伯多夫暑期学校笔记[13] 证明有条件终止拜伦·库克等人CAV 2008[14] 对摘要进行排名Aziem Chawdhary等人2008年员工持股计划[15] 证明螺纹终止拜伦·库克、安德烈亚斯·波德尔斯基和安德烈·里巴尔琴科PLDI 2007年[16] 通过分歧证明终止Domagoj Babic、Byron Cook、Alan Hu、Zvonimir Rakamaric2007年SEFM[17] 形状分析的算术强化斯蒂芬·马吉尔、乔什·伯丁、埃德蒙·克拉克和拜伦·库克。SAS 2007[18] 证明程序最终会有好处拜伦·库克等人2007年POPL[19] 不变性分析的方差分析Josh Berdine等人2007年POPL[20] 具有变形堆的程序的自动终止证明乔什·伯丁、拜伦·库克、迪诺·迪斯特法诺和彼得·奥赫恩2006年[21]终结者:超越安全(简短的工具描述文件)拜伦·库克、安德烈亚斯·波德尔斯基和安德烈·里巴尔琴科CAV 2006[22]系统代码的终止证明拜伦·库克、安德烈亚斯·波德尔斯基和安德烈·里巴尔琴科PLDI 2006年[23]终端抽象细化拜伦·库克、安德烈亚斯·波德尔斯基、安德烈·里巴尔琴科萨斯2005[24]线性秩函数合成的一种完备方法安德烈亚斯·波德尔斯基(Andreas Podelski)、安德烈·里巴尔琴科(Andrey Rybalchenko)VMCAI 2004年[25]多维排名、程序终止和复杂性界限流程图程序。Christophe Alias、Alain Darte、Paul Feautrier和Laure Gonnord。SAS 2010[26]亚伦·布拉德利,佐哈尔·曼纳,亨尼·西普马多等级原则。ICALP 2005年[27]亚伦·布拉德利、佐哈尔·曼纳、亨尼·西普马具有可达性的线性排序CAV 2005[28]带插值的惰性抽象肯·麦克米兰CAV 2006[29]插值的约束求解Andrey Rybalchenko,Viorica Sofronie-Stokkermans公司VMCAI 2007年[30]八角形抽象域安托万矿山高阶和符号计算19(1):31-100(2006)[31]抽象解释:用于静态分析的统一晶格模型不动点的构造或近似程序Patrick Cousot、Radhia CousotPOPL 1977年[32]程序动态属性的静态确定Patrick Cousot、Radhia Cousot国际研讨会。编程,1976年[33]在流程图中查找支配者的快速算法托马斯·伦戈尔和罗伯特·恩德雷·塔尔扬托普拉斯1(1):121–1411979[34]针对无限状态程序的更快时间推理拜伦·库克(Byron Cook)、海蒂·赫拉夫(Heidy Khlaaf)和尼尔·皮特曼(Nir Piterman)。FMCAD 2014。出现。[35]使用分支时间-时间逻辑设计和合成同步骨架E.克拉克和E.爱默生课程逻辑研讨会,1981年。[36]自动检测Java字节码的非终止和NullPointerExceptionM.Brockschmidt和T.Stroeder以及C.Otto和J.GieslFoVeOOS 2011

关于

T2时间校准仪

资源

许可证

星星

观察者

叉子

发布

未发布版本

包装

未发布包

语言文字

  • C类 72.6%
  • F类# 24.8%
  • C类# 1.6%
  • 波尔 0.4%
  • OCaml公司 0.3%
  • 生成文件 0.2%
  • 其他 0.1%