我试图用Z3在理论上做一些事情,但我不知道该怎么做。
想象一下我在C:
中有这个代码int c;
if (c>=65 && C<91)
int d = c + 32;
我想知道d的可能解决方案,例如97.我试着像这样在Z3中表达问题:
(declare-const c Int)
(assert (> c 64))
(assert (< c 91))
(define-fun d() Int
(+ 32 c)
)
(assert (> d 0))
(check-sat)
(get-model)
但是通过这种方式,我得到c的解决方案而不是变量d。
我该怎么做?
非常感谢!
答案 0 :(得分:0)
如果您想获得d的一个解决方案,您可以使用:
(declare-const c Int)
(declare-const d Int)
(assert (> c 64))
(assert (< c 91))
(assert (= d (+ c 32)))
(check-sat)
(get-model)
如果要查找d的所有解法,可以反复否定模型并将其添加为约束。请参阅泰勒的回复:Z3: finding all satisfying models
编辑:添加,稍微更直接的程序翻译将使用:
(>= 65 c)
而不是
(> 64 c)