We ascribe type signatures to heaps and paths. A signature
is a mapping from locations to types. The heap typing judgment `0 H : ascribes the signature to heap H under path signature 0,
allowing the values in H to refer to locations in 0. The empty heap
; is given the empty signature . The signature for a non-empty heap
H is defined inductively: each binding ` 7! v extends the signature
with ` : if v has type under the union of 0 and the signature
of H. By typing the contents of a heap under locations from both
the path 0 and the heap , we allow a value in the heap to refer to
locations in both the private and shared parts of the memory.