【发布时间】:2013-11-15 22:17:27
【问题描述】:
我有这个 C 代码:
while(p->next) p = p->next;
我想证明,不管列表有多长,当这个循环结束时,p->next等于NULL,EIP指的是这个循环之后的下一条指令。
但我不能。有谁知道如何在 Isabelle/HOL 中证明循环?
【问题讨论】:
-
我不知道有任何直接方法可以证明 Isabelle/HOL 中 C 代码的属性。您能否详细说明您正在尝试实现的目标以及您在哪里使用(或期望使用)这样做?也许afp.sourceforge.net/entries/Simpl.shtml 很有趣。顺便说一句:什么是“EIP”?
-
独立于您要使用的证明工具。您打算如何处理列表是循环的(即循环不终止)的情况?
-
你好@chris。对不起,我不能告诉你太多细节,这是一个团队工作,还没有发布。我可以告诉你的是,我们在 Isabelle 中模拟 X86 ISA 指令,比如 mov、jmp。 gcc 生成的汇编代码被翻译成 Isabelle,并在 Isabelle 中运行。当没有循环时,结果非常好。但是我们不能处理循环,这要困难得多。我们想证明对于所有 n,这个 while 循环将以 p->next 等于 NULL 结束,并且 eip (pc) 将指向循环下面的下一条指令。
-
我不是在询问您项目的细节;),只是更多的上下文,例如,您使用的是 Isabelle 的哪个逻辑,如何将 C 代码导入 Isabelle,...没有这个,你的问题不容易回答。
标签: c loops while-loop isabelle