while(size(ρ)>0){ if(stopcondition) break l ← back(ρ) if(coef(C,l)≥0) continue R ← reason(l) preprocess(R) reduce(R) C ← resolve(R,C) postprocess(C) unassign(l) } L ← C
backjump to L non-conflicting postprocess(L)
Terminology:
Candidate stop conditions
More resolving steps
RS1
RS2
Goal: strengthen & simplify
removeUnits(R) saturate(R) weakenNonImplying(R) saturate(R)
Currently:
weaken down smallest falsified coefficients for total of at most
a - slack(ρ,R) - 1
if l ≥ 1 or 0 ≥ l,
eliminate l
O(|R| lg(|R|)) naively
but O(|R|) if R is sorted
Potentially:
weakenNonImplied(R) divideByGCD(R) reduceToEquivalentCardinality(R)
RS2
RS1
Goal: ensure resolvent is conflicting
slack(ρ,R)=0
slack(ρ,resolvent(R,C))<0
RS1
RS2
Goal: ensure resolvent is conflicting
Here be dragons, many parameters to play with
Note: in RS2, it is possible that the slack of R is negative
Goal: add up reason and conflict to cancel l
sufficient goal: resolvent is conflicting after unassign(l)
no need to fully cancel l?
some falsified literals can even be ignored?
RS2
RS1
Goal: strengthen C and fix potential overflow
saturate(C) addressOverflow(C)
Currently:
Potentially:
divideByGCD(C) reduceToEquivalentCardinality(C) ?
if largest coef c > 1e9, divide by smallest div s.t. ceil(c/div) ≤ 1e9, weaken non-falsifieds partially
O(|C|)
but may often be trivial
RS1: no saturate(C); addressOverflow(C) divides to cardinality
while(size(ρ)>0){ if(stopcondition) break l ← back(ρ) if(coef(C,l)≥0) continue R ← reason(l) preprocess(R) reduce(R) C ← resolve(R,C) postprocess(C) unassign(l) } L ← C
backjump to L non-conflicting postprocess(L)
O(n²)
Goal: L is not conflicting
RS2
RS1
Goal: simplify & strengthen L
weakenNonImplied(L) weakenNonImplying(L) saturate(L) divideByGCD(L) reduceToEquivalentCardinality(L)
Currently:
Potentially:
eliminateRedundantLits(L) generalizedSaturation(L) generalizedSelfSubsumption(L,.) ?
weaken non-falsified literals with coefficient ≤ slack(ρ,L)
O(|L| lg(|L|))
check whether smallest and largest set of coefficients summing op to
> degree are equal in size
RS1