Inheritance Networks — Basic Types and Taxonomy #
@cite{hudson-2010}
Hudson's Word Grammar organizes all linguistic knowledge as networks of nodes
connected by labeled directed links. Properties are not key-value pairs attached
to nodes — they ARE links between nodes. "Bird has wing" is a link labeled
front-limb from bird to wing. IsA links form a taxonomy; properties flow
down the taxonomy by default inheritance.
Hudson's six primitive relations (Ch 3 summary box, p. 68) #
isA, argument, value, or (choice), quantity, identity —
listed verbatim in @cite{hudson-2010}'s Ch 3 summary box on p. 68 under
"Links between concepts are therefore of two types: primitive relations /
conceptual relations".
This module distinguishes three link kinds at the type level:
- isA — taxonomic classification (
bird isA animal) - or — mutual exclusivity / choice sets (
male or female) - prop — named property/relation links (
bird --front-limb--> wing), coveringargument,value,identity,quantityvia the relation label
Key definitions #
LinkKind,Link,NetworkNetwork.nodeUniverse— finite carrier derived from the link listparents,ancestorsBound,ancestors— computational taxonomy traversalIsA— the canonical reflexive-transitiveisA, defined asRelation.ReflTransGenof the parent edge
IsA is the API; parents/ancestors are computational evidence
producers. IsA is decidable for any concrete network via the
Relation.ReflTransGen.decidable_of_finite_step substrate, so positive and
negative IsA claims both reduce by decide. Termination of ancestors
is bounded by nodeUniverse.length, not a magic constant.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Core.Inheritance.instReprLinkKind = { reprPrec := Core.Inheritance.instReprLinkKind.repr }
Equations
- Core.Inheritance.instDecidableEqLinkKind x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Core.Inheritance.instReprLink = { reprPrec := Core.Inheritance.instReprLink.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
The finite set of nodes mentioned by the network's links.
Used as the natural termination bound for traversals — the longest acyclic
path in a finite network cannot exceed nodeUniverse.length steps.
Equations
- net.nodeUniverse = (List.map Core.Inheritance.Link.source net.links ++ List.map Core.Inheritance.Link.target net.links).dedup
Instances For
Direct isA parents of a node.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Bounded transitive closure of parents. The bound parameter is intended
to be ≥ (nodeUniverse net).length; under that assumption every reachable
ancestor appears. Structurally recursive on Nat to keep decide happy.
Equations
- Core.Inheritance.ancestorsBound net node 0 = []
- Core.Inheritance.ancestorsBound net node n.succ = Core.Inheritance.parents net node ++ List.flatMap (fun (p : α) => Core.Inheritance.ancestorsBound net p n) (Core.Inheritance.parents net node)
Instances For
Transitive ancestors of node in the isA taxonomy. The recursion bound
is derived from the network itself (number of distinct nodes), so finite
networks always traverse to fixpoint without a magic constant.
Equations
- Core.Inheritance.ancestors net node = Core.Inheritance.ancestorsBound net node net.nodeUniverse.length
Instances For
The single-step parent relation.
Equations
- Core.Inheritance.isAEdge net a b = (b ∈ Core.Inheritance.parents net a)
Instances For
Equations
Reflexive-transitive isA: a inherits from b along the chain of isA
links. Defined as Relation.ReflTransGen of the parent edge — the same
construction mathlib uses for transitive closures elsewhere, so every lemma
about ReflTransGen (and the Preorder structure in Core.Inheritance.Order)
applies for free.
Equations
- Core.Inheritance.IsA net a b = Relation.ReflTransGen (Core.Inheritance.isAEdge net) a b
Instances For
Direct parents of any node are mentioned by some isA link, hence in
nodeUniverse. The "successor in universe" witness fed to the substrate.
IsA is decidable on finite networks: the network's own nodeUniverse
provides the bound, and Relation.ReflTransGen.decidable_of_finite_step
supplies the path-compression argument.
Equations
- Core.Inheritance.IsA.decidable net a b = Relation.ReflTransGen.decidable_of_finite_step (Core.Inheritance.parents net) net.nodeUniverse ⋯ ⋯ a b