In HP, we organize memory as a tree of heaps and restrict
expressions to access only part of the memory (along a path going
up the hierarchy). A heap, written H (and variants), is simply a
mapping from locations to (large) values. A heap path or simply a
path, written as P (and variants), is a list or stack of heaps. A path
represents a leaf-to-root path in the heap tree; it is the collection of
heaps to which an expression has access.