Based on the definitions in Section 2. we devise a
framework that breaks the verification process into three
invariants that correspond to the three steps necessary
for processing a memory operation (shown in Figure 1).
First, memory operations are read from the instruction
stream in program order (