2026-04-05ยท10 min readยทsota.io team

Deploy BLAST to Europe โ€” Thomas Henzinger ๐Ÿ‡ฆ๐Ÿ‡น (IST Austria), the Lazy Abstraction Pioneer that Fathered CPAchecker and Modern CEGAR-Based Verification, on EU Infrastructure in 2026

In 2001, software model checking faced a fundamental scalability problem. Predicate abstraction โ€” the technique of approximating a program's state space using a set of boolean predicates โ€” was theoretically powerful but practically slow. The bottleneck was not the model checking itself but the abstraction computation: before searching for bugs, the tool had to compute the abstract version of the entire program globally, using all current predicates. When a spurious counterexample required adding new predicates, the global computation had to be restarted from scratch. For industrial C programs with hundreds of thousands of lines, this cycle was prohibitively expensive.

The insight that changed software verification was deceptively simple: don't compute the abstraction globally โ€” compute it lazily, only where you need it.

This insight became Lazy Abstraction, published at POPL 2002 by Thomas A. Henzinger, Ranjit Jhala, Rupak Majumdar, and Grรฉgoire Sutre. The tool that implemented it was BLAST โ€” the Berkeley Lazy Abstraction Software verification Tool. BLAST went on to directly inspire CPAchecker (Dirk Beyer, LMU Munich ๐Ÿ‡ฉ๐Ÿ‡ช), the tool that has won SV-COMP more times than any other. The lineage โ€” BLAST โ†’ CPAchecker โ€” is the direct line from the 2002 POPL paper to the current state-of-the-art in automated software verification.

Thomas Henzinger and the BLAST Team

Thomas A. Henzinger ๐Ÿ‡ฆ๐Ÿ‡น is the primary architect of BLAST and one of the most influential figures in formal methods worldwide. He was born in Austria ๐Ÿ‡ฆ๐Ÿ‡น, completed his PhD at Stanford, held professorships at Cornell and UC Berkeley, and then returned to Europe as founding President of IST Austria (Institute of Science and Technology Austria, now ISTA) in Klosterneuburg ๐Ÿ‡ฆ๐Ÿ‡น โ€” a role he has held since 2009. IST Austria is a research university funded by the Austrian Federal Government and the State of Lower Austria, with an explicit mission to be a world-class European science institution. It is 100% EU-based, subject to EU law, and outside the scope of the US Cloud Act.

Henzinger's research spans reactive systems, hybrid systems, timed automata (he co-developed the UPPAAL framework), interface theories, and algorithmic game theory. His work on BLAST represents the convergence of these threads: model checking + abstraction + refinement, applied to real C programs.

Rupak Majumdar ๐Ÿ‡ฎ๐Ÿ‡ณ was a PhD student at UC Berkeley under Henzinger at the time of the BLAST work. He is now a Scientific Director at the Max Planck Institute for Software Systems (MPI-SWS) in Kaiserslautern ๐Ÿ‡ฉ๐Ÿ‡ช and an Adjunct Professor at TU Kaiserslautern. MPI-SWS is a German federal research institution, part of the Max Planck Society โ€” 100% EU-based. Majumdar's current research focuses on reactive synthesis, probabilistic programs, and distributed systems verification. He has been a leading figure in the EU formal methods community for over 15 years.

Grรฉgoire Sutre was a postdoctoral researcher at UC Berkeley contributing to BLAST. He is now a Professor at LaBRI (Laboratoire Bordelais de Recherche en Informatique), Universitรฉ de Bordeaux ๐Ÿ‡ซ๐Ÿ‡ท โ€” a French public university. LaBRI is a joint CNRS/Bordeaux research unit. Sutre's current research includes pushdown systems, weighted automata, and quantitative verification.

Dirk Beyer ๐Ÿ‡ฉ๐Ÿ‡ช, although not an original BLAST author, joined the Berkeley group and co-authored the main BLAST tool paper (SPIN 2003 / ENTCS 2004). Beyer later founded the SoSy-Lab at LMU Munich ๐Ÿ‡ฉ๐Ÿ‡ช and created CPAchecker โ€” the direct architectural descendant of BLAST. Beyer is German, based in Munich, and has been the most prolific contributor to SV-COMP infrastructure (including BenchExec) in the EU.

How BLAST Works: Lazy Abstraction and the Abstract Reachability Tree

Classical CEGAR (before BLAST)

Before BLAST, the standard approach to predicate abstraction-based verification was:

  1. Abstract: Compute a global predicate abstraction of the entire program using the current set of predicates P = {p1, ..., pn}. This means replacing every concrete state with a boolean vector (p1(s), ..., pn(s)).
  2. Model check: Run a model checker (e.g., BDD-based) on the abstract program.
  3. Counterexample: If an abstract error path is found, simulate it on the concrete program.
  4. Refine: If the path is spurious, extract new predicates from the infeasibility proof. Go to step 1 with P โˆช {new predicates}.

The problem: every refinement restarted the global abstraction from scratch. Adding one predicate invalidated the entire computation.

BLAST's Lazy Abstraction

BLAST introduces the Abstract Reachability Tree (ART): a data structure that interleaves abstraction, model checking, and refinement in a single pass.

ART node = (program location, abstract state)
ART edge = abstract transition

Exploration:
1. Expand ART lazily: compute abstract post-image only for explored nodes
2. If new node is covered by existing node: mark as covered (prune)
3. If error location reached: extract counterexample path in ART
4. Check counterexample feasibility (concrete simulation)
5. If infeasible: add predicates ONLY at the relevant ART nodes
6. Re-expand from refinement point (not from scratch)

The key operation is local refinement: when a spurious counterexample is found, BLAST computes the predicates needed to eliminate it using Craig interpolation (or predicate images), and adds these predicates only to the relevant nodes in the ART. The rest of the tree remains valid and does not need recomputation. This makes refinement incremental rather than global.

// Example: C function with potential null dereference
int get_value(struct Node *head) {
    struct Node *p = head;
    while (p != NULL) {
        p = p->next;
    }
    return p->value;  // always null here โ€” BLAST finds this
}

BLAST's analysis:

  1. Start ART with {head โ‰  NULL, head = NULL} as initial predicates
  2. Explore loop: at loop exit, p = NULL
  3. Reach p->value with abstract state where p = NULL is reachable
  4. Report: null dereference is reachable โ€” genuine bug, not spurious

Predicate Discovery via Craig Interpolation

When a counterexample is spurious, BLAST extracts new predicates using Craig interpolation: given an infeasible path A โˆง B = false, find a formula I such that A โŠข I and I โˆง B = false. The interpolant I is the new predicate โ€” it is the minimal information needed to separate the concrete path segments.

This is the same technique used by CBMC (later, for BMC), UltimateAutomizer (Heizmann/Podelski, Freiburg ๐Ÿ‡ฉ๐Ÿ‡ช), and CPAchecker (Beyer, LMU Munich ๐Ÿ‡ฉ๐Ÿ‡ช). Craig interpolation for predicate discovery in CEGAR-based verification was pioneered in the BLAST and SLAM era.

Comparison: BLAST vs SLAM

Both BLAST and SLAM (Thomas Ball + Sriram Rajamani, Microsoft Research, POPL 2001) emerged in the same period and both use predicate abstraction + CEGAR. The differences:

AspectSLAM (MSR)BLAST (Berkeley)
DomainWindows device driver API complianceGeneral C safety properties
AbstractionGlobal (per-refinement restart)Lazy (ART, incremental)
Property typeTemporal API usage rulesGeneral safety/reachability
RefinementNew predicates โ†’ full restartNew predicates โ†’ local ART update
Industrial deploymentWindows DDK (static driver verifier)Research tool, academic benchmark
EU lineageCBMC (Kroening, Oxford ๐Ÿ‡ฉ๐Ÿ‡ช) via CPROVERCPAchecker (Beyer, LMU Munich ๐Ÿ‡ฉ๐Ÿ‡ช)

SLAM became the basis of Microsoft's Static Driver Verifier (SDV), shipped with the Windows DDK. BLAST became the conceptual foundation of CPAchecker.

EU Lineage: BLAST โ†’ CPAchecker

The direct intellectual lineage from BLAST to CPAchecker is well-documented. Dirk Beyer, who co-authored the BLAST tool paper, founded the SoSy-Lab at LMU Munich ๐Ÿ‡ฉ๐Ÿ‡ช and designed CPAchecker's Configurable Program Analysis (CPA) framework explicitly as a generalisation of BLAST's lazy abstraction approach.

The key architectural inheritance:

BLAST conceptCPAchecker equivalent
Abstract Reachability Tree (ART)ARG (Abstract Reachability Graph)
Lazy predicate abstractionPredicateCPA (one of many pluggable CPAs)
Local refinementCEGAR with lazy abstraction
Craig interpolationSMTInterpol (Hoenicke, Freiburg ๐Ÿ‡ฉ๐Ÿ‡ช) / MathSAT5 (FBK Trento ๐Ÿ‡ฎ๐Ÿ‡น)
Concrete counterexample simulationFeasibility check in refinement loop

CPAchecker goes beyond BLAST by making the abstract domain pluggable (the CPA lattice): predicate abstraction is one choice, but so is k-induction, BDD-based explicit-state, interval analysis, and symbolic execution. This generalisation โ€” motivated by BLAST's success โ€” allowed CPAchecker to dominate SV-COMP across multiple categories simultaneously.

BLAST โ†’ CPAchecker is thus not just historical influence but direct algorithmic inheritance: CPAchecker's predicate abstraction + lazy abstraction mode is BLAST, re-engineered for industrial scale and pluggable within a richer framework.

Thomas Henzinger at IST Austria: EU Formal Methods Leadership

Thomas Henzinger's return to Europe to found IST Austria represents a significant investment in EU scientific capacity. Since 2009, ISTA has grown to 70+ research groups across biology, computer science, mathematics, physics, and neuroscience, with an annual budget exceeding โ‚ฌ200M and a graduate school that attracts students from around the world.

Henzinger's own group at ISTA continues to produce seminal results in:

ISTA is funded entirely by the Austrian Federal Government and the State of Lower Austria. All research is conducted under EU law (GDPR, EU AI Act, EU Research Framework). No US Cloud Act exposure. For formal verification workloads involving sensitive design data โ€” automotive (ISO 26262), aerospace (DO-178C), nuclear (IEC 61508) โ€” ISTA represents EU-sovereign academic research infrastructure.

Regulatory Compliance Context

StandardBLAST TechniqueApplicability
ISO 26262 ASIL DPredicate abstraction proves absence of safety-critical state violationsTable A.5: "formal methods" evidence for automotive safety functions
IEC 61508 SIL3/SIL4CEGAR refinement produces machine-checkable correctness witnessesIEC 61508-3 Annex B "formal verification" requirement
DO-178C / DO-333Abstract counterexample + concrete infeasibility proof = DO-333 evidenceFormal methods supplement qualification path
EU AI Act Art. 9Lazy abstraction verifies absence of reachable error states in C AI inference codeRisk management evidence for high-risk AI systems
CRA 2027CEGAR-based verification โ†’ CWE-476 null-deref, CWE-190 integer overflow proofsEU Cyber Resilience Act market access evidence

Getting Started with BLAST on sota.io

BLAST is an open-source research tool developed at UC Berkeley. Its primary value today is educational and as a reference implementation of the lazy abstraction algorithm โ€” the algorithm lives on in CPAchecker, which is the production-grade descendant.

Install BLAST (for research/educational use)

# BLAST requires 32-bit libraries on modern Linux
sudo apt-get install gcc-multilib

# Download BLAST from UC Berkeley
wget https://embedded.eecs.berkeley.edu/research/blast/blast-2.5.tar.gz
tar xzf blast-2.5.tar.gz && cd blast-2.5
make

# Verify
./pblast.opt --help

Basic usage

// driver.c โ€” API compliance check (SLAM-style, also works in BLAST)
#include <stdlib.h>

void lock();
void unlock();

int driver(int event) {
    if (event == 1) {
        lock();
        // ... critical section
        unlock();
    }
    // ERROR: if event != 1, lock is not called but unlock might be
    unlock();  // BLAST detects: unlock without matching lock
}
# Check for lock/unlock pairing violation
pblast.opt driver.c -main driver -nors
# BLAST output: counterexample trace reaching unlock() without prior lock()

Deploy predicate abstraction verification on sota.io

For production-scale predicate abstraction verification, use CPAchecker โ€” BLAST's direct descendant โ€” on sota.io:

# Dockerfile: CPAchecker (BLAST lineage) on sota.io EU infrastructure
FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
    openjdk-17-jdk wget \
    && rm -rf /var/lib/apt/lists/*

# CPAchecker โ€” BLAST's direct EU-based descendant (LMU Munich)
RUN wget -q https://cpachecker.sosy-lab.org/CPAchecker-latest.tar.bz2 \
    && tar xjf CPAchecker-latest.tar.bz2

WORKDIR /verify
COPY src/ .

# Run predicate abstraction (BLAST algorithm, modern implementation)
RUN CPAchecker-*/scripts/cpa.sh \
    -predicateAnalysis \
    -spec PropertyUnreachCall.prp \
    program.c

All verification workloads run on EU infrastructure โ€” GDPR-compliant, no US Cloud Act exposure at any layer of the stack.

EU Formal Verification Lineage: The BLAST Cluster

BLAST sits at the root of the EU predicate-abstraction family tree:

ToolOriginTechniqueBLAST Lineage
BLASTUC Berkeley โ†’ EU authorsLazy abstraction (ART)๐ŸŒฑ Origin
CPAcheckerLMU Munich ๐Ÿ‡ฉ๐Ÿ‡ช (Beyer)Configurable CPA (includes lazy abstraction)Direct descendant โ€” Beyer co-authored BLAST tool paper
UltimateAutomizerFreiburg ๐Ÿ‡ฉ๐Ÿ‡ช (Heizmann/Podelski)Trace abstraction + Craig interpolationSame era; Craig interpolation from BLAST/SLAM tradition
CBMCOxford ๐Ÿ‡ฌ๐Ÿ‡ง (Kroening ๐Ÿ‡ฉ๐Ÿ‡ช)SAT-BMCParallel development; SLAM/BLAST inspired CPROVER
ESBMCManchester ๐Ÿ‡ฌ๐Ÿ‡ง (Cordeiro ๐Ÿ‡ต๐Ÿ‡น)SMT-BMC + k-inductionCPROVER-based; same predicate abstraction era

The EU formal methods community is the direct custodian of the BLAST intellectual legacy. Thomas Henzinger at IST Austria ๐Ÿ‡ฆ๐Ÿ‡น, Rupak Majumdar at MPI-SWS ๐Ÿ‡ฉ๐Ÿ‡ช, Grรฉgoire Sutre at Bordeaux ๐Ÿ‡ซ๐Ÿ‡ท, and Dirk Beyer at LMU Munich ๐Ÿ‡ฉ๐Ÿ‡ช collectively represent the BLAST authors' continued presence in European academic institutions.

See Also


Deploy verification workloads to EU infrastructure in minutes. sota.io โ€” EU-native PaaS. GDPR-compliant. Free tier. No credit card.