  Theoretical foundations of compositional reasoning about heaps in imperative
programming languages are investigated. We introduce a novel concept of
compositional symbolic memory and its relevant properties. We utilize these
formal foundations to build up a compositional algorithm that generates
generalized heaps, terms of symbolic heap calculus, which characterize
arbitrary cyclic code segments. All states inferred by this calculus precisely
correspond to reachable states of the original program. We establish the
correspondence between inference in this calculus and execution of pure
second-order functional programs.
