DPLL algorithm is basically a combination of three concepts:

Backtracking

Unit propagation

Pure literal rule

Answering your first question, the function call EXTEND(P, true, model) will return a new partial model in which P has true value.

And for your second question, the __DPLL__ is essentially a **backtracking algorithm**, and that is the main idea behind the recursive calls.

The algorithm is building a solution while trying assignments, you have a partial solution that might prove successful or not-successful as you go on.

**The basic idea of the algorithm is:**

"Guess" a variable

Find all unit clauses created from the last assignment and assign the needed value

Iteratively retry step 2 until there is no change (found transitive closure)

If the current assignment cannot yield true for all clauses - fold back from recursion and retry a different assignment

If it can - "guess" another variable (recursively invoke and return to 1)

For a better understanding of the DPLL algorithm, refer the following link:

__http://www.dis.uniroma1.it/~liberato/ar/dpll/dpll.html__

__http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.380.2837&rep=rep1&type=pdf__