作者ric2k1 (Ric)
看板EE_DSnP
標題[情報] SAT 之使用
時間Sat Jan 14 22:26:40 2012
雖然講義裏頭應該是說明得很清楚了,但我還是翻成中文來跟大家說明一下,
其實是很簡單用的...
1. Create 一個 SatSolver 的 object, 並且呼叫 initialize().
2. 在證明任何 FEC pair 之前,請先建立整個 circuit 的 SAT model,
也就是說: (1) 每個 gate (含 PIs) 要對應到一個 SAT Var (solver.newVar()),
(2) 呼叫 solver.addAigCNF() 去建立每個 AIG gate 對應的 CNF,
這些 CNF clauses 會存在 solver 中。
3. 針對某個要證明的 FEC pair "F == XOR(f, g)", (<= 要給 F 一個新的 SAT Var)
呼叫 solver.addXorCNF() 去建立對應的 CNF clauses.
4. 呼叫 "solver.assumeProperty(F_var)" 以及 solver.assumpSolve()
來看看 F == XOR(f, g) 是否可以 satisfied.
5. 如果 UNSAT (solve() return false), 則 f alywas = g, => 可以merge.
如果 SAT (solver() return true), 則可以根據 circuit 的 PIs 所對應的
SAT vars 去抓到 SAT assignment (呼叫 getValue()),
然後等一下可以利用這些 assignment (pattern) 去 simulate.
6. 下次要再證明別的 pair 時只要把 assumption release,
再重複 3 ~ 5 就可以了! 不用重建電路的 proof model.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.36.54.233
1F:→ ric2k1:補充一下,如果你的電路改掉了,circuit 的 proof model 01/14 22:29
2F:推 happ6:請問一下在步驟2的時候,po有要建立SAT Var嗎? 01/14 22:29
3F:→ ric2k1:可能就要重建囉! 不能只是 release assumption 哦! 01/14 22:30
4F:→ ric2k1:PO 如果會在 FEC pairs 裏頭理論上是要啦! 不過也可以讓 01/14 22:31
5F:→ ric2k1:PO 的 SAT var 等於 po->fanin[0] 的 SAT var 01/14 22:31
6F:推 happ6:謝謝教授 01/14 22:32
7F:推 ntueesuevan:請問我們找的FEC pairs不是不用包含po嗎? 01/14 22:58
8F:→ ric2k1:所以我說 "如果"... 01/14 23:12
9F:→ ric2k1:更正一下,我刪掉 gates 時並沒有重新 create proof model 01/15 00:12
10F:→ ric2k1:不過這邊要小心,不要拿到 garbage 來證... 01/15 00:12