我读到了SAT和SMT。我一直想知道如何在真实的编程场景中应用它。
以下是一个例子:
鉴于var a = 20; var b = a;
为真,我们想知道b = 20
是真还是假。
我应该如何将其转换为布尔代数表达式并应用SAT?
答案 0 :(得分:2)
以下是使用许多SMT求解器支持的SMT-LIB 2.0标准的最简单示例:
(declare-fun a () Int)
(declare-fun b () Int)
(assert (= a b))
(assert (= a 20))
(assert (= b 20))
(check-sat)
您可以使用http://rise4fun.com/z3进行试验。它将响应“sat”意味着可以满足断言,这意味着b 可以为20。
然后你可以用(assert(distinct b 20))替换(assert(= b 20))。 Z3将以“不满意”回应,这意味着b不可能是其他任何东西。