Combining Type Checking and Set Constraint Solving to Improve Automated Software Verification
Maximiliano Cristiá, Gianfranco Rossi
TL;DR
We address the automation gap in automated software verification by combining prescriptive type checking with set constraint solving in the CLP language {log}. The approach defines a Hindley-Milner–style type system for {log}, implements a typechecker, and integrates it with the existing {log} solver so programs can be typed, executed, and proven automatically. The authors prove type safety in this typed CLP setting and demonstrate practicality with two industrial-strength case studies (Landing Gear System and Android permission model) where many verification conditions are discharged automatically. The results indicate that the hybrid approach yields substantial automation and reduces manual proof effort, suggesting a viable path for typed, set-based verification systems.
Abstract
In this paper we show how prescritive type checking and constraint solving can be combined to increase automation during software verification. We do so by defining a type system and implementing a typechecker for {log} (read `setlog'), a Constraint Logic Programming (CLP) language and satisfiability solver based on set theory. Hence, we proceed as follows: a) a type system for {log} is defined; b) the constraint solver is proved to be safe w.r.t. the type system; c) the implementation of a concrete typechecker is presented; d) the integration of type checking and set constraint solving to increase automation during software verification is discussed; and f) two industrial-strength case studies are presented where this combination is used with very good results. Under consideration in Theory and Practice of Logic Programming (TPLP)
