# 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)

* 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)