skip to main content
10.1145/3236454.3236479acmconferencesArticle/Chapter ViewAbstractPublication PagesisstaConference Proceedingsconference-collections
research-article

An exercise in verifying sequential programs with VerCors

Published:16 July 2018Publication History

ABSTRACT

Society nowadays relies heavily on software, which makes verifying the correctness of software crucially important. Various verification tools have been proposed for this purpose, each focusing on a limited set of tasks, as there are many different ways to build and reason about software. This paper discusses two case studies from the VerifyThis2018 verification competition, worked out using the VerCors verification toolset. These case studies are sequential, while VerCors specialises in reasoning about parallel and concurrent software. This paper elaborates on our experiences of using VerCors to verify sequential programs. The first case study involves specifying and verifying the behaviour of a gap buffer; a data-structure commonly used in text editors. The second case study involves verifying a combinatorial problem based on Project Euler problem #114. We find that VerCors is well capable of reasoning about sequential software, and that certain techniques to reason about concurrency can help to reason about sequential programs. However, the extra annotations required to reason about concurrency bring some specificational overhead.

References

  1. Wolfgang Ahrendt, Bernhard Beckert, Richard Bubel, Reiner Hähnle, Peter H. Schmitt, and Mattias Ulbrich. 2016. Deductive Software Verification - The KeY Book. Lecture Notes in Computer Science, Vol. 10001. Springer International Publishing.Google ScholarGoogle Scholar
  2. A. Amighi, S. Blom, and M. Huisman. 2014. Resource Protection Using Atomics - Patterns and Verification. In APLAS. 255--274.Google ScholarGoogle Scholar
  3. A. Amighi, S. Blom, and M. Huisman. 2016. VerCors: A Layered Approach to Practical Verification of Concurrent Software. In PDP. 495--503.Google ScholarGoogle Scholar
  4. A. Amighi, C. Haack, M. Huisman, and C. Hurlin. 2015. Permission-based separation logic for multithreaded Java programs. LMCS 11, 1 (2015).Google ScholarGoogle Scholar
  5. Afshin Amighi, Marieke Huisman, Stefan Blom, Saddek Bensalem, and Simon Bliudze. 2018. Verification of Shared-Reading Synchronisers. In 1st International Workshop on Methods and Tools for Rigorous System Design 2018.Google ScholarGoogle Scholar
  6. S. Blom, S. Darabi, M. Huisman, and W. Oortwijn. 2017. The VerCors Tool Set: Verification of Parallel and Concurrent Software. In iFM (LNCS), Vol. 10510. Springer, 102--110.Google ScholarGoogle Scholar
  7. Gidon Ernst, Jörg Pfähler, Gerhard Schellhorn, Dominik Haneberg, and Wolfgang Reif. 2015. KIV: overview and VerifyThis competition. STTT 17, 6 (01 Nov 2015), 677--694. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Jean-Christophe Filliâtre and Andrei Paskevich. 2013. Why3 --- Where Programs Meet Provers. In ESOP (LNCS), Matthias Felleisen and Philippa Gardner (Eds.), Vol. 7792. Springer, 125--128. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Marieke Huisman, Vladimir Klebanov, and Rosemary Monahan (Eds.). 2015. VerifyThis 2012 - A Program Verification Competition (STTT). Vol. 17. Issue 6. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. B. Jacobs, J. Smans, P. Philippaerts, F. Vogels, W. Penninckx, and F. Piessens. 2011. VeriFast: A powerful, sound, predictable, fast verifier for C and Java. In NFM. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. P. Müller, M. Schwerhoff, and A.J. Summers. 2016. Viper - A Verification Infrastructure for Permission-Based Reasoning. In VMCAI. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. W. Oortwijn, S. Blom, D. Gurov, M. Huisman, and M. Zaharieva-Stojanovski. 2017. An Abstraction Technique for Describing Concurrent Program Behaviour. In VSTTE (LNCS), Vol. 10712. 191--209.Google ScholarGoogle Scholar
  13. Julian Tschannen, Carlo A. Furia, Martin Nordio, and Nadia Polikar-pova. 2015. AutoProof: Auto-active Functional Verification of Object-oriented Programs. In TACAS (LNCS). Springer. Google ScholarGoogle ScholarDigital LibraryDigital Library
  1. An exercise in verifying sequential programs with VerCors

          Recommendations

          Comments

          Login options

          Check if you have access through your login credentials or your institution to get full access on this article.

          Sign in
          • Published in

            cover image ACM Conferences
            ISSTA '18: Companion Proceedings for the ISSTA/ECOOP 2018 Workshops
            July 2018
            143 pages
            ISBN:9781450359399
            DOI:10.1145/3236454

            Copyright © 2018 ACM

            Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than the author(s) must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected].

            Publisher

            Association for Computing Machinery

            New York, NY, United States

            Publication History

            • Published: 16 July 2018

            Permissions

            Request permissions about this article.

            Request Permissions

            Check for updates

            Qualifiers

            • research-article

            Acceptance Rates

            Overall Acceptance Rate58of213submissions,27%

            Upcoming Conference

            ISSTA '24

          PDF Format

          View or Download as a PDF file.

          PDF

          eReader

          View online with eReader.

          eReader