2LS for Program Analysis
Daniel Kroening, Viktor Mal\'ik, Peter Schrammel, Tom\'a\v{s}, Vojnar

TL;DR
2LS is a verification tool for C programs that uses second-order logic formulas and incremental SAT solving to efficiently verify assertions, memory safety, and termination properties, with a flexible framework for invariant synthesis.
Contribution
It introduces a modular approach combining unfolding and template-based invariant synthesis within a fast incremental bounded model checking framework.
Findings
Fast incremental bounded model checking algorithm
Flexible framework for invariant inference experiments
Effective verification of assertions and safety properties
Abstract
2LS ("tools") is a verification tool for C programs, built upon the CPROVER framework. It allows one to verify user-specified assertions, memory safety properties (e.g. buffer overflows), numerical overflows, division by zero, memory leaks, and termination properties. The analysis is performed by translating the verification task into a second-order logic formula over bitvector, array, and floating-point arithmetic theories. The formula is solved by a modular combination of algorithms involving unfolding and template-based invariant synthesis with the help of incremental SAT solving. Advantages of 2LS include its very fast incremental bounded model checking algorithm and its flexible framework for experimenting with novel analysis and abstraction ideas for invariant inference. Drawbacks are its lack of support for certain program features (e.g. multi-threading).
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Code & Models
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsFormal Methods in Verification · Radiation Effects in Electronics · Security and Verification in Computing
