首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Z3 :Z3 C API中的未知结果

Z3 :Z3 C API中的未知结果
EN

Stack Overflow用户
提问于 2015-02-02 02:46:37
回答 1查看 140关注 0票数 1

在当前的Z3上下文中,断言“try(X,i,j) = ((Xi == i* j)”)已经是existed.the类型的X is (Array Int (Array Int Int)).try(X,i,j)是一个函数,返回类型是bool.here是Z3上下文:

代码语言:javascript
复制
 (kernel
      (forall ((Y (Array Int (Array Int Int))) (i Int) (j Int))
        (let ((a!1 (= (+ (select (select Y i) j) (* (- 1) j i)) 0)))
          (= (try Y i j) a!1))))

我要证明Z3过去:

代码语言:javascript
复制
 forall i[0..99],j[0..199]. try(X,i,j) 
    =>
       (forall i[0..49],j[0..199]. try(X,i,j) 
    &&  forall i[50..99],j[0..199]. try(X,i,j))

换句话说,我检查的不是这个断言是坐。Z3检查结果未知。但当我证明Z3:

代码语言:javascript
复制
forall i[0..99],j[0..199]. (X[i][j] == i*j)
=>
  (forall i[0..49],j[0..199]. (X[i][j] == i*j)
&& forall i[50..99],j[0..199]. (X[i][j] == i*j))

Z3证明了结果是有效的,换句话说,不是这个断言是非卫星的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-03 10:20:05

我不确定我是否理解这个问题,但是一般来说,我们不能期望Z3用量词来解决所有的公式。在这种情况下,它可能有助于启用宏查找器,该宏查找器传播函数定义,如

代码语言:javascript
复制
(forall ... (= (try ...) def )))

它将所有出现的try替换为def。该选项名为smt.macro_finder

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28270465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档