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:
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.