我是z3的新手,正在尝试将z3用于以下问题:
我的z3代码如下:
(declare-sort A)
(declare-sort O)
(declare-const o1 O)
(declare-const o2 O)
(declare-fun x () A)
(declare-fun g (A O) A)
(declare-fun f (A) Int)
(assert (= (f x) 0))
(assert (forall ((a A))
(forall ((o O))
(= (f (g a o)) (+ (f a) 1))
)
)
)
(assert (= (f (g x o1)) 1))
(assert (= (f (g (g x o2) o1)) 2))
(check-sat)
(get-model)
当我运行它(使用不带标志的z3)时,它似乎挂起了(我允许它运行一个小时再停止它)。我知道z3通常不是通用量化公式的决策程序。是z3以外的问题吗?还是需要做其他事情才能使z3解决此问题?
答案 0 :(得分:0)
这很可能超出了典型SMT解决方案和z3的功能范围。您可以按照以下说明尝试使用模式:https://rise4fun.com/z3/tutorialcontent/guide#h28但是,我已经尝试了一些最明显的父母,但这没有帮助。即使您找到了正确的“模式”,它们也往往很脆弱。所以,是的;我会说这超出了典型的SMT求解器所能处理的范围。