forward_call с локальными переменными
VST версия 1.7.
У меня проблема, когда 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++;
}
}
с типами битов coq: список Z, invKey: Z, размер: Z.
Я успешно прошел шаг bit = bits[i], но затем попытался сделать шаг вперед, используя
forward_call((Int.repr bit), (Int.repr invKey)).
шаг завершается неудачно, бит не обнаруживается в среде. Я пытался с помощью
forward_call(_bit, (Int.repr invKey)).
как _bit появляется в предложении LOCAL, но это обеспечивает несоответствие типов, так как _bit является типом identifier, а не типом int или Z. Мне интересно, как я должен использовать мои локально определенные значения для вызова других функций, в результате, любая помощь будет оценена.
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]), предварительное условие вашей текущей цели доказательства должно иметь ЛОКАЛЫ вида (temp _bit что-то-или-другое), и это что-то-или-то, что Вы должны использовать вместо "бит".