簡體   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