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.
While SearchGraph::update_parent_goal can be mostly shared between
ordinary nested goals/global cache hits and provisional cache hits,
using the provisional cache should not add any nested goals.
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.