命题逻辑

时间:2011-09-16 15:41:32

标签: logic satisfiability

我有以下问题:

我有两个必须在逻辑上等同的命题公式。只有,其中一个包含'变量',在某种意义上,变量可以被任何命题公式替代。现在的问题是,我需要找到变量的实际替换,以便逻辑等价变为真。例如:

(a ^ ~b)或x = a

这里,x表示变量。通过将x替换为^ b,可以使这种逻辑等价成立,因此它变为:

(a ^ ~b)或(a ^ b)= a

所以这就是问题所在。我需要一种算法,它将“带有一个变量x的方程”作为输入,并给出变量x的输出值,使得等式成为逻辑等价。

总会有一个变量。 (实际上我可能会遇到多个变量的问题,但我想首先解决这个简单的情况)。并且所讨论的公式可以具有任何形式(它们不在CNF或DNF中)。此外,公式实际上可以是FALSE或TRUE,并且存在没有解决方案的情况(例如,对于“a或x = false”,没有解决方案)或多个解决方案(例如,对于“a和x = false” “任何错误的命题都是有效的答案。”

我所拥有的只是一个表格推理器,告诉我一个公式是否可以满足。所以我可以测试一个解决方案。但我的问题是给我一个解决方案。

1 个答案:

答案 0 :(得分:1)

我相信你所寻找的是一个可以处理未解释函数的推理引擎。这样的引擎可以处理包含函数的问题,例如,

(a ^ ~b)或f(a,b)= a

并且它们通常能够生成模型,即它们实际上会生成满足您的初始公式的函数f(...)。合适的推理引擎的一个例子是所谓的SMT求解器(见SMT-LIB)。一个流行的解决方案是微软的Z3(见Z3)。

该示例可以用SMT-LIB格式说明如下:

(set-option :produce-models true)
(declare-const a Bool)
(declare-const b Bool)
(declare-fun f (Bool Bool) Bool)

(assert (= (or (xor a (not b)) (f a b)) a))
(check-sat)
(get-model)
(exit)

和Z3生成模型

(define-fun f ((x!1 Bool) (x!2 Bool)) Bool 
  (ite (and (= x!1 false) (= x!2 true)) false false))

满足原始问题。通常,解决方案仅满足 问题。要获得完整的解决方案,可以使用量词。并非所有的SMT求解器都支持它们,但Z3例如使用完整的推理引擎来量化有限域上的量子(如布尔值),并且能够为这些公式生成模型。