- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章dafny : 微软推出的形式化验证语言由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
dafny是一种可验证的编程语言,由微软推出,现已经开源.
dafny能够自我验证,可以在VS Code中进行开发,在编辑算法时,写好前置条件和后置条件,dafny验证器就能实时验证算法是否正确.
在官方的例子中,以Abs绝对值函数来进行说明,代码如下:
method Abs(x: int) returns(y: int)
ensures y >= 0 && (|| y == x || y == -x)
{
return if x > 0 then x else -x;
}
Abs是方法名,x为形参,类型为int, y为返回值,类型为int.
Abs没有前置条件,只有一个后置条件ensures y >= 0 && (|| y == x || y == -x),这样Abs返回值必须非负且y = x 或者 y = -x,定义了Abs的规约条件.
方法内就是具体的算法,根据x与0的比较,返回不同的值.
dafny语言里面有一个非常重要的后置条件写法,那就是loop.
下面举一个例子:
Verify the program in Algorithm 1. Note that you cannot change the existing implementation. 。
Algorithm 1 Find an element in array 。
method Find(a: array<int>, v: int) returns(index: int)
ensures 0 <= index ==> index < a.Length && a[index] == v
ensures index < 0 ==> forall k :: 0 <= k < a.Length ==> a[k] != v
{
var i : int := 0;
while i < a.Length
invariant 0 <= i <= a.Length
invariant forall k :: 0 <= k < i ==> a[k] != v
{
if a[i] == v {
return i;
}
i := i + 1;
}
return -1;
}
这个算法是要找数组里面的某个数,找到了就返回下标,否则返回-1.
这个算法有两个后置条件,分比对应找到了目标值和没有找到目标值, 。
找到了目标值,返回为非负值,返回值必须小于数组长度且数组对应值与目标值相等.
ensures 0 <= index ==> index < a.Length && a[index] == v 。
没有找到目标值,返回为负值,这就意味着数组里的所有值与目标值都不相等.
ensures index < 0 ==> forall k :: 0 <= k < a.Length ==> a[k] != v 。
这种写法用了形式化语言进行了规约.
算法实现很简单,while循环需要增加后置条件, 。
一个是i的范围,i的初值为0,循环退出时,i的值为数组长度.
invariant 0 <= i <= a.Length 。
while循环的另外一个后置条件,对于i,数组i前面的数字都与目标值不相等.
invariant forall k :: 0 <= k < i ==> a[k] != v 。
while循环第二个后置条件,保障了Find函数第二个后置条件.
vscode的编辑器能实时验证算法是否正确,这对于编写dafny代码十分有利.
最后此篇关于dafny : 微软推出的形式化验证语言的文章就讲到这里了,如果你想了解更多关于dafny : 微软推出的形式化验证语言的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
刚刚买了一辆装有 Microsoft 同步系统的汽车。在网上进行了快速搜索,很好奇是否有人知道可能存在的任何 SDK、示例开源附加应用程序等。 提前致谢。 最佳答案 更新: 看起来像Ford has
我使用VS2010,目标为.Net 2.0(VB.Net Windows Form应用程序) How to decide what is the .Net target我决定使用 2.0,因为我知道如
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Reading/Writing MS Word files in Python 我正在研究需求管理系统(如
Visual Studio 的价格非常昂贵。这就是为什么我想知道我可以使用什么来免费开发 ASP.NET 和 Silverlight 应用程序。如果我使用express工具,我可以开发商业应用吗?使用
是否可以设置特定单词或短语的语气或重点? 例如:Good Morning会用轻松的语气,而 The nuclear plant is about to melt down会更加紧迫。 我知道我可以改变
我注意到这个问题重复了几次,但是,从所有资源来看,我仍然无法使其正常工作。 我只是尝试在我的 Django 应用程序中使用 Azure Active Directory 身份验证。我正在使用this模
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我在使用 UseJwtBearerAuthentication 方法时遇到困难,我正在使用 Microsoft Azure ACS 获取 token (使用服务标识)。 JWT token 很好地返回
所以我找到了list今天 MSDN 上有很多转换器,现在我想使用其中的一些。然而,经过一番搜索后,我似乎找不到任何关于它们的信息。 我主要想用IntToBoolConverter 。但是我不知道如何使
我在使用 UseJwtBearerAuthentication 方法时遇到困难,我正在使用 Microsoft Azure ACS 获取 token (使用服务标识)。 JWT token 很好地返回
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
有没有办法摆脱子表单中的左侧栏和底栏? 我指的是这张图片中的酒吧。 我有被引用为连续形式的形式,如果这很重要。我想做的是让它看起来有点像这个用户所做的 Trying to Make an Effici
例如,我有一个任务表: TaskTitle DueDate Person Manager Report 3/28/15 John Dave Inspection 4/10/15 Bri
我得到的错误在这里: #if defined( _WIN32 ) #ifndef WIN32 #error error // error calls here #end
我想知道 MS Jscript(不是 Jscript .net)是否有类似于 python 中的电子邮件模块? 最佳答案 您可以使用Collaboration Data Objects (CDO) C
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
为什么我收到以下代码的以下警告:) 代码: _stprintf(m_szFileNamePath,_T("%s"),strFileName); warning C4996: '_swprintf':
我一直在阅读他们现在已经放弃了他们的 HPC 项目并转向 Hadoop。他们将提供自己的 hadoop 安装包,可能会更无缝地与 .NET 集成。 我在哪里可以获得有关此计划的文档?架构以及如何开始在
文件表: Company Document Status Notes: A 1 Submission Submitte
我不太了解 VB。我能弄清楚大部分事情。想知道有没有人能告诉我这行代码是什么意思 Option Compare Database 最佳答案 意思是“在这个模块中,使用数据库中定义的规则比较字符串。”
我是一名优秀的程序员,十分优秀!