Imperative programmers often use cyclically linked trees in order to achieve O(1) navigation
time to neighbours. Some logic programmers believe that cyclic terms are necessary to achieve
the same in logic-based languages. An old but little-known technique provides O(1) time and
space navigation without cyclic links, in the form of reversible predicates. A small modification
provides O(1) amortised time and space editing.