CHƢƠNG 2 CÁC KỸ THUẬT SAT SOLVING CƠ BẢN
2.5. Giải pháp loại bỏ biến và loại bỏ mệnh đề
2.5.1. Loại bỏ biến
2.5.1.1. Loại bỏ biến sử dụng toán tử phân giải
Cho 2 mệnh đề C1={x, a1, a2, .., an} và C2={ , b1, b2,..,bn}. Khi đó ta có thể thay thế hai mệnh đề C1 và C2 bằng mệnh đề C = { a1, a2, .., an, b1, b2,..,bn}
Ta viết: C = C1C2
Mệnh đề C đƣợc gọi là giải thức của hai mệnh đề ban đầu bằng các thao tác trên biến x.
Ví dụ 2.9:
Cho 2 mệnh đề A1={x, a, b, c} và A2={ , d, e, f}.
Khi đó ta có thể thay thế hai mệnh đề A1 và A2 bằng mệnh đề A A=A1A2={a, b, c, d, e, f}
2.5.1.2. Loại bỏ biến với quan hệ self – subsum(tự gộp).
Mệnh đề C 2 hầu nhƣ gộp trong mê ̣nh đề C 1, trƣ̀ mô ̣t literal mà x lại có mặt trong C2. Khi đó thực hiện phân giải trên C1, C2 ta đƣợc . Sau khi thêm vào công thƣ́c CNF, chúng ta loại bỏ C1 cốt yếu là để loa ̣i bớt mô ̣t literal.
Khi đó ta nói C1 đƣợc củng cố bởi viê ̣c tƣ̣ gô ̣p sƣ̉ du ̣ng C2.
Thuật toán:
selfSubsume(Clause C) for each p C do
for each C‟ subsumed by C[p :=p] do
strengthen(C’, p ) - remove p from C’
Ví dụ 2.10: Cho 2 mệnh đề C1={ , a, b, c} và C2={x, a, b}
o Thực hiện phân giải trên biến x ta đƣợc C‟1 = {a, b, c}.
2.5.1.3. Loại bỏ biến bằng cách thay thế Thuật toán:
maybeEliminate(Var x)
if (x assigned or has zero occurrences) return
if (#occurs of x and are x both>10) return - heuristic cut- off def = findDefinition(x)
if (def # NODEF) maybeSubstitute(def)
else maybeClauseDistribute(x)
if (x was eliminated)
propagate Toplevel()
remove learned clause with x - for incremental SAT only
Giải nghĩa: maybeClauseDistribute(x): loại bỏ x bởi mệnh đề phân phối nếu kết quả có mệnh đề ít hơn so với bản gốc (sau khi loại bỏ mệnh đề tầm thƣờng thỏa mãn)
findDefinition(x): trả về hoặc là x ↔ p1 p2 ∨∨. . . ∨ pn hoặc x ↔ p1 ∧ p2 ∧. . . ∧ pn hoặc NoDef.
maybeSubstitute(def) định nghĩa của một chức năng phụ thuộc biến và thay thế mỗi lần xuất hiện của biến theo định nghĩa của nó.
Ví dụ 2.11: maybeEliminate(Var x) a1 = { x, c } a2 = { x, ¬d } a3= { x, ¬a, ¬b } a4= { ¬x, a } a5= { ¬x, b } a6= { ¬x, ¬e, f } Từ a2 = x, ¬d tƣơng đƣơng x d a3= x, ¬a, ¬b tƣơng đƣơng x a ^ b a4= ¬x, a tƣơng đƣơng a x
a5= ¬x, b tƣơng đƣơng b x a6= ¬x, ¬e, f tƣơng đƣơng ¬e f x - Def: x = a ^ b
- Thay thế x ở tất cả các mệnh đề phía trên = a ^ b ta thu đƣợc a7 = a c
a8 = a ¬ d a9 = b c a10 = b ¬ d
a11 = ¬ a ¬ b ¬ e f