Sequentialization is a technique for the analysis of concurrent
programs that exploits verification techniques or tools that were
originally designed for sequential programs. Sequentialization can
be implemented as a code-to-code translation from the concurrent
program into a corresponding non-deterministic sequential program
that simulates all executions of the original program. The
sequential program contains both the mapping of the threads in the
form of functions, and an encoding of the scheduler, where the
non-determinism allows to handle different concurrent schedules
collectively.
This approach has three main advantages:
- a code-to-code translation is typically much easier to
implement than a full-fledged analysis tool;
- it allows designers to focus only on the concurrency aspects
of programs, delegating all sequential reasoning to an existing
target analysis tool;
- sequentializations can be designed to target multiple backends
for sequential program analysis.
CSeq is a framework that facilitates the development of code-to-code
translations for concurrent C programs with POSIX threads
based on sequentialization.
The following are verification tools that have been developed under
the CSeq framework:
VeriSmart
VeriSmart is a novel parallel bug-finding framework for concurrent C programs.
Lazy-CSeq
Lazy-CSeq is a code-to-code transformation tool that translates
a multi-threaded C program into a nondeterministic sequential C
program that preserves reachability for all round-robin
schedules with a given bound on the number of rounds. It re-uses
existing high-performance BMC tools as backends for the
sequential verification problem. The translation is carefully
designed to introduce very small memory overheads and very few
sources of nondeterminism, so that it produces tight SAT/SMT
formulae, and is thus very effective in practice. The tool has a
script that bundles the translation and the verification.
- Publications:
- Downloads:
- Awards:
- Supported backends:
MU-CSeq
MU-CSeq is a code-to-code translation tool for the verification
of multi-threaded C programs with POSIX threads. It is based on
sequentializing the programs according to a guessed sequence of
write operations in the shared memory (memory unwinding, MU).
The original algorithm (implemented in MU-CSeq 0.1) stores the
values of all shared variables for each write (read-explicit
fine-grained MU), which requires multiple copies of the shared
variables. Our new algorithms (in MU-CSeq 0.3) store only the
writes (read-implicit MU) or only a subset of the writes
(coarse-grained MU), which reduces the memory footprint of the
unwinding and so allows larger unwinding bounds.
- Publications:
- Downloads:
- Awards:
- Supported backends:
UL-CSeq
UL-CSeq is a code-to-code translation tool for the verification
of multi-threaded C programs with dynamic thread creation. This
tool implements a variation of the lazy sequentialization
algorithm implemented in Lazy-CSeq. The main novelty is that
UL-CSeq supports an unbounded number of context switches and
allow unbounded loops, while the number of allowed threads still
remains bounded.
- Publications:
- Downloads:
- Supported backends:
- SV-COMP results:
Lal-Reps CSeq
Lal-Reps CSeq is a code-to-code translation tool which
implements a novel sequentialization for C programs using POSIX
threads, which extends the Lal/Reps sequentialization to support
dynamic thread creation.
- Publications:
- Downloads:
- Awards:
- SV-COMP results:
Publications
- Lazy Sequentialization for TSO and PSO via Shared Memory
Abstractions
E. Tomasco,
T. L. Nguyen,
O. Inverso,
B. Fischer, S. La Torre, and
G. Parlato.
Formal Methods in Computer-Aided Design (FMCAD)
Mountain View, CA, USA, 2016.
(PDF)
- Lazy Sequentialization for the Safety Verification of
Unbounded Concurrent Programs
T. L. Nguyen,
B. Fischer, S. La Torre, and
G. Parlato.
14th International Symposium on Automated Technology for
Verification and Analysis (ATVA)
Chiba, Japan, 2016.
(PDF)
- MU-CSeq 0.4: IndividualMemory Location Unwindings
(Competition Contribution)
E. Tomasco,
T. L. Nguyen,
O. Inverso,
B. Fischer, S. La Torre, and
G. Parlato.
5th Intl. Competition on Software Verification (SV-COMP), held at
TACAS,
Eindhoven, The Netherlands, 2016.
(PDF)
- Lazy-CSeq 1.0 (Competition Contribution)
O. Inverso,
T. L. Nguyen,
E. Tomasco,
B. Fischer, S. La Torre, and
G. Parlato.
5th Intl. Competition on Software Verification (SV-COMP), held at
TACAS,
Eindhoven, The Netherlands, 2016.
(PDF)
- Unbounded Lazy-CSeq: A Lazy Sequentialization Tool for C
with unboundedly many Context Switches (Competition
Contribution)
T. L. Nguyen,
O. Inverso,
E. Tomasco,
B. Fischer, S. La Torre, and
G. Parlato.
5th Intl. Competition on Software Verification (SV-COMP), held at
TACAS,
Eindhoven, The Netherlands, 2016.
(PDF)
- Bounded Model Checking of Multi-threaded Programs via
Sequentialization
O. Inverso.
PhD Thesis, University of Southampton, 2015.
(PDF)
- Lazy-CSeq: A Context-Bounded Model Checking Tool for
Multi-Threaded C-Programs (Tool Demonstration)
O. Inverso,
T. L. Nguyen,
B. Fischer, S. La Torre, and
G. Parlato.
30th IEEE/ACM International Conference on Automated Software
Engineering (ASE),
Lincoln, Nebraska, USA, 2015.
(PDF)
- Verifying Concurrent Programs by Memory Unwinding
E. Tomasco,
O. Inverso,
B. Fischer, S. La Torre, and
G. Parlato.
21st Int'l Conference on Tools and Algorithms for the
Construction and Analysis of Systems (TACAS),
London, UK, 2015.
(PDF)
- Lazy-CSeq 0.6c: An Improved Lazy Sequentialization Tool for
C (Competition Contribution)
O. Inverso,
E. Tomasco,
B. Fischer, S. La Torre, and
G. Parlato.
4th Intl. Competition on Software Verification (SV-COMP), held at
TACAS,
London, UK, 2015.
(PDF)
- MU-CSeq 0.3: Sequentialization by Read-implicit and
Coarse-grained Memory Unwindings (Competition Contribution)
E.
Tomasco, O. Inverso,
B. Fischer, S. La Torre, and
G. Parlato.
4th Intl. Competition on Software Verification (SV-COMP), held at
TACAS,
London, UK, 2015.
(PDF)
- Unbounded Lazy-CSeq: A Lazy Sequentialization Tool for C
Programs with Unbounded Context Switches (Competition
Contribution)
T. L. Nguyen,
B. Fischer, S. La Torre, and
G. Parlato
4th Intl. Competition on Software Verification (SV-COMP), held at
TACAS,
London, UK, 2015.
(PDF)
-
Bounded Model Checking of Multi-Threaded C Programs via Lazy
Sequentialization
O. Inverso,
E. Tomasco,
B. Fischer, S. La Torre, and
G. Parlato.
26th Int'l Conference on Computer Aided Verification (CAV),
Vienna, Austria, 2014.
(PDF)
- Lazy-CSeq: A Lazy Sequentialization Tool for C (Competition
Contribution)
O. Inverso,
E. Tomasco,
B. Fischer, S. La Torre, and
G. Parlato.
3rd Intl. Competition on Software Verification (SV-COMP), held at
TACAS,
Grenoble, France, 2014
(PDF)
- MU-CSeq: Sequentialization of C Programs by Shared Memory
Unwindings (Competition Contribution)
E. Tomasco,
O. Inverso,
B. Fischer, S. La Torre, and
G. Parlato.
3rd Intl. Competition on Software Verification (SV-COMP), held at
TACAS,
Grenoble, France, 2014
(PDF)
- CSeq: A Concurrency Pre-processor for Sequential C
Verification Tools (Tool Demonstration)
B. Fischer, O. Inverso,
and G. Parlato.
28th IEEE/ACM International Conference on Automated Software
Engineering (ASE),
Palo Alto, CA, USA, 2013
(PDF)
- CSeq: A Sequentialization Tool for C (Competition
Contribution)
B. Fischer, O. Inverso,
and G. Parlato.
2nd Intl. Competition on Software Verification (SV-COMP), held at
TACAS,
Rome, Italy, 2013
(PDF)
People
CSeq is developed by :
Funding
This project is partially supported by EPSRC.