2LS: Arrays and Loop Unwinding
Viktor Malík, František Nečas, Peter Schrammel, Tomáš Vojnar
Abstract
Abstract 2LS is a C program analyser built upon the CPROVER infrastructure that can verify and refute program assertions, memory safety, and termination. Until now, one of the main drawbacks of 2LS was its inability to verify most programs with arrays. This paper introduces a new abstract domain in 2LS for reasoning about the contents of arrays. In addition, we introduce an improved approach to loop unwinding, a crucial component of the 2LS’ verification algorithm, which particularly enables finding proofs and counterexamples for programs working with dynamic memory.
Topics & Concepts
Computer scienceAnalyserMathematical proofCounterexampleLoop (graph theory)Domain (mathematical analysis)Programming languageMemory safetyComponent (thermodynamics)Theoretical computer scienceAlgorithmSoftwareMathematicsDiscrete mathematicsChemistryChromatographyCombinatoricsThermodynamicsMathematical analysisPhysicsGeometryFormal Methods in VerificationSecurity and Verification in ComputingSoftware Testing and Debugging Techniques