首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未预料的未知函数定义公理

未预料的未知函数定义公理
EN

Stack Overflow用户
提问于 2018-05-09 09:49:33
回答 1查看 54关注 0票数 1

SMT程序进一步对(未定义的)函数定义∀ s · wild(s) = 1 + wild(s)进行稍微迂回的编码(应用Dafny对递归函数的“有限函数”编码),然后尝试证明wild(emp) = 1 + wild(emp)。但是,Z3 4.6.0 (以及最近的4.7.0夜间版本)意外地产生了unknown而不是unsat

代码语言:javascript
复制
(set-option :auto_config false) ;; true -> no change in behaviour
(set-option :smt.mbqi false) ;; true -> no change in behaviour

(declare-sort Snap)      ;; In the full example, this is ...
(declare-const emp Snap) ;; ... declared using declare-datatypes

(declare-fun wild (Snap) Int)
(declare-fun wild%limited (Snap) Int)

(assert (forall ((s Snap)) (! ;; AX-1
  (= (wild%limited s) (wild s))
  :pattern ((wild s))
)))

(assert (forall ((s Snap)) (! ;; AX-2
  (=
    (wild s)
    (+ 1 (wild%limited emp)))
  :pattern ((wild s))
)))

(push) ;; Full examples uses incremental mode
(assert
  (not 
    (= 
      (wild emp)
      (+ 1 (wild emp)))))
(check-sat) ;; UNKNOWN --- but why?
(pop)

考虑到我对Z3和触发器的理解,我预计会发生以下证明步骤:

代码语言:javascript
复制
  ¬(wild(emp) = 1 + wild(emp))  // Source assertion
≡ ¬(1 + wild%limited(emp) = 1 + wild(emp))  // By AX-2
≡ ¬(1 + wild%limited(emp) = 1 + wild%limited(emp))  // By AX-1
≡ ¬(true)  // Done: UNSAT

但这似乎并没有发生。我的猜测是,公理没有实例化-实际上,get-info :all-statistics报告没有量化的实例化。

有人能解释一下这件事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-09 17:17:00

最后一个断言简化为"true",因此没有触发量词实例化的基本事件(野生emp)。

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

https://stackoverflow.com/questions/50250336

复制
相关文章

相似问题

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