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.