A task, H e, consists of an expression e and a heap H. The
heap H serves as the portion of the memory that is private to the
expression e, i.e., H is visible only to the expression e (including
subexpressions of e). The reader may wonder why we introduce
tasks as a level of indirection in the syntax since they can take only
one form (H e). When we formalize the memory manager, we will
introduce another form of task, and the separation will make the
presentation cleaner, so we adopt it now.