VST 1.7版。
我遇到一个问题,当我尝试在函数调用中使用coq时,coq不会识别本地声明的变量。我有代码:
void deSignArray(int bits[], int invKey, int size)
{
int i = 0;
while (i < size) {
int bit = bits[i];
int ans = deSignInt(bit, invKey);
bits[i] = ans;
i++;
}
}
with coq types bits:list Z,invKey:Z,size:Z。
我成功地完成了bit = bits [i]步骤,但是当我尝试使用
前进时forward_call((Int.repr bit), (Int.repr invKey)).
步骤失败,在环境中找不到位。我尝试使用
forward_call(_bit, (Int.repr invKey)).
因为_bit出现在LOCAL子句中,但是这提供了类型不匹配,因为_bit是一个ident类型而不是int或Z类型。我想知道我应该如何使用我的本地定义的值来调用其他函数,任何帮助都将不胜感激。
答案 0 :(得分:1)
您提供给forward_call的参数(在您的情况下为Int.repr位,Int.repr invKey)必须是Coq值。在你的情况下,如果(在forward_call时)你的Coq证明目标中的位于行之上,变量“bit”和“invKey”,那么这应该可行。
你如何在线上获得这些变量?如果函数前提条件的LOCALS部分包含(temp _invKey(Vint(Int.repr invkey))),那么你应该在行上面有invKey。然后,在通过load语句(bit = bits [i])进入 forward 之后,你当前的证明目标的前提条件应该有一个形式的LOCALS(temp _bit something-or-other),它是你应该使用的东西,而不是“位”。