我想为Dafny编写一些带有燃料注释的代码,如下所示:
predicate {:fuel 0,0} eq<A>(x: A, y: A)
{
x == y
}
lemma {:fuel eq,1,2} reflexive<A>(x: A)
ensures eq(x, x)
{
}
不幸的是,我收到一条错误消息:
templates.dfy(6,13): Error: type '?' to the predicate 'eq' is not determined
templates.dfy(6,13): Error: the type of this expression is underspecified
好吧,看来我只需要为eq指定type参数。但是“显而易见”的方法行不通。这段代码,
predicate {:fuel 0,0} eq<A>(x: A, y: A)
{
x == y
}
lemma {:fuel eq<A>,1,2} reflexive<A>(x: A)
ensures eq(x, x)
{
}
给出错误消息:
templates.dfy(6,17): Error: this operator chain cannot continue with a descending operator
templates.dfy(6,18): Error: invalid UnaryExpression
是否可以通过这种方式使用模板化功能完成燃料注释?
答案 0 :(得分:1)
做到这一点的“明显”方法确实是做到这一点的方法。在Dafny 2.2.0版(更确切地说,在10 July 2018 commit中)修复了您得到的解析错误消息。