Transitive Closure
The most-asked question in this project's history: reachability, recursion, and the rulebook's first-class closure field type.
Can a rulebook express transitive closure?
Yes — closure is a first-class field type in the rulebook. You declare "type": "closure" over a relationship, optionally with an edge filter, and every substrate emits it: WITH RECURSIVE in Postgres, owl:TransitiveProperty in OWL, an explicit traversal in Python, Go, and TypeScript.
Read the full answer →Why isn't closure just a formula?
Because a theorem says it can't be: no first-order formula with aggregates computes unbounded reachability. A bounded chain of lookups only fakes it until the graph gets one hop deeper — so the rulebook gives closure its own declared field type instead.
Read the full answer →Where is closure actually defined in each substrate?
In the rulebook, once — and then each substrate emits that one declaration with its native machinery: WITH RECURSIVE in Postgres, owl:TransitiveProperty in OWL, explicit traversals in Python, Go, TypeScript, and Entity Framework. A film series walks through each one.
Read the full answer →