Algorithm DP-SAT(V, C, v) Given: + A list of variables V + A list of clauses C, with each clause consisting of a list of literals drawn from the variables of V + A partial assignment, a partial function v mapping some of the variables of V to either true or false Return: + A total assignment consistent with C and v or false if no such total assignment exists for each c in C { if v is inconsistent with c return false } if v is a total assignment return v select x in V such that x is unassigned in v let v' = DP-SAT(V, C, v + [x -> true]) if v' is not false return v' let v'' = DP-SAT(V, C, v + [x -> false]) if v'' is not false return v'' return false