🤖 AI Summary
This work addresses the inefficiency of conventional solvers when handling batches of SMT queries that share a large symbolic context but differ only in local predicates—a common scenario in program analysis. The authors formalize this setting as the “shared-context batch satisfiability problem” and propose three theory-agnostic solving strategies: predicate-by-predicate checking, disjunctive over-approximation, and Core-Literal Filtering (CLF). Among these, CLF learns core literals that conflict with the shared formula to rapidly reject unsatisfiable predicates, substantially accelerating solving. Experimental evaluation demonstrates that CLF achieves the best performance in active property checking, while disjunctive over-approximation excels in symbolic abstraction tasks. Collectively, the proposed techniques significantly increase the number of challenging instances solved.
📝 Abstract
Program analyzers often issue batches of SMT queries that share a large symbolic context and differ only in a small predicate. We formalize this recurring pattern as \emph{Shared-Context Batched Satisfiability}: given a formula $\varphi$ and predicates $P$, determine whether $\varphi \land p$ is satisfiable for each $p \in P$. We study three theory-agnostic strategies for this problem: predicate-by-predicate checking, disjunctive over-approximation, and Core-Literal Filter (CLF), a new algorithm that learns literals inconsistent with $\varphi$ and uses them to reject later predicates. Our evaluation on symbolic abstraction and active property checking shows that no strategy dominates universally: over-approximation is fastest on solved symbolic-abstraction queries, while CLF increases the number of solved hard instances and is fastest on active property checking. We advocate treating shared-context batched satisfiability as a first-class primitive in design program analyzers and exploring the algorithmic design space more systematically.