Applies known facts to clauses, deriving a new, possibly empty list of clauses.

Applies known facts to clauses, deriving a new, possibly empty list of clauses.
1. If a fact is in the body of a clause, the derived clause has that fact removed from the body.
2. If the negation of a fact is in a body of a clause, that clause fails and is removed.
3. If a fact or its negation is in the head of a clause, the derived clause has that fact (or its negation) removed from the head.
4. If a head is empty, the clause proves nothing and is removed.

NOTE: empty bodies do not cause a clause to succeed yet.
All known facts must be applied before this can be done in order to avoid inconsistencies.
Precondition: no contradictions in facts
Postcondition: no atom in facts is present in the result
Postcondition: No clauses have an empty head

Computes the variables in the unique stable model for the program represented by clauses and
initialFacts.

Computes the variables in the unique stable model for the program represented by clauses and
initialFacts. clause may not have any negative feedback (that is, negation is acyclic)
and initialFacts cannot be in the head of any clauses in clause.
These restrictions ensure that the logic program has a unique minimal model.