A
semantic network is method of encoding a hierarchy of knowledge (i.e., an ontology) as a directed
graph structure of nodes and arcs between nodes representing concepts and relationships between concepts. Typical relationships include
is-a arcs which represent a subset (or sub-type),
has-a arcs which represent properties of objects, and set membership arcs (sometimes called
instance arcs). Semantic networks support a form of
default reasoning which is difficult to encode in first-order
predicate logic. For instance, we can represent the facts:
- Birds can fly
- Birds have wings
- Penguins are birds
- Penguins cannot fly
by the semantic network:
Bird -----[movement]--> Fly
^ \------[has-part]--> Wings
|
[is-a]
|
Penguin --[movement]--> Walk
Here, the Penguin category is a sub-set of the Bird category but overrides the "movement" attribute. This type of reasoning is sometimes called
non-monotonic as it breaks the monotonic property of logic (i.e., that adding new knowledge to a database doesn't invalidate anything we previously knew). In this case, we state that "all birds can fly" and then later partly contradict ourselves by stating that penguins are birds that cannot fly. Various other mechanisms to achieve this kind of "commonsense" default reasoning have been proposed including
frames, default logic, autoepistemic logic, nonmonotonic logic, and circumscription.
Inheritance in
OO is another form of default reasoning, and is one of the reasons why OO and the relational paradigm don't get on so well together.