我试图为特定程序创建最弱的前提条件,其中存在总共44个临时变量。假设2个临时变量的值。所有其他变量都来自这两个变量。此外,还有2个输入变量。这是我的代码的一部分。
void main(int err1_10, int err2_10){
int x_mkfirm1,x_mkfirm2;
int dist_00=0, dist_10=5, a00=0, a01=0, a10=-1, a11=0, b00=1,b10=0, u=2;
int K_00=-1, K_01=1, x0_00=0,x0_10=3;
int x1_00,x2_00,x3_00,....,x20_00;
int x1_10,x2_10,x3_10,....,x20_10;
x0_00=x0_00+dist_00;
x0_10=x0_10+dist_10;
u=-K_00*x0_00-K_01*x0_10;
x1_00=a00*x0_00+a01*x0_10+u*b00;
x1_10=a10*x0_00+a11*x0_10+u*b10;
u=-K_00*x1_00-K_01*x1_10;
...........................
...........................
}
生成的最弱前提条件是x4_10
等等。在x1_00
之前没有提及x1_00
,x3
。此外,输入不存在于生成的最弱前提条件中。 frama -c wp的输出消息显示Alt-Ergo:0 (interruped: 1)
。对变量数量有任何限制吗?
答案 0 :(得分:3)
WP倾向于重命名变量,因此在证明义务中看不到与原始C源完全相同的名称是正常的。而且,从我的代码中看到,许多中间变量实际上是不变的。在将证明义务发送给定理证明者之前,WP通常会简化这一过程。你应该只看到结果值。
关于Alt-Ergo无法履行您的证明义务这一事实,如果没有确切的文件,基本上无法回答。从规范或代码中的错误到具有自动定理证明通常无法实现的非线性计算,存在太多可能性。但是,拥有许多中间变量不太可能在这里起到非常重要的作用。