如何为模板化函数添加燃料注释?

时间:2018-11-21 01:14:30

标签: dafny

我想为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

是否可以通过这种方式使用模板化功能完成燃料注释?

1 个答案:

答案 0 :(得分:1)

做到这一点的“明显”方法确实是做到这一点的方法。在Dafny 2.2.0版(更确切地说,在10 July 2018 commit中)修复了您得到的解析错误消息。