如何解决如何编写检查数组是否已排序的dafny函数?
我想编写一个dafny函数,与下面的谓词相同,以便可以从另一个函数(在代码中)调用它。但是,我不确定该怎么做。
predicate sorted(s: seq<char>)
{
forall i,j :: 0 <= i < j < |s| ==> s[i] <= s[j]
}
编辑:所以我尝试了以下操作,并得到错误:stdin.dfy(8,8):错误:在这种情况下,不允许分配给非重影变量(因为这是一个虚幻方法或因为该语句由仅用于规范的表达式保护)
关于b行:= a
method sortString(a: string) returns (b: string)
{
if (sorted(a)){
b := a;
}
}
function sorted(s: seq<char>):bool
{
if forall i,j :: 0 <= i < j < |s| ==> s[i] <= s[j] then true else false
}
解决方法
如果您希望能够从sorted
呼叫method
,只需将其标记为predicate method
,就像这样
predicate method sorted(s: seq<char>)
{
forall i,j :: 0 <= i < j < |s| ==> s[i] <= s[j]
}
然后您可以像这样从method
调用
method sortString(a: string) returns (b: string)
{
if (sorted(a)){
b := a;
}
}
通常,predicate
只是返回function
的{{1}}。两者之间没有区别。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。