The bird example works fine when a fixed *is-a* hierarchy
is in question. However, our writing the inheritance cancellation axioms
depended on knowing exactly from what higher level the properties were
inherited. This doesn't correspond to my intuition of how we humans
represent inheritance. It would seem rather that when we say that
birds can fly, we don't necessarily have in mind that an
inheritance of inability to fly from things in general is being cancelled.
We can formulate inheritance of properties in a more general way provided
we reify the properties. Presumably there are many ways of doing this,
but here's one that seems to work.

The first order variables of our theory range over classes of
objects (denoted by *c* with numerical suffixes), properties (denoted
by *p*) and objects (denoted by *x*). We don't identify our classes
with sets (or with the classes of Gödel-Bernays set theory).
In particular, we don't
assume extensionality. We have several predicates:

*ordinarily*(*c*,*p*) means that objects of class *c* ordinarily have
property *p*. means that class *c*1 ordinarily inherits from
class *c*2. We assume that this relation is transitive. *in*(*x*,*c*) means
that the object *x* is in class *c*. *ap*(*p*,*x*) means that property *p*
applies to object *x*. Our axioms are

Axiom (29) is the afore-mentioned transitivity of . (30) says that properties that ordinarily hold for a class are inherited unless something is abnormal. (31) cancels the inheritance if there is an intermediate class for which the property ordinarily doesn't hold. (32) says that properties which ordinarily hold actually hold for elements of the class unless something is abnormal. (33) cancels the effect of (32) when there is an intermediate class for which the negation of the property ordinarily holds. Notice that this reification of properties seems to require imitation boolean operators. Such operators are discussed in (McCarthy 1979).

Sat Jun 1 13:54:22 PDT 1996