这是一个简单的Dafny程序:两行代码和三个断言。
method Main()
{
var S := set s: int | 0 <= s < 50 :: 2 * s;
var T := set t | t in S && t < 25;
assert |S| == 50; // does not verify
assert T <= S; // does verify
assert T < S; // does not verify
}
S的基数为50,但是Dafny无法按照书面形式验证此声明。 同样,T显然是S的子集,Dafny可以验证这种说法;但是T也是S的合适子集,Dafny无法验证这种说法。
发生了什么事情&#34;引擎盖下&#34;造成这些困难的原因是,那些正在学习和使用达菲的人可能会预见并避免或处理这些困难吗?