Represents the set of atoms in the heads of clauses and in the bodies (formulas) of clauses.
Tracks proven atoms in the reverse order they were proved.
Applies known facts to clause
s, deriving a new, possibly empty list of clauses.
Applies known facts to clause
s, 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 set of all atoms in formula
.
Computes the atoms in the heads and bodies of the clauses in clause
.
Computes the set of atoms in clauses
that directly or transitively take a negated atom as input.
Computes the set of atoms in clauses
that directly or transitively take a negated atom as input.
For example, for the following clauses, this method would return List(a, d)
:
a :- b, not c
d :- a
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.
Derives the formula that results from substituting facts
into formula
.
Derives the formula that results from substituting facts
into formula
.