自動推理筆記

redwind發表於2024-07-08

命題邏輯(還記得我嗎?)

命題公式

由若干布林變數和運算子($\neg, \cap, \cup, \rightarrow, \leftrightarrow$)得到的公式

有一些命題,我們能否從中得到另一個命題

將問題轉化成更“正式”的問題

使用自動化程式解決“正式”的問題

透過形式化,可以將每個概念轉化成符號

方法1:真值表證明該式為重言式,如果能證明是重言式,那麼就能證明

但是,這個方法是O(2^n)的,雖然在這裡還可以,但是如果n再大就不好用了

方法2:可滿足式

一個式子是可滿足的,如果其值可以為真

反之,如果其值恆為假,那麼則不可滿足

如果一個式子是重言式,那麼這個式子的否命題就是不可滿足式

判定一個式子是否是可滿足式的任務被稱為SAT(short for satisfiability)

許多問題可以變成SAT,比如想要檢測一個微處理器是否運作正常,可以用另一個微處理器與其比較,如果非(micro1<->micro2)不可滿足

不過,所有已知的方法最差的情況下都是指數級的

鴿巢公式:一個不可滿足公式,但想要證明公式本身不可滿足比較困難

有n*(n+1)個布林變數

設$C_n=\bigwedge_{j=1}^{n+1}(\bigvee_{i=1}^{n}P_{ij})$

$R_n=\bigwedge_{i=1...n, 1\leq j <k \leq n+1}(\neg P_{ij} \cup \neg P_{ik})$

$PF_n=C_n \cap R_n$

Same for disjunction

可以把上面的式子換成矩陣

於是,$C_n$的意思就是,對於第j列,至少有一項為真,而j從1至n,所以就是每一列都要有至少一項為真

所以至少有n+1項為真

而對於$R_n$的意思,對於第i行而言,每兩個變數裡至多有一個為真,所以n行最多有n個變數為真

而$PF_n$要求$C_n$和$R_n$都為真,這是不可能的。

鴿巢原理:如果有n+1個鴿子進了n個巢穴,至少有一個巢穴進了兩個鴿子

注意到,所有的約束都是必須的,如果有一個約束被移除,那麼式子就變成可滿足式了

這裡我們也看到了$C_n$是至少一個而$R_n$是至多一個,我們之後會經常用到。

使用計算機證明鴿巢式是很困難的

接下來我們會見識一種無關可滿足性,常用自動推理解決的問題

模型驗證:

如果二者為真,那麼給二者賦假

問題:能否從全真到全假?

同樣,類似的問題可能有很多狀態,如果想要一個一個搜尋過去會很困難

模型檢測:

有有限個狀態,有起始狀態、轉移方式,一些需要到達的狀態,問是否能到達

程式檢驗:可能需要同時考慮多種狀態轉移,非確定性的狀態

我們稱初始狀態的描述以及狀態轉移的描述為模型,因此檢測一個模型是否具有某些性質就叫模型檢驗

將模型的描述形式化為符號,之後作檢驗的方法稱為符號模型檢驗

自然,我們檢驗可以用SAT,但我們需要考慮更好的模型,這被稱作重要的(Crucial)模型

SAT的解法:Z3、Yices

一種基本的符號模型檢測方法:Binary Decision Diagrams(二進位制決策圖),NuSMV。

並非所有命題都可以轉化成命題邏輯,首先是SMT:Satisfiablity Modulo Theories,可滿足性模型理論,這裡主要研究線性不等式的理論,即變數不只是布林,而是整數和實數

注意,SMT依然適用SAT的一些術語,比如說給整數賦值如果能滿足,那麼依然稱為SAT

SMT-LIB語法

注意是語法使用的是字首表示式,2*a=(* 2 a)

SMT可以轉化成SAT解決

當然,還有比命題邏輯更難的邏輯,謂詞邏輯

不再限制域在數值上,而是在集合上

$\forall$ and $\exists$

等式邏輯

基本上就是數理邏輯的完整部分了

模型邏輯/時序邏輯(temporal logic)

Computation Tree Logic,計算樹邏輯

首先是命題邏輯

時間複雜性和空間複雜性

magnitude,規模

$f(n)=O(g(n))$

注意$\Omega$是指式子大於等於

SAT無線性時間

決策問題

決策問題是指你問一種事,回答你是或者否

P是指所有有多項式演算法的決策問題,即在多項式時間內可以回答你問的事

引入證據(certificate,驗證方法,中文常常稱作解而且不這麼說)一詞

NP問題是指:

如果一個決策問題的正確結果是否,那麼其一定沒有可供驗證的解

如果正確結果是真,那麼我們可以在多項式時間內驗證某個解是否符合要求

以SAT為例子,如果決策問題結果本身就絕對不可滿足,那麼自然不可能找到一個解,而如果可滿足,那麼才能多項式時間內驗證

對於大部分問題這挺顯然的,不過對於素數判定似乎有點問題,可以開學問老師

非確定性線性時間

很顯然,P問題全都是NP問題

但是我們無法確定NP問題是否都是P問題

NP完全問題:如果有一個NP問題A,而且假設A也是P的,那麼可以得到P=NP,那麼稱A為NP完全。或者也就是說所有NP問題可以歸約到這個問題上

(注意,規約並不是雙向的,考慮解二元一次方程和解一元一次方程,二元一次方程歸約到一元一次方程是可能的,但反過來是不可能的)

SAT是NP完全的,因此許多其他問題也是NP完全的。此外,SAT可以規約到其他一切問題上,但反之則不可

由於NP完全問題存在,所以不太可能有P的

SAT是地基

一些典型NPC問題:走過所有點,是否有路徑≤n?

這一問題與TSP密切相關(自我練習TSP<->SAT)

給一個無向圖,是否存在一個哈密爾頓迴路,經過每個點恰好一次?

給一些東西,能否將其分成兩組,兩組重量相同?

命題邏輯中的算數:二進位制算術=命題邏輯算數

由於算數可以轉化成二進位制算術,而二進位制算術可以使用SAT來考慮性質,所以我們可以將算術問題轉化成SAT

乘法也可以做,不過考慮到乘法其實是加法的重複,所以可以重用加法,我們後面會進一步瞭解這方面的內容

相關文章