Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Property Declarations

declare states how a property behaves, so the engine derives consequences with no extra rules: hierarchy (subproperty), reversal (inverse), chaining (transitive), and mirroring (symmetric).

// A son is a child.
declare subproperty hasSon hasChild.

// bob[hasParent -> rob] follows from rob[hasSon -> bob].
declare inverse hasChild hasParent.

// Chains collapse and mirror automatically.
declare transitive relatedTo.
declare symmetric relatedTo.