Automating Verification of Loops by Parallelization

  • Tobias Gedell
  • Reiner Hähnle
Part of the Lecture Notes in Computer Science book series (LNCS, volume 4246)


Loops are a major bottleneck in formal software verification, because they generally require user interaction: typically, induction hypotheses or invariants must be found or modified by hand. This involves expert knowledge of the underlying calculus and proof engine. We show that one can replace interactive proof techniques, such as induction, with automated first-order reasoning in order to deal with parallelizable loops, where a loop can be parallelized whenever it avoids dependence of the loop iterations from each other. We develop a dependence analysis that ensures parallelizability. It guarantees soundness of a proof rule that transforms a loop into a universally quantified update of the state change information represented by the loop body. This makes it possible to use automatic first order reasoning techniques to deal with loops. The method has been implemented in the KeY verification tool. We evaluated it with representative case studies from the Java Card domain.


Dependence Analysis Loop Variable Loop Iteration Dynamic Logic Symbolic Execution 
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.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Ahrendt, W., Baar, T., Beckert, B., Bubel, R., Giese, M., Hähnle, R., Menzel, W., Mostowski, W., Roth, A., Schlager, S., Schmitt, P.H.: The KeY tool: integrating object oriented design and formal verification. Software and System Modeling 4(1), 32–54 (2005)CrossRefGoogle Scholar
  2. 2.
    Banerjee, U., Chen, S.-C., Kuck, D.J., Towle, R.A.: Time and parallel processor bounds for Fortran-like loops. IEEE Trans. Computers 28(9), 660–670 (1979)MATHCrossRefMathSciNetGoogle Scholar
  3. 3.
    Beckert, B.: A Dynamic Logic for the Formal Verification of Java Card Programs. In: Attali, I., Jensen, T. (eds.) JavaCard 2000. LNCS, vol. 2041, pp. 6–24. Springer, Heidelberg (2001)CrossRefGoogle Scholar
  4. 4.
    Beckert, B., Schlager, S.: Software verification with integrated data type refinement for integer arithmetic. In: Boiten, E.A., Derrick, J., Smith, G.P. (eds.) IFM 2004. LNCS, vol. 2999, pp. 207–226. Springer, Heidelberg (2004)CrossRefGoogle Scholar
  5. 5.
    Beckert, B., Schlager, S., Schmitt, P.H.: An improved rule for while loops in deductive program verification. In: Lau, K.-K., Banach, R. (eds.) ICFEM 2005. LNCS, vol. 3785, pp. 315–329. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  6. 6.
    Boyer, R.S., Moore, J.S.: A Computational Logic Handbook. Academic Press, London (1988)MATHGoogle Scholar
  7. 7.
    Breunesse, C.-B.: On JML: Topics in Tool-assisted Verification of Java Programs. PhD thesis, Radboud University of Nijmegen (2006)Google Scholar
  8. 8.
    Bundy, A., Basin, D., Hutter, D., Ireland, A.: Rippling: Meta-Level Guidance for Mathematical Reasoning. Cambridge Tracts in Theoretical Computer Science, vol. 56. Cambridge University Press, Cambridge (2005)Google Scholar
  9. 9.
    Cook, B., Podelski, A., Rybalchenko, A.: Termination proofs for systems code. In: Proc. ACM SIGPLAN Conf. on Programming Language Design and Implementation. ACM Press, New York (to appear, 2006)Google Scholar
  10. 10.
    Flanagan, C., Leino, K.R.M., Lillibridge, M., Nelson, G., Saxe, J.B., Stata, R.: Extended static checking for Java. In: Proc. ACM SIGPLAN 2002 Conf. on Programming Language Design and Implementation, Berlin, pp. 234–245. ACM Press, New York (2002)CrossRefGoogle Scholar
  11. 11.
    Hähnle, R., Mostowski, W.: Verification of safety properties in the presence of transactions. In: Barthe, G., Burdy, L., Huisman, M., Lanet, J.-L., Muntean, T. (eds.) CASSIS 2004. LNCS, vol. 3362, pp. 151–171. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  12. 12.
    Harel, D., Kozen, D., Tiuryn, J.: Dynamic Logic. MIT Press, Cambridge (2000)MATHGoogle Scholar
  13. 13.
    Holzmann, G.J.: Software analysis and model checking. In: Brinksma, E., Larsen, K.G. (eds.) Proc. Intl. Conf. on Computer-Aided Verification CAV, Copenhagen. Springer, Heidelberg (2002)Google Scholar
  14. 14.
    Mostowski, W.: Formalisation and Verification of Java Card Security Properties in Dynamic Logic. In: Cerioli, M. (ed.) FASE 2005. LNCS, vol. 3442, pp. 357–371. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  15. 15.
    Olsson, O., Wallenburg, A.: Customised induction rules for proving correctness of imperative programs. In: Beckert, B., Aichernig, B. (eds.) Proc., Software Engineering and Formal Methods (SEFM), Koblenz, Germany, pp. 180–189. IEEE Computer Society Press, Los Alamitos (2005)Google Scholar
  16. 16.
    Platzer, A.: Using a program verification calculus for constructing specifications from implementations. Master’s thesis, Univ. Karlsruhe, Dept. of Computer Science (2004)Google Scholar
  17. 17.
    Rümmer, P.: Sequential, parallel, and quantified updates of first-order structures. In: Proceedings, 13th International Conference on Logic for Programming, Artificial Intelligence and Reasoning. LNCS. Springer, Heidelberg (to appear, 2006)Google Scholar
  18. 18.
    Wolfe, M.J.: Optimizing Supercompilers for Supercomputers. MIT Press, Cambridge (1989)MATHGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2006

Authors and Affiliations

  • Tobias Gedell
    • 1
  • Reiner Hähnle
    • 1
  1. 1.Department of Computing ScienceChalmers University of TechnologyGöteborgSweden

Personalised recommendations