template<typename K, typename V, typename Hash>
class persistent_map< K, V, Hash >
Persistent (structurally shared) map with O(1) copy.
Symex state that is snapshotted whenever the call stack is copied — the level1/level2 renaming maps and the value set — lives in one of these. A std::unordered_map copies O(N) at every per-branch merge_statet and state fork; immer's HAMT makes that copy O(1) structural sharing, the same win guard_seq's immer::vector gives the conjunct list. Two shared snapshots then compare in O(divergence) via diff(), which is what turns a control-flow merge from O(state) into O(paths' divergence).
Ownership: non-atomic refcount, no lock — symex runs single-threaded (the only parallelism, –parallel-solving, solves an already-built equation and never touches a live state). See guard_seq.h for the same reasoning.
Lookup returns const V* (immer's find), nullptr when absent — a pointer into shared storage, valid until the next mutating call; callers must not stash it across a set()/erase().