In this chapter, we present a framework to integrate abstract interpretation into JavaDL. Our abstraction does not act directly on target programs, but on their symbolic state representation (JavaDL's updates). Unlike counter example guided abstraction-refinement (CEGAR) loops, we start with a fully precise representation and use abstraction only incrementally on demand, for example, to enforce termination of symbolic execution of a loop. Incremental means two things: use abstractions that are not coarser than necessary and apply abstraction to as few program locations as possible. This allows us to become fully-automatic, as for instance, no loop invariants need to be provided, but to maintain high precision.
Unable to display preview. Download preview PDF.