ILC: A Foundation for Automated Reasoning About Pointer Programs

  • Limin Jia
  • David Walker
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 
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.
    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