In this paper we introduce “clipping,” a new method of syntactic approximation which is motivated by and works in conjunction with a sound and decidable denotational model for a given programming language. Like slicing, clipping reduces the size of the source code in preparation for automatic verification; but unlike slicing it is an imprecise but computationally inexpensive algorithm which does not require a whole-program analysis. The technique of clipping can be framed into an iterated refinement cycle to arbitrarily improve its precision. We first present this rather simple idea intuitively with some examples, then work out the technical details in the case of an Algol-like programming language and a decidable approximation of its gamesemantic model inspired by Hankin and Malacaria’s “lax functor” approach. We conclude by presenting an experimental model checking tool based on these ideas and some toy programs.
Dan R. Ghica, Adam Bakewell