  Contextual refinement and separation logics are successful verification
techniques that are very different in nature. First, the former guarantees
behavioral refinement between a concrete program and an abstract program while
the latter guarantees safety of a concrete program under certain conditions
(expressed in terms of pre and post conditions). Second, the former does not
allow any assumption about the context when locally reasoning about a module
while the latter allows rich assumptions. In this paper, we present a new
verification technique, called abstraction logic (AL), that inherently combines
contextual refinement and separation logics such as Iris and VST, thereby
taking the advantages of both. Specifically, AL allows us to locally verify a
concrete module against an abstract module under separation-logic-style pre and
post conditions about external modules. AL are fully formalized in Coq and
provides a proof mode that supports a combination of simulation-style reasoning
using our own tactics and SL-style reasoning using IPM (Iris Proof Mode). Using
the proof mode, we verified various examples to demonstrate reasoning about
ownership (based on partial commutative monoids) and purity ($i.e.$,
termination with no system call), cyclic and higher-order reasoning about
mutual recursion and function pointers, and reusable and gradual verification
via intermediate abstractions. Also, the verification results are combined with
CompCert, so that we formally establish behavioral refinement from top-level
abstract programs, all the way down to their assembly code.
