繁体   English   中英

命题逻辑

[英]Propositional logic

我有以下问题:

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

(a ^〜b)或x = a

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

(a ^〜b)或(a ^ b)= a

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

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

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

我相信您正在寻找的是可以处理未解释功能的推理引擎。 这样的引擎可以处理包含功能的问题,例如

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

并且它们通常能够生成模型,即实际上它们会生成满足您的初始公式的函数f(...)。 合适的推理引擎的一个示例是所谓的SMT求解器(请参阅SMT-LIB )。 流行的求解器是Microsoft的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例如使用完整的推理引擎来对有限域(例如布尔值)上的量词进行量化,并能够生成此类公式的模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM