We present a method for verifying properties of imperative pro-grams by using techniques based on the specialization of constraintlogic programs (CLP). We consider a class of C programs withinteger variables and we focus our attention on safety properties,stating that no error configuration can be reached from the initialconfigurations. We encode the interpreter of the language as a CLPprogramI, and we also encode the safety property to be verified asthe negation of a predicateunsafedefined inI. Then, we specializethe CLP programIwith respect to the given C program and thegiven initial and error configurations, with the objective of derivinga new CLP programIspwhich either contains the factunsafe(andin this case the C program is proved unsafe) or contains no clauseswith headunsafe(and in this case the C program is proved safe).IfIspdoes not enjoy this property we iterate the specialization pro-cess with the objective of deriving a CLP program where we canprove unsafety or safety. During the various specializations we mayapply different strategies for propagating information (either prop-agating forward from an initial configuration, or propagating back-ward from an error configuration) and different operators (such aswidening and convex hull operators) for generalizing predicate def-initions. Due to the undecidability of program safety, the iteratedspecialization process may not terminate. By an experimental eval-uation carried out on a set of examples taken from the literature, weshow that our method is competitive with respect to state-of-the-artsoftware model checkers.

Verifying Programs via Iterated Specialization

De Angelis E;Fioravanti F;Pettorossi A;Proietti M
2013

Abstract

We present a method for verifying properties of imperative pro-grams by using techniques based on the specialization of constraintlogic programs (CLP). We consider a class of C programs withinteger variables and we focus our attention on safety properties,stating that no error configuration can be reached from the initialconfigurations. We encode the interpreter of the language as a CLPprogramI, and we also encode the safety property to be verified asthe negation of a predicateunsafedefined inI. Then, we specializethe CLP programIwith respect to the given C program and thegiven initial and error configurations, with the objective of derivinga new CLP programIspwhich either contains the factunsafe(andin this case the C program is proved unsafe) or contains no clauseswith headunsafe(and in this case the C program is proved safe).IfIspdoes not enjoy this property we iterate the specialization pro-cess with the objective of deriving a CLP program where we canprove unsafety or safety. During the various specializations we mayapply different strategies for propagating information (either prop-agating forward from an initial configuration, or propagating back-ward from an error configuration) and different operators (such aswidening and convex hull operators) for generalizing predicate def-initions. Due to the undecidability of program safety, the iteratedspecialization process may not terminate. By an experimental eval-uation carried out on a set of examples taken from the literature, weshow that our method is competitive with respect to state-of-the-artsoftware model checkers.
2013
Istituto di Analisi dei Sistemi ed Informatica ''Antonio Ruberti'' - IASI
978-1-4503-1842-6
Program Verification
File in questo prodotto:
Non ci sono file associati a questo prodotto.

I documenti in IRIS sono protetti da copyright e tutti i diritti sono riservati, salvo diversa indicazione.

Utilizza questo identificativo per citare o creare un link a questo documento: https://hdl.handle.net/20.500.14243/220549
Citazioni
  • ???jsp.display-item.citation.pmc??? ND
  • Scopus ND
  • ???jsp.display-item.citation.isi??? ND
social impact