Runtime verification
LoomRV
Multi-Property Temporal Logic Monitoring
A C++ monitoring framework for past-time LTL and MTL in discrete and dense time, combining a shared computation graph with a data-oriented execution engine.
- Year
- 2026
- Role
- First author · Research and implementation
- Built with
- C++20 · Temporal logic · CMake · Docker
Monitoring many properties, efficiently
A system may need to check dozens of requirements against the same execution trace: whether an event occurred within a timing window, or whether a condition has held throughout a period. Independent monitors repeat input processing and evaluation of common subformulas. Their execution and memory layout also matter, even when there is no work to share.
LoomRV addresses both costs. It extends compositional sequential-network monitoring to multiple past-time LTL and MTL properties, in both discrete and dense time. The framework combines a shared computation graph with a data-oriented C++ runtime.
Compile shared work once
The frontend builds one directed acyclic graph across the registered properties. A content-addressable node database checks structural signatures and reuses identical subformulas, so each shared result is computed once per update.
Make execution and state contiguous
Sharing is only half of the design. The compiler packs the graph into an immutable array of fixed-size node records in topological order. Integer child indices replace pointers between heap-allocated objects, and operands precede their users. The engine evaluates the schedule in one forward pass, without recursion.
Metric temporal operators maintain variable-size sets of time intervals. Instead of giving every node its own growing container, LoomRV stores this interval state in a preallocated, double-buffered arena:
- Read a node’s previous state and the current results of its already-evaluated children.
- Append its updated interval state to the current buffer at a write cursor.
- At the timestep boundary, swap the buffers and reset the cursor.
Buffer capacity is computed from the compiled formulas’ temporal bounds and allocated once at monitor creation. Metric interval state needs no dynamic allocation during evaluation. The layout favors spatial locality and separates previous state from the current update.
My contribution
I am the first author of Multi-Property Temporal Logic Monitoring, published in the FMCAD 2026 proceedings by TU Wien Academic Press, with Doğan Ulus. I developed LoomRV, building on my senior project, DO-VERIFY. The work integrates shared monitor construction, the C++ execution engine, and arena-based temporal state with a reproducible experimental artifact. The repository includes the Docker environment, trace generation, experiment scripts, and result tables.
Measure runtime efficiency and shared execution
The paper first evaluates each of 30 Timescales properties independently. None contains repeated subexpressions, so these comparisons demonstrate runtime improvements without subformula deduplication. It then evaluates all 30 properties together, comparing independent LoomRV monitors with the full shared monitor.
The results below distinguish these experiments. The multi-property timings include input processing and evaluation over one million steps; the full gain combines the execution engine, one-pass trace processing, and structural sharing. Controlled high- and low-sharing formula sets further explore sensitivity to structural overlap. Representative real-world property collections remain an important next step for measuring how much sharing occurs naturally.
From the paper
Faster execution, then shared work.
The evaluation measures the runtime on individual properties, then the complete framework on a shared trace. Each comparison uses the same feeder and time model for both tools.
Single-property throughput
Median speedup over Reelay across 30 individual Timescales properties in discrete time, and 90 configurations in dense time (30 properties at three temporal densities). These formulas contain no repeated subexpressions.
- Discrete · JSON
- 2.00×
- Discrete · Binary
- 1.81×
- Dense · JSON
- 3.45×
- Dense · Binary
- 4.53×
Single-property results: Section IV-B and Tables IV–VI.
Thirty properties on one trace
LoomRV Sequential already achieves 2.1–3.8× speedups with the new schedule and arena, without cross-property sharing. LoomRV Multi reaches 6.4–11.7× by combining that runtime with shared evaluation and a single pass through the trace. These are end-to-end comparisons with Reelay-Sequential.
| Workload | Reelay Sequential | LoomRV Sequential | LoomRV Multi |
|---|---|---|---|
| Discrete · JSON | 9.34 | 4.422.1× | 0.8011.7× |
| Discrete · Binary | 4.66 | 1.583.0× | 0.716.6× |
| Dense · JSON | 27.49 | 9.632.9× | 3.777.3× |
| Dense · Binary | 22.28 | 5.803.8× | 3.456.4× |
Source: Multi-Property Temporal Logic Monitoring, FMCAD 2026 ↗. Speedups are the reported values, calculated before rounding the displayed timings.