Interpretation-Based Violation Witness Validation for C: NITWIT

As software verification is gaining traction in academia and industry the number and complexity of verification tools is growing constantly. This initiated research and interest into exchangeable verification witnesses as well as tools for automated witness validation. Initial witness validators used model checkers that were amended to benefit from guidance information provided by the witness. This approach comes with substantial overhead. Second-generation execution-based validators traded speed for reduced strength in case of incomplete and non-exact witnesses. This was done by extracting test harnesses and compiling them with the original program. We present the nitwit tool, a new interpretation-based violation witness validator for C programs that is trimmed to be fast and memory efficient. It verifies a record number of witnesses of SV-COMP’20 in the ReachSafety category. Our novel tool exchanges initial compilation overhead and optimized execution for rapid startup performance. nitwit borrows C semantics from the compiler used for compilation. This offloads this hard-to-get-right task and enables using several compilers in parallel to inspect possible semantic differences.

[1]  Allen I. Holub Compiler design in C , 1990 .

[2]  Jochen Hoenicke,et al.  Software Model Checking for People Who Love Automata , 2013, CAV.

[3]  Ronald Mak Writing Compilers and Interpreters: A Software Engineering Approach , 2009 .

[4]  Dirk Beyer,et al.  Tests from Witnesses - Execution-Based Validation of Verification Results , 2018, TAP@STAF.

[5]  Flemming Nielson,et al.  Principles of Program Analysis , 1999, Springer Berlin Heidelberg.

[6]  Dirk Beyer,et al.  Competition on Software Verification - (SV-COMP) , 2012, TACAS.

[7]  Dirk Beyer,et al.  Reliable and Reproducible Competition Results with BenchExec and Witnesses (Report on SV-COMP 2016) , 2016, TACAS.

[8]  Dirk Beyer,et al.  Verification-Aided Debugging: An Interactive Web-Service for Exploring Error Witnesses , 2016, CAV.

[9]  Thomas A. Henzinger,et al.  Configurable Software Verification: Concretizing the Convergence of Model Checking and Program Analysis , 2007, CAV.

[10]  Dirk Beyer Software Verification and Verifiable Witnesses - (Report on SV-COMP 2015) , 2015, TACAS.

[11]  Andreas Podelski,et al.  Ultimate Automizer with Array Interpolation - (Competition Contribution) , 2015, TACAS.

[12]  Dirk Beyer,et al.  Automatic Verification of C and Java Programs: SV-COMP 2019 , 2019, TACAS.

[13]  Dirk Beyer,et al.  Predicate abstraction with adjustable-block encoding , 2010, Formal Methods in Computer Aided Design.

[14]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[15]  Dirk Beyer,et al.  Witness validation and stepwise testification across software verifiers , 2015, Software Engineering.

[16]  Dirk Beyer,et al.  Explicit-State Software Model Checking Based on CEGAR and Interpolation , 2013, FASE.

[17]  Edmund M. Clarke,et al.  The Birth of Model Checking , 2008, 25 Years of Model Checking.

[18]  Jochen Hoenicke,et al.  Ultimate Automizer with SMTInterpol - (Competition Contribution) , 2013, TACAS.

[19]  Dirk Beyer,et al.  Software Verification with Validation of Results - (Report on SV-COMP 2017) , 2017, TACAS.