ILC: A Foundation for Automated Reasoning About Pointer Programs

  • Limin Jia
  • David Walker
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 3924)


This paper shows how to use Girard’s intuitionistic linear logic extended with a classical sublogic to reason about pointer programs. More specifically, first, the paper defines the proof theory for ILC (Intuitionistic Linear logic with Constraints) and shows it is well-defined via a proof of cut elimination. Second, inspired by prior work of O’Hearn, Reynolds, and Yang, the paper explains how to interpret linear logical formulas as descriptions of a program store. Third, this paper defines a simple imperative programming language with mutable references and arrays and gives verification condition generation rules that produce assertions in ILC. Finally, we identify a fragment of ILC, ILC− −, that is both decidable and closed under generation of verification conditions. Since verification condition generation is syntax-directed, we obtain a decidable procedure for checking properties of pointer programs.


Automate Reasoning Linear Logic Proof Theory Sequent Calculus Pointer Program 


  1. 1.
    Yang, Z.: Putting program analysis to work at Microsoft, Princeton Computer Science Department Colloquium (2005) Google Scholar
  2. 2.
    Detlefs, D.L.: An overview of the extended static checking system. In: The First Workshop on Formal Methods in Software Practice (1996)Google Scholar
  3. 3.
    Flanagan, C., Leino, R., Lillibridge, M., Nelson, G., Saxes, J., Stata, R.: Extended static checking for java. In: ACM Conference on Programming Language Design and Implementation (2002)Google Scholar
  4. 4.
    Barnett, M., Leino, K.R.M., Schulte, W.: The spec# programming system: An overview. In: Barthe, G., Burdy, L., Huisman, M., Lanet, J.-L., Muntean, T. (eds.) CASSIS 2004. LNCS, vol. 3362, pp. 49–69. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  5. 5.
    Necula, G.: Proof-carrying code. In: Twenty-Fourth ACM Symposium on Principles of Programming Languages, Paris, pp. 106–119 (1997)Google Scholar
  6. 6.
    Ishtiaq, S., O’Hearn, P.: BI as an assertion language for mutable data structures. In: 28th ACM Symposium on Principles of Programming Languages (2001)Google Scholar
  7. 7.
    O’Hearn, P., Reynolds, J., Yang, H.: Local reasoning about programs that alter data structures. In: Fribourg, L. (ed.) CSL 2001 and EACSL 2001. LNCS, vol. 2142, p. 1. Springer, Heidelberg (2001)CrossRefGoogle Scholar
  8. 8.
    Hodas, J., Miller, D.: Logic programming in a fragment of intuitionistic linear logic. Information and Computation 110 (1994)Google Scholar
  9. 9.
    Lopez, P., Pfenning, F., Polakow, J., Watkins, K.: Monadic concurrent linear logic programming. In: PPDP (2005)Google Scholar
  10. 10.
    Chaudhuri, K., Pfenning, F.: A focusing inverse method prover for first-order linear logic. In: Nieuwenhuis, R. (ed.) CADE 2005. LNCS (LNAI), vol. 3632, pp. 69–83. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  11. 11.
    Miller, D.: A multiple-conclusion meta-logic. In: Ninth Annual Symposium on Logic in Computer Science, pp. 272–281. IEEE Computer Society Press, Los Alamitos (1994)CrossRefGoogle Scholar
  12. 12.
    Cervesato, I., Pfenning, F.: A linear logical framework. In: Information and Computation (2000)Google Scholar
  13. 13.
    Watkins, K., Cervesato, I., Pfenning, F., Walker, D.: A concurrent logical framework: The propositional fragment. In: Types for Proofs and Programs (2004)Google Scholar
  14. 14.
    Ahmed, A., Jia, L., Walker, D.: Reasoning about hierarchical storage. In: IEEE Symposium on Logic in Computer Science (2003)Google Scholar
  15. 15.
    Jia, L., Spalding, F., Walker, D., Glew, N.: Certifying compilation for a language with stack allocation. In: IEEE Symposium on Logic in Computer Science (2005)Google Scholar
  16. 16.
    Smith, F., Walker, D., Morrisett, G.: Alias types. In: European Symposium on Programming, Berlin, pp. 366–381 (2000)Google Scholar
  17. 17.
    Morrisett, G., Ahmed, A., Fluet, M.: L3: A linear language with locations. In: 7th International Conference on Typed Lambda Calculi and Applications (2005)Google Scholar
  18. 18.
    Hickey, Nogin, Constable, Aydemir, Barzilay, Bryukhov, Eaton, Granicz, Kopylov, Kreitz, Krupski, Lorigo, Schmitt, Witty, Yu: MetaPRL – A modular logical environment. In: IWHOLTP. LNCS (2003)Google Scholar
  19. 19.
    Barrett, C.W., Berezin, S.: CVC Lite: A new implementation of the cooperating validity checker. In: Alur, R., Peled, D.A. (eds.) CAV 2004. LNCS, vol. 3114, pp. 515–518. Springer, Heidelberg (2004)CrossRefGoogle Scholar
  20. 20.
    Jia, L., Walker, D.: ILC: A foundation for automated reasoning about pointer programs. Technical Report TR-738-05, Princeton University (2005)Google Scholar
  21. 21.
    Gentzen, G.: The Collected Papers of Gerhard Gentzen. North Holland, Amsterdam (1969) (Edited by M. E. Szabo)Google Scholar
  22. 22.
    Reynolds, J.C.: Separation logic: A logic for shared mutable data structures. In: LICS (2002)Google Scholar
  23. 23.
    Lincoln, P., Mitchell, J., Scedrov, A., Shankar, N.: Decision problems for propositional linear logic. Annals of Pure and Applied Logic 56, 239–311 (1992)MathSciNetCrossRefMATHGoogle Scholar
  24. 24.
    Berdine, J., Calcagno, C., O’Hearn, P.W.: A decidable fragment of separation logic. In: Lodaya, K., Mahajan, M. (eds.) FSTTCS 2004. LNCS, vol. 3328, pp. 97–109. Springer, Heidelberg (2004)CrossRefGoogle Scholar
  25. 25.
    Berdine, J., Calcagno, C., O’Hearn, P.W.: Symbolic execution with separation logic. In: Yi, K. (ed.) APLAS 2005. LNCS, vol. 3780, pp. 52–68. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  26. 26.
    Deline, R., Fähndrich, M.: Enforcing high-level protocols in low-level software. In: ACM Conference on Programming Language Design and Implementation (2001)Google Scholar
  27. 27.
    Foster, J., Terauchi, T., Aiken, A.: Flow-sensitive type qualifiers. In: ACM Conference on Programming Language Design and Implementation (2002)Google Scholar
  28. 28.
    Mandelbaum, Y., Walker, D., Harper, R.: An effective theory of type refinements. In: International conference on functional programming (2003)Google Scholar
  29. 29.
    Zhu, D., Xi, H.: Safe Programming with Pointers through Stateful Views. In: Hermenegildo, M.V., Cabeza, D. (eds.) PADL 2004. LNCS, vol. 3350, pp. 83–97. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  30. 30.
    Xi, H., Pfenning, F.: Eliminating array bound checking through dependent types. In: ACM Conference on Programming Language Design and Implementation, Montreal, pp. 249–257 (1998)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2006

Authors and Affiliations

  • Limin Jia
    • 1
  • David Walker
    • 1
  1. 1.Princeton UniversityPrincetonUSA

Personalised recommendations