Model checking is an automatic approach for the verification of systems. Explicit states model checking applies a search algorithm (e.g., depth or breadth first search) to the state space of the verified system. In concurrent systems, and in particular in communication protocols, the number of states can grow exponentially with the number of independent components (processes). There are many different methods that attempt to automatically reduce the number of checked states. Such methods show encouraging results, but often still fail to reduce the number of states required for the verification to become manageable. We propose here the use of code annotation in order to control the verification process and reduce the number of states searched. Our extension of the C programming language allows the user to put into the code instructions that are executed by the model checker during the verification. With the new language construct, we may exploit additional insight that the verifier may have about the checked program in order to limit the search. We describe our implementation and present some experimental results.


Model Check Prime Number Auxiliary Variable History Variable Linear Temporal Logic 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. 1.
    Apt, K.R., Olderog, E.R.: Verification of Sequential and Concurrent Programs. Springer, Heidelberg (1991)CrossRefzbMATHGoogle Scholar
  2. 2.
    Ben Ari, M.: Principles of Concurrent and Distributed Programming. Prentice Hall, Englewood Cliffs (1990)zbMATHGoogle Scholar
  3. 3.
    Clarke, E.M., Grumberg, O., Peled, D.A.: Model Checking. MIT Press, Cambridge (2000)Google Scholar
  4. 4.
    Clarke, E.M., Emerson, E.A., Jha, S., Sistla, A.P.: Symmetry reductions in model checking. In: Y. Vardi, M. (ed.) CAV 1998. LNCS, vol. 1427, pp. 147–158. Springer, Heidelberg (1988)CrossRefGoogle Scholar
  5. 5.
    Dijkstra, E.W.: Guarded Commands, Nondeterminacy and Formal Derivation of Programs. Communications of the ACM 18, 453–457 (1975)MathSciNetCrossRefzbMATHGoogle Scholar
  6. 6.
    Eisner, C., Peled, D.: Comparing Symbolic and Explicit Model Checking of a Software Systems. In: Bošnački, D., Leue, S. (eds.) SPIN 2002. LNCS, vol. 2318, pp. 230–239. Springer, Heidelberg (2002)CrossRefGoogle Scholar
  7. 7.
    Evans, D., Guttag, J., Horning, J., Tan, Y.M.: LCLint: A tool for using specifications to check code. In: Proceedings of the SIGSOFT symposium on the foundations of software engineering, pp. 87–96 (1994) Google Scholar
  8. 8.
    Flanagan, C., Leino, K.R.M., Lillibridge, M., Nelson, G., Saxe, J.B., Stata, R.: Extended Static Checking for Java. In: PLDI 2002, pp. 234–245 (2002) Google Scholar
  9. 9.
    Francez, N.: Program Verification. Addison-Wesley, Reading (1992)zbMATHGoogle Scholar
  10. 10.
    Francez, N.: Fairness. Springer, Heidelberg (1986)CrossRefzbMATHGoogle Scholar
  11. 11.
    Holzmann, G.: The Spin Model Checker, Primer and Reference Manual. Addison-Wesley, Reading (2003) (to appear)Google Scholar
  12. 12.
    Holzmann, G.J., Peled, D.: An improvement inFormal Verification. In: FORTE 1994, pp. 197–211 (1994) Google Scholar
  13. 13.
    Katz, S., Peled, D.: Defining conditional independence using collapses. Theoretical Computer Science 101, 337–359 (1992)MathSciNetCrossRefzbMATHGoogle Scholar
  14. 14.
    Kurshan, R.: Computer-Aided Verification of Coordinating Processes. Princeton University Press, Princeton (1995)CrossRefzbMATHGoogle Scholar
  15. 15.
    Lazic, R., Nowak, D.: A unifying approach to data-independence. In: Palamidessi, C. (ed.) CONCUR 2000. LNCS, vol. 1877, pp. 581–595. Springer, Heidelberg (2002)CrossRefGoogle Scholar
  16. 16.
    Edelkamp, S., Leue, S., Lluch-Lafuente, A.: Directed explicit-state model checking in the validation of communication protocols. Software Tools for Technology Transfer (to appear) Google Scholar
  17. 17.
    Manna, Z., Pnueli, A.: How to cook a temporal proof system for your pet language. In: Principles of Programming Languages, Austin, Texas, pp. 167–176 (1983)Google Scholar
  18. 18.
    McMillan, K.: Symbolic Model Checking. Kluwer Academic Publishers, Dordrecht (1993)CrossRefzbMATHGoogle Scholar
  19. 19.
    Myers, G.J.: The Art of Software Testing. Wiley, Chichester (1979)zbMATHGoogle Scholar
  20. 20.
    Owicki, S., Gries, D.: Verifying properties of parallel programs: an axiomatic approach. CACM 19, 279–285 (1976)MathSciNetCrossRefzbMATHGoogle Scholar
  21. 21.
    Peled, D.A.: Software Reliability Methods. Springer, Heidelberg (2001)CrossRefzbMATHGoogle Scholar
  22. 22.
    Pnueli, A.: The temporal logic of programs. In: 18th IEEE symposium on Foundation of Computer Science, pp. 46–57 (1977)Google Scholar
  23. 23.
    Wolper, P.: Expressing interesting properties of programs in propositional temporal logic. In: Principles of Programming Languages, St. Petersburg Beach, Fl, pp. 184–193 (1986)Google Scholar
  24. 24.
    Vardi, M.Y., Wolper, P.: An automata-theoretic approach to automatic program verification. In: Proceedings of the 1st Annual Symposium on Logic in Computer Science IEEE, pp. 332–344 (1986)Google Scholar

Copyright information

© IFIP International Federation for Information Processing 2003

Authors and Affiliations

  • Doron Peled
    • 1
  • Hongyang Qu
    • 1
  1. 1.Department of Computer ScienceThe University of WarwickCoventryUK

Personalised recommendations