foundations of computational agents
A database is often complete in the sense that anything not implied is false.
You may want the user to specify which switches are up and which circuit breakers are broken so that the system can conclude that any switch not mentioned as up is down and any circuit breaker not specified as broken is ok. Thus, down is the default value of switches and ok is the default value for circuit breakers. It is easier for users to communicate using defaults than it is to specify the seemingly redundant information about which switches are down and which circuit breakers are ok. To reason with such defaults, an agent must assume it has complete knowledge; a switch’s position is not mentioned because it is down, not because the agent does not know whether it is up or down.
The given definite-clause logic does not allow the derivation of a conclusion from a lack of knowledge or a failure to prove. It does not assume that the knowledge is complete. In particular, the negation of an atom can never be a logical consequence of a definite-clause knowledge base.
The complete knowledge assumption assumes that, for every atom, the clauses with the atom as the head cover all the cases when the atom is true. In particular, an atom with no clauses is false. Under this assumption, an agent can conclude that an atom is false if it cannot derive that the atom is true. This is also called the closed-world assumption. It can be contrasted with the open-world assumption, which is that the agent does not know everything and so cannot make any conclusions from a lack of knowledge. The closed-world assumption requires that everything relevant about the world is known to the agent.
This assumption that there is a definition of each atom in terms of clauses is the basis of logic programming. Here we give the propositional version; richer variants are presented in Section 15.4 and Section 15.6.
Suppose the clauses for atom are
where an atomic clause is treated as the rule . The complete knowledge assumption specifies that if is true in some interpretation then one of the must be true in that interpretation; that is,
Because the clauses defining are equivalent to
the meaning of the clauses can be seen as the conjunction of these two propositions, namely, the equivalence
where is read as “if and only if” (see Figure 5.1). This equivalence is called Clark’s completion of the clauses for . Clark’s completion of a knowledge base is the completion for each atom in the knowledge base.
Clark’s completion means that if there are no rules for an atom , then the completion of this atom is , which means that is false.
Consider the clauses from Example 5.8:
Suppose that these are the only clauses for the atoms in the heads of these clauses, and there are no clauses for or . The completion of these atoms is
This implies that is false, is false, and is true.
With the completion, the system can derive negations, and so it is useful to extend the language to allow negations in the body of clauses. A literal is either an atom or the negation of an atom. The definition of a definite clause can be extended to allow literals in the body rather than just atoms. We write the negation of atom under the complete knowledge assumption as to distinguish it from classical negation that does not assume the completion. This negation is often called negation as failure.
Under negation as failure, body is a consequence of the knowledge base if , where is Clark’s completion of . A negation in the body of a clause or the query becomes in the completion. That is, a query follows from a knowledge base under the complete knowledge assumption means that the query is a logical consequence of the completion of the knowledge base.
Consider the axiomatization of Example 5.8. Representing a domain can be made simpler by expecting the user to tell the system only what switches are up and by the system concluding that a switch is down if it has not been told the switch is up. This can be done by adding the following rules:
Similarly, the system may conclude that the circuit breakers are ok unless it has been told they are broken:
Although this may look more complicated than the previous representation, it means that it is easier for the user to specify what is occurring in a particular situation. The user has to specify only what is up and what is broken. This may save time if being down is normal for switches and being ok is normal for circuit breakers.
To represent the state of Figure 5.2, the user specifies
The system can infer that must be down and both circuit breakers are ok.
The completion of the knowledge base consisting of the clauses above is
Notice that atoms that are in the bodies of clauses but are not in the head of any clauses are false in the completion.
Recall that a knowledge base is acyclic if there is an assignment of natural numbers (non-negative integers) to the atoms so that the atoms in the body of a clause are assigned a lower number than the atom in the head. With negation as failure, non-acyclic knowledge bases become semantically problematic.
The following knowledge base is not acyclic:
Clark’s completion of this knowledge base is equivalent to , which just specifies that and have different truth values but not which one is true.
The following knowledge base is also not acyclic:
Clark’s completion of this knowledge base is , which is logically inconsistent.
Clark’s completion of an acyclic knowledge base is always consistent and always gives a unique truth value to each atom. For the rest of this chapter, we assume that the knowledge bases are acyclic.
A logic is monotonic if any proposition that can be derived from a knowledge base can also be derived when extra propositions are added to the knowledge base. That is, adding knowledge does not reduce the set of propositions that can be derived. The definite-clause logic is monotonic.
A logic is non-monotonic if some conclusions can be invalidated by adding more knowledge. The logic of definite clauses with negation as failure is non-monotonic. Non-monotonic reasoning is useful for representing defaults. A default is a rule that can be used unless it is overridden by an exception.
For example, to say that is normally true if is true, a knowledge base designer can write a rule of the form
where is an atom that means abnormal with respect to some aspect . Given , the agent can infer unless it is told . Adding to the knowledge base can prevent the conclusion of . Rules that imply can be used to prevent the default under the conditions of the body of the rule.
Suppose the purchasing agent is investigating purchasing holidays. A resort may be adjacent to a beach or away from a beach. This is not symmetric; if the resort were adjacent to a beach, the knowledge provider would specify this. Thus, it is reasonable to have the clause
This clause enables an agent to infer that a resort is away from the beach if the agent is not told it is on a beach.
A cooperative system tries to not mislead. If we are told the resort is on the beach, we would expect that resort users would have access to the beach. If they have access to a beach, we would expect them to be able to swim at the beach. Thus, we would expect the following defaults:
A cooperative system would tell us if a resort on the beach has no beach access or if there is no swimming. We could also specify that, if there is an enclosed bay and a big city, then there is no swimming, by default:
We could say that British Columbia (BC) is abnormal with respect to swimming near cities:
Given only the preceding rules, an agent infers . If it is then told , it can no longer infer , but it can now infer and . If it is also told and , it can no longer infer . However, if it is then told , it can then infer .
By having defaults of what is normal, a user can interact with the system by telling it what is abnormal, which allows for economy in communication. The user does not have to state the obvious.
One way to think about non-monotonic reasoning is in terms of arguments. The rules can be used as components of arguments, in which the negated abnormality gives a way to undermine arguments. Note that, in the language presented, only positive arguments exist, so these are the only ones that can be undermined. In more general theories, there can be positive and negative arguments that attack each other.
The bottom-up proof procedure for negation as failure is a modification of the bottom-up procedure for definite clauses. The difference is that it can add literals of the form to the set of consequences that have been derived; is added to when it can determine that must fail.
Failure can be defined recursively: fails when every body of a clause with as the head fails. A body fails if one of the literals in the body fails. An atom in a body fails if can be derived. A negation in a body fails if can be derived.
Figure 5.11 gives a bottom-up negation-as-failure interpreter for computing consequents of a ground . Note that this includes the case of a clause with an empty body (in which case and the atom at the head is added to ) and the case of an atom that does not appear in the head of any clause (in which case its negation is added to ).
Consider the following clauses:
The following is a possible sequence of literals added to :
where is derived trivially because it is given as an atomic clause; is derived because ; is derived as there are no clauses for , and so the “for every clause” condition of line 18 of Figure 5.11 trivially holds. Literal is derived as ; and and are derived as the bodies are all proved.
The top-down procedure for the complete knowledge assumption proceeds by negation as failure. It is similar to the top-down definite-clause proof procedure of Figure 5.4. This is a non-deterministic procedure (see the box) that can be implemented by searching over choices that succeed. When a negated atom is selected, a new proof for atom is started. If the proof for fails, succeeds. If the proof for succeeds, the algorithm fails and must make other choices. The algorithm is shown in Figure 5.12.
Consider the clauses from Example 5.29. Suppose the query is .
Initially, .
Using the first rule for , becomes .
Selecting , and replacing it with the body of the third rule, becomes .
It then selects and starts a proof for . This proof for fails, and thus becomes .
It then selects and tries to prove . In the proof for , there is the subgoal , and so it tries to prove . This proof for succeeds. Thus, the proof for fails and, because there are no more rules for , the proof for fails. Therefore, the proof for succeeds.
is empty and so it returns as the answer to the top-level query.
Note that this implements finite failure, because it makes no conclusion if the proof procedure does not halt. For example, suppose there is just the rule . The algorithm does not halt for the query . The completion, , gives no information. Even though there may be a way to conclude that there will never be a proof for , a sound proof procedure should not conclude , as it does not follow from the completion.