Seal — Symbolic Automata for Stateful Systems

Seal is a symbolic automata lifter for stateful software systems, published at CAV 2026. It builds finite-state-machine models from LLVM bitcode by combining loop summary analysis, symbolic execution, and lightweight abstract interpretation.

Location: third-party/seal/ (vendored, opt-in)

Build toggle: -DLOTUS_ENABLE_SEAL=ON

Publication: Sound and Precise Symbolic Automata Model for Stateful Software Systems. Xinlong Wu, Ruiyu Zhou, Peisen Yao, and Qingkai Shi. CAV 2026.

Overview

Seal lifts LLVM IR into a symbolic automaton representation that captures a program’s stateful behavior. The lifted model can be used for verification, property checking, and behavioral analysis of stateful systems (device drivers, protocol implementations, etc.).

The pipeline is:

  1. Loop summary analysis — Identifies loop structure and summarizes iteration-space behavior.

  2. Symbolic execution — Explores paths through the program to discover state transitions.

  3. Slice graph construction — Builds a compact symbolic representation of control-flow slices.

  4. Finite-state-machine lifting — Produces a symbolic automaton model with guard conditions on transitions.

Directory Structure

third-party/seal/
├── include/
│   ├── Core/           # Execution engine, state machine, slicing
│   ├── Memory/         # Abstract memory model (heap, stack, globals)
│   ├── Support/        # Z3 integration, ADTs, instruction visitors
│   └── Transform/      # LLVM-to-IR lowering passes
├── lib/
│   ├── Core/           # Executor, loop analysis, state management
│   ├── Memory/         # Memory block implementations
│   ├── Support/        # Z3 helpers, DL, timing
│   └── Transform/      # LLVM IR canonicalization passes
└── tools/
    └── seal/           # Main seal binary + FSM lifting pass

Build

cmake -S . -B build -DLOTUS_ENABLE_SEAL=ON
cmake --build build -j$(nproc)

Usage

./build/bin/seal input.bc [options]

The tool writes the lifted symbolic automaton as DOT graphs for visualization.