SAT在实际编程场景中

时间:2013-04-12 17:21:48

标签: boolean-logic smt

我读到了SAT和SMT。我一直想知道如何在真实的编程场景中应用它。

以下是一个例子:

鉴于var a = 20; var b = a;为真,我们想知道b = 20是真还是假。

我应该如何将其转换为布尔代数表达式并应用SAT?

1 个答案:

答案 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不可能是其他任何东西。