Tracks how nested goals have been accessed. This is necessary to disable
global cache entries if computing them would otherwise result in a cycle or
access a provisional cache entry.
In the initial iteration of a cycle, we do not yet have a provisional
result. In the case we return an initial provisional result depending
on the kind of cycle.
The search graph does not simply use Interner directly
to enable its fuzzing without having to stub the rest of
the interner. We don’t make this a super trait of Interner
as users of the shared type library shouldn’t have to care
about Input and Result as they are implementation details
of the search graph.