判定過程:SAT與SMT求解算法(第2版)
[英] 丹尼爾·克勒寧(Daniel Kroening) [以] 奧弗·施特裏希曼(Ofer Strichman)
- 出版商: 人民郵電
- 出版日期: 2025-09-01
- 售價: $959
- 語言: 簡體中文
- 頁數: 352
- ISBN: 7115662207
- ISBN-13: 9787115662200
-
相關分類:
Algorithms-data-structures
下單後立即進貨 (約4週~6週)
商品描述
本書系統介紹了各種可判定的一階理論及其在自動軟件和硬件驗證、定理證明與編譯器優化等場景中的具體應用,涵蓋了可滿足性(SAT)求解器和可滿足性模理論(SMT)求解器的核心技術,以及命題邏輯、線性算術和位向量等多種建模語言。作者通過大量實際案例展示了如何將復雜的計算問題轉化為形式化的邏輯問題,並借助高效的判定過程進行求解。本書不僅為研究人員提供了豐富的理論知識,還為高級軟件工程師和開發者提供了實用的參考指南。
本書適合軟件工程師、計算機專業的學生以及對邏輯推理感興趣的讀者閱讀。
作者簡介
Daniel Kroening是牛津大學計算機科學系的教授,他的興趣包括自動驗證、軟件工程和編程語言。
Ofer Strichman是以色列理工學院工業工程與管理學院的教授,他的研究興趣包括軟件和硬件的形式化驗證,以及一階邏輯片段的決策程序。
目錄大綱
目錄
第1版序
第2版序
前言
第1章簡介和基本概念1
11形式推理的兩種方法2
111基於推演的證明3
112基於枚舉的證明4
113推演與枚舉5
12基本定義5
13範式及其屬性7
14理論視角14
141我們求解的問題17
142如何介紹理論18
15表達能力vs可判定性18
16邏輯公式的布爾結構20
17邏輯作為建模語言21
18習題23
19詞匯表24
第2章命題邏輯的判定過程25
21命題邏輯25
22SAT求解器27
221SAT求解的歷史27
222CDCL框架29
223布爾約束傳播和蘊含圖30
224學習子句與歸結法36
225決策啟發式39
226歸結圖和不可滿足核42
227增量式可滿足性問題43
228從SAT到CSP44
229SAT求解器:總結46
23習題47
231預熱練習47
232命題邏輯48
233建模48
234復雜度49
235CDCLSAT求解50
236相關問題51
24文獻註釋51
25詞匯表55
第3章從命題邏輯到無量詞理論56
31引言56
32DPLL(T)概述58
33形式化表達60
34理論傳播和DPLL(T)框架64
341理論傳播蘊含64
342性能,性……66
343返回蘊含賦值而非子句67
344生成強引理68
345即刻傳播68
35習題69
36文獻註釋70
37詞匯表72
第4章帶未解釋函數的等式邏輯73
41引言73
411復雜度和表達能力73412布爾變量74
413消除常數:一個化簡技術74
42未解釋函數74
421未解釋函數的使用75
422一個例子:證明程序的等價性76
43通過等價閉包判定等式和未解釋函數的合取公式80
44函數一致性不足以完成證明82
45未解釋函數的兩個應用例子84
451證明電路的等價性84
452通過翻譯驗證來驗證編譯過程86
46習題87
47文獻註釋89
48詞匯表90
第5章線性算術91
51引言91
52單純形法93
521範式93
522單純形法基礎94
523帶上下界的單純形法96
524增量式問題99
53分支限界方法100
54Fourier–Motzkin消元106
541等式約束106
542變量消除106
543復雜度109
55Omega測試109
551問題描述109
552等式約束110
553不等式約束113
56預處理118
561線性系統的預處理118
562整數線性系統的預處理119
57差分邏輯120
571引言120
572一個差分邏輯判定過程122
58習題123
581熱身練習123
582單純形法123
583整數線性系統124
584Omega測試124
585差分邏輯125
59文獻註釋126
510詞匯表127
第6章位向量128
61位向量算術128
611語法128
612符號130
613語義131
62位向量算術的平展判定方法136
621轉換骨架136
622算術運算137
63增量位平展140
631有些運算是難的140
632基於未解釋函數進行抽象142
64定點算術142
641語義142
642平展144
65習題145
651語義145
652位向量算術的位級別變量145
653使用線性算術求解器146
66文獻註釋148
67詞匯表149
第7章數組151
71引言151
711語法152
712語義153
72消除數組項154
73數組理論片段的歸約算法155
731數組屬性155
732歸約算法157
74惰性編碼過程159
741基於DPLL(T)的增量編碼159
742讀覆寫公理的惰性實例化159
743外延規則的惰性實例化162
75習題164
76文獻註釋165
77詞匯表166
第8章指針邏輯167
81引言167
811指針及其應用167
812動態內存分配169
813帶指針程序分析169
82一個簡單的指針邏輯171
821語法171
822語義173
823內存模型的公理化174
824增加結構類型175
83堆分配的數據結構建模176
831鏈表176
832樹178
84一個判定過程180
841應用語義轉換180
842純變量182
843內存劃分183
85基於規則的判定過程185
851鏈接型數據結構的可達性謂詞185
852判定可達性謂詞公式187
86習題190
861指針公式190
862可達性謂詞191
87文獻註釋192
88詞匯表194
第9章量化公式196
91引言196
911例子:量化布爾公式198
912例子:量化析取線性算術199
92量詞消去200
921前束範式200
922量詞消去算法202
923量化布爾公式的量詞消去203
924量化析取線性算術的量詞消去206
93基於搜索的QBF算法207
94有效命題化邏輯210
95一般量化212
96習題219
961熱身練習219
962QBF220
963EPR222
964一般量化222
97文獻註釋222
98詞匯表224
第10章判定理論組合公式225
101引言225
102預備知識225
103Nelson–Oppen過程227
1031凸理論的組合227
1032非凸理論的組合231
1033Nelson–Oppen過程的正確性證明233
104習題237
105文獻註釋238
106詞匯表240
第11章命題邏輯編碼241
111惰性編碼vs積極編碼241
112從未解釋函數到等式邏輯241
1121Ackermann歸約242
1122Bryant歸約245
113等式圖249
114化簡公式252
115基於圖的命題邏輯歸約255
116等式和小值域實例化258
1161一些簡單的界259
1162基於圖的域分配261
1163域分配算法262
1164可靠性證明265
1165總結268
117Ackermann歸約vsBryant歸約268
118習題270
1181歸約271
1182域分配272
119文獻註釋273
1110詞匯表275
第12章判定過程在軟件工程和計算生物上的應用277
121引言277
122有界程序分析279
1221檢查單一路徑的可行性279
1222檢查有界程序中所有路徑的可行性283
123無界程序分析285
1231使用非確定賦值的過近似285
1232過估計可能太粗糙287
1233循環不變式290
1234利用循環不變式對抽象進行細化292
124SMT方法在生物學中的應用294
1241DNA計算294
1242基因調控網絡296
125習題298
1251熱身練習298
1252有界符號模擬298
1253程序的過近似300
126文獻註釋301
ASMT-LIB:簡介304
A1SMT庫與標準304
A2SMT-LIB文件接口305
A21命題邏輯306
A22算術307
A23位向量算術308
A24數組309
A25等式理論和未解釋函數309
B判定過程的C++庫311
B1簡介311
B2圖和樹312
B3解析314
B31一階邏輯語法314
B32問題的文件格式316
B33存儲標識符的類317
B34解析樹317
B4CNF和SAT319
B41產生CNF319
B42解析命題骨架320
B5一個惰性判定過程模板321
參考文獻323