---
# System prepended metadata

title: '2024'

---

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