Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
sav08:advanced_sat_solving_techniques [2008/03/12 21:34] vkuncak |
sav08:advanced_sat_solving_techniques [2008/03/13 10:43] vkuncak |
||
---|---|---|---|
Line 45: | Line 45: | ||
Need efficient data structures: | Need efficient data structures: | ||
+ | * counters: simple, need many updates | ||
* head/tail list | * head/tail list | ||
- | * two-literal watching | + | * two-literal watching: each var has list of unassigned literals, do search to see if there are other literals to watch in clause |
+ | * invariant: each clause has at least one watched literal, but not all literals need to be watched | ||
- | Other mechanisms less important: e.g. propagating equivalences. | + | Mechanisms other than unit propagation are less important: e.g. propagating equivalences. |
===== Conflict Analysis and Lemma Learning - analyze_conflict() ===== | ===== Conflict Analysis and Lemma Learning - analyze_conflict() ===== | ||
Line 66: | Line 68: | ||
analyze_conflict() { | analyze_conflict() { | ||
cl = find_conflicting_clause(); | cl = find_conflicting_clause(); | ||
- | while (!stop_criterion_met(c1)) { | + | while (!is_asserting_clause(c1)) { |
var = var_of_lit(choose_literal(c1)); | var = var_of_lit(choose_literal(c1)); | ||
c1 = resolve(c1, antecedant(var), var); | c1 = resolve(c1, antecedant(var), var); | ||
Line 79: | Line 81: | ||
* deduction rule was that some original clause C became unit clause because all literals exept literal containing var were false | * deduction rule was that some original clause C became unit clause because all literals exept literal containing var were false | ||
* then antecedant(var) is C | * then antecedant(var) is C | ||
+ | |||
+ | asserting clause: | ||
+ | * false at current decision level | ||
+ | * only one literal has current decision level (others were assigned before) | ||
+ | |||
+ | If c1 is not asserting clause yet, we resolve it with antecedants of variables, following backwards deduction steps. | ||
+ | |||
+ | The clause forces a different value of a decision variable at a previous level. | ||
===== Storing Clauses ===== | ===== Storing Clauses ===== |