# 5.6.1 Non-monotonic Reasoning

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 overridden by an exception.

For example, to say that $b$ is normally true if $c$ is true, a knowledge base designer can write a rule of the form

 $\displaystyle b\leftarrow\mbox{}c\wedge\mbox{}\mbox{\sim}\mbox{ab\_a}.$

where ab_a is an atom that means abnormal with respect to some aspect $a$. Given $c$, the agent can infer $b$ unless it is told ab_a. Adding ab_a to the knowledge base can prevent the conclusion of $b$. Rules that imply ab_a can be used to prevent the default under the conditions of the body of the rule.

###### Example 5.30.

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

 $\displaystyle{\mbox{away\_from\_beach}\leftarrow\mbox{}\mbox{\sim}\mbox{on\_% beach}.}$

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:

 $\displaystyle{\mbox{beach\_access}\leftarrow\mbox{}\mbox{on\_beach}\wedge\mbox% {}\mbox{\sim}\mbox{ab\_beach\_access}.}$ $\displaystyle{\mbox{swim\_at\_beach}\leftarrow\mbox{}\mbox{beach\_access}% \wedge\mbox{}\mbox{\sim}\mbox{ab\_swim\_at\_beach}.}$

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:

 $\displaystyle{\mbox{ab\_swim\_at\_beach}\leftarrow\mbox{}\mbox{enclosed\_bay}% \wedge\mbox{}\mbox{big\_city}\wedge\mbox{}\mbox{\sim}\mbox{ab\_no\_swimming% \_near\_city}.}$

We could say that British Columbia (BC) is abnormal with respect to swimming near cities:

 $\displaystyle{\mbox{ab\_no\_swimming\_near\_city}\leftarrow\mbox{}\mbox{in\_BC% }\wedge\mbox{}\mbox{\sim}\mbox{ab\_BC\_beaches}.}$

Given only the preceding rules, an agent infers away_from_beach. If it is then told on_beach, it can no longer infer away_from_beach, but it can now infer beach_access and swim_at_beach. If it is also told enclosed_bay and big_city, it can no longer infer swim_at_beach. However, if it is then told in_BC, it can then infer swim_at_beach.

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 that can be undermined. In more general theories, there can be positive and negative arguments that attack each other.