Z3悬挂可进行通用量化

时间:2018-12-02 23:03:48

标签: z3

我是z3的新手,正在尝试将z3用于以下问题:

formula

我的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解决此问题?

1 个答案:

答案 0 :(得分:0)

这很可能超出了典型SMT解决方案和z3的功能范围。您可以按照以下说明尝试使用模式:https://rise4fun.com/z3/tutorialcontent/guide#h28但是,我已经尝试了一些最明显的父母,但这没有帮助。即使您找到了正确的“模式”,它们也往往很脆弱。所以,是的;我会说这超出了典型的SMT求解器所能处理的范围。