# 2024-09-03 caching meeting PR: https://github.com/rust-lang/rust/pull/128828 Fuzzing repo: https://github.com/lcnr/search_graph_fuzz WIP dev-guide chapter: https://hackmd.io/1ALkSjKlSCyQG-dVb_PUHw - A - B a coinductive goal - C - A coinductive cycle - C reusable - A coinductive cycle vs - A - b a inductive goal - C - A inductive cycle - C not reusable - A coinductive cycle - C - A - b - C co - C co Niko's example - C - A - B - C co - C co results in a global cache entry (C, nested={ A, B, C }) - D - C // would use global entry deterministically, which is "fine" - B - C // not ok to reuse, intersect - A - B co - D BECAUSE OF INCOMPLETENESS!!!!11 - C // will use prov. cache entry over the global one Example 2 - C - A - b is OR: - C in - true - C co results in a global cache entry (C, nested = {A,b,C}) - D - b a inductive goal - C // cannot reuse because b is in the nested goals - C // can reuse (but maybe we have a prov cache that overrides) ![This is fine](https://media0.giphy.com/media/QMHoU66sBXqqLqYvGO/giphy.gif?cid=6c09b952z9bqt7ntpuglhfo9lwb8mdv24wj17zpg8tfwt3y7&ep=v1_gifs_search&rid=giphy.gif&ct=g) * A * B * A -- prov cache entry * D nested goals * A {nested_goals = B, A} * B {nested_goals = B, A} * A -- prov cache entry * D * true why we can't reuse overflow? * we didn't finish the computation out, it could've resulted in a global cache entry when done * but if no overflow, then the fact that it's in prov cache indicates there was a cycle, so if it were in the global cache, it would have a nested goal (and hence not be usable)