命題邏輯(還記得我嗎?)
命題公式
由若干布林變數和運算子($\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
乘法也可以做,不過考慮到乘法其實是加法的重複,所以可以重用加法,我們後面會進一步瞭解這方面的內容