【发布时间】:2013-01-06 11:19:59
【问题描述】:
假设我们有两个未解释的函数 func1 和 func2:
stuct_sort func1(struct_sort);
stuct_sort func2(struct_sort ,int).
他们有关系:
func2(p,n)=func1(p) if n==1
func2(p,n)=func1(func2(p,n-1)) if n>1
我想知道的是,如果以下命题:
((forall i:[1,m].func2(p,i)==Z)&&(q==func1(p))) implies (forall i:[1,m-1].func2(q,i)==Z)
可以在Z3中证明是真的吗?
在我的程序中,证明结果是Z3_L_UNDEF。
当我给 m 赋值比如 3 时,现在的命题是
((forall i:[1,3].func2(p,i)==Z)&&(q==func1(p))) implies (forall i:[1,3-1].func2(q,i)==Z);
结果是Z3_L_UNDEF。
但是当我如下单独重写案例(不使用forall)时,结果是true。
(func2(p,1)==Z)&&(func2(p,2)==Z)&&(func2(p,3)==Z)&&(q==func1(p)) implies (func2(q,1))&&(func2(q,2)).
找不到原因,期待你的回答
【问题讨论】: