Abstract
One proposal for automatic construction of proofs about programs is to combine Hoare logic and abstract interpretation. Constructing proofs is in Hoare logic. Discovering programs' invariants is done by abstract interpreters.
One problem of this approach is that abstract interpreters often compute invariants that are not needed for the proof goal. The reason is that the abstract interpreter does not know what the proof goal is, so it simply tries to find as strong invariants as possible. These unnecessary invariants increase the size of the constructed proofs. Unless the proof-construction phase is notified which invariants are not needed, it blindly proves all the computed invariants.
In this article, we present a framework for designing algorithms, called abstract-value slicers, that slice out unnecessary invariants from the results of forward abstract interpretation. The framework provides a generic abstract-value slicer that can be instantiated into a slicer for a particular abstract interpretation. Such an instantiated abstract-value slicer works as a post-processor to an abstract interpretation in the whole proof-construction process, and notifies to the next proof-construction phase which invariants it does not have to prove. Using the framework, we designed an abstract-value slicer for an existing relational analysis and applied it on programs. In this experiment, the slicer identified 62%--81% of the computed invariants as unnecessary, and resulted in 52%--84% reduction in the size of constructed proofs.
- Appel, A. W. 2001. Foundational proof-carrying code. In Proceedings of the IEEE Symposium on Logic in Computer Science (LICS). IEEE Computer Society Press, Los Alamitos, 247--258. Google Scholar
Digital Library
- Appel, A. W. and Felty, A. P. 2000. A semantic model of types and machine instructions for proof-carrying code. In Proceedings of the ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM Press, New York, 243--253. Google Scholar
Digital Library
- Ball, T., Majumdar, R., Millstein, T., and Rajamani, S. K. 2001. Automatic predicate abstraction of C programs. In Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI). ACM Press, New York, 203--213. Google Scholar
Digital Library
- Ball, T. and Rajamani, S. K. 2001. Automatically validating temporal safety properties of interfaces. In Proceedings of the SPIN Workshop on Model Checking of Software. Lecture Notes in Computer Science (LNCS), vol. 2057. Springer-Verlag, 103--122. Google Scholar
Digital Library
- Besson, F., Jensen, T., and Turphin, T. 2007. Small witnesses for abstract interpretation-based proofs. In Proceedings of the European Symposium on Programming (ESOP). Lecture Notes in Computer Science, vol. 4421. Springer-Verlag, 268--283. Google Scholar
Digital Library
- Bourdoncle, F. 1993. Abstract debugging of higher-order imperative languages. In Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI). ACM Press, New York, 46--55. Google Scholar
Digital Library
- Clarke, E. M., Grumberg, O., Jha, S., Lu, Y., and Veith, H. 2000. Counterexample-Guided abstraction refinement. In Proceedings of the International Conference on Computer-Aided Verification (CAV). Lecture Notes in Computer Science, vol. 1855. Springer-Verlag, 154--169. Google Scholar
Digital Library
- Clarke, E. M., Grumberg, O., and Peled, D. A. 1999. Model Checking. The MIT Press. Google Scholar
Digital Library
- Cortesi, A., Filé, G., and Winsborough, W. H. 1998. The quotient of an abstract interpretation. Theor. Comput. Sci. 202, 1-2, 163--192. Google Scholar
Digital Library
- Cousot, P. 1981. Semantic foundations of program analysis. In Program Flow Analysis: Theory and Applications, S. Muchnick and N. Jones, Eds. Prentice-Hall, Inc., Englewood Cliffs, NJ, Chapter 10, 303--342.Google Scholar
- Cousot, P. 1998. The calculational design of a generic abstract interpreter. In Course notes for the NATO International Summer School Marktoberdorf (Germany) on Calculational System Design, M. Broy and R. Steinbrüggen, Eds. NATO ASI Series F. IOS Press, Amsterdam.Google Scholar
- Cousot, P. 2005. Abstract interpretation. MIT course 16.399, http://web.mit.edu/16.399/www/.Google Scholar
- Cousot, P. and Cousot, R. 1977. Abstract interpretation: A unified lattice model for static analysis of programs by construction or approximation of fixpoints. In Proceedings of the ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM Press, New York, 238--252. Google Scholar
Digital Library
- Cousot, P. and Cousot, R. 1979. Systematic design of program analysis frameworks. In Proceedings of the ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM Press, New York, 269--282. Google Scholar
Digital Library
- Cousot, P. and Cousot, R. 1999. Refining model checking by abstract interpretation. Autom. Softw. Engin. 6, 1, 69--95. Google Scholar
Digital Library
- Dams, D., Gerth, R., and Grumberg, O. 1997. Abstract interpretation of reactive systems. ACM Trans. Program. Lang. Syst. 19, 2, 253--291. Google Scholar
Digital Library
- Davey, D. A. and Priestley, H. A. 1990. Introduction to Lattices and Order. Cambridge University Press.Google Scholar
- Davis, K. and Wadler, P. L. 1990. Backwards strictness analysis: Proved and improved. In Functional Programming: Proceedings of the 1989 Glasgow Workshop. Springer-Verlag, 12--30. Google Scholar
Digital Library
- Duesterwald, E., Gupta, R., and Soffa, M. L. 1995. Demand-driven computation of interprocedural data flow. In Proceedings of the ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM Press, New York, 37--48. Google Scholar
Digital Library
- Filé, G., Giacobazzi, R., and Ranzato, F. 1996. A unifying view of abstract domain design. ACM Comput. Surv. 28, 2, 333--336. Google Scholar
Digital Library
- Giacobazzi, R. and Mastroeni, I. 2004. Abstract noninterference: parameterizing noninterference by abstract interpretation. In Proceedings of the ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM Press, New York, 186--197. Google Scholar
Digital Library
- Giacobazzi, R. and Ranzato, F. 1997. Refining and compressing abstract domains. In Proceedings of the International Colloquium on Automata, Languages and Programming (ICALP). Lecture Notes in Computer Science, vol. 1256. Springer-Verlag, 771--781. Google Scholar
Digital Library
- Giacobazzi, R. and Ranzato, F. 1999. The reduced relative power operation on abstract domains. Theor. Comput. Sci. 216, 1-2, 159--211. Google Scholar
Digital Library
- Giacobazzi, R., Ranzato, F., and Scozzari, F. 2000. Making abstract interpretations complete. J. ACM 47, 2, 361--416. Google Scholar
Digital Library
- Giacobazzi, R. and Scozzari, F. 1998. A logical model for relational abstract domains. ACM Trans. Program. Lang. Syst. 20, 5, 1067--1109. Google Scholar
Digital Library
- Graf, S. and Saïdi, H. 1997. Construction of abstract state graphs with pvs. In Proceedings of the International Conference on Computer Aided Verification (CAV). Lecture Notes in Computer Science, vol. 1254. Springer-Verlag, 72--83. Google Scholar
Digital Library
- Hamid, N., Shaoi, Z., Trifonov, V., Monnier, S., and Ni, Z. 2002. A syntactic approach to foundational proof-carrying code. In Proceedings of the IEEE Symposium on Logic in Computer Science (LICS). IEEE Computer Society Press, Los Alamitos, 89--100. Google Scholar
Digital Library
- Henzinger, T., Jhala, R., Majumdar, R., and Sutre, G. 2002. Lazy abstraction. In Proceedings of the ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM Press, New York, 58--70. Google Scholar
Digital Library
- Henzinger, T., Jhala, R., Majumdar, R., and Sutre, G. 2003. Software verification with blast. In Proceedings of the SPIN Workshop on Model Checking of Software. Lecture Notes in Computer Science, vol. 2648. Springer-Verlag, 235--239.Google Scholar
- Hoare, C. A. R. 1969. An axiomatic basis for computer programming. Comm. ACM 12, 10, 576--580. Google Scholar
Digital Library
- Howe, J. M., King, A., and Lu, L. 2004. Analysing logic programs by reasoning backwards. In Program Development in Computational Logic. Lecture Notes in Computer Science, vol. 3049. Springer-Verlag, 152--188.Google Scholar
- Hughes, J. 1988. Backwards analysis of functional programs. In Proceedings of the IFIP TC2 Workshop on Partial Evaluation and Mixed Computation. Elsevier, 187--208.Google Scholar
- Hughes, J. and Launchbury, J. 1992. Reversing abstract interpretations. In Proceedings of the European Symposium on Programming (ESOP). Lecture Notes in Computer Science, vol. 582. Springer-Verlag, 269--286. Google Scholar
Digital Library
- King, A. and Lu, L. 2002. A backward analysis for constraint logic programs. Theory Prac. Logic Progr. 2, 4-5, 517--547. Google Scholar
Digital Library
- Massé, D. 2001. Combining forward and backward analyses of temporal properties. In Proceedings of the 2nd Symposium on Programs as Data Objects (PADO). Lecture Notes in Computer Science, vol. 2053. Springer-Verlag, 103--116. Google Scholar
Digital Library
- Miné, A. 2001. A new numerical abstract domain based on difference-bound matrices. In Proceedings of the 2nd Symposium on Programs as Data Objects (PADO). Lecture Notes in Computer Science, vol. 2053. Springer-Verlag, 155--172. Google Scholar
Digital Library
- Morrisett, G., Walker, D., Crary, K., and Glew, N. 1998. From System F to typed assembly language. In Proceedings of the ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM Press, New York, 85--97. Google Scholar
Digital Library
- Necula, G. C. 1997. Proof-carrying code. In Proceedings of the ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM Press, New York, 106--119. Google Scholar
Digital Library
- Necula, G. C. and Lee, P. 1997. Safe, untrusted agents using proof-carrying code. In Special Issue on Mobile Agent Security, G. Vigna, Ed. Lecture Notes in Computer Science, vol. 1419. Springer-Verlag, 61--91. Google Scholar
Digital Library
- Necula, G. C. and Rahul, S. P. 2001. Oracle-based checking of untrusted software. In Proceedings of the ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM Press, New York, 142--154. Google Scholar
Digital Library
- Necula, G. C. and Schneck, R. 2002. Proof-carrying code with untrusted proof rules. In Software Security---Theories and Systems. Lecture Notes in Computer Science, vol. 2609. Springer-Verlag, 283--298.Google Scholar
- Rival, X. 2005a. Abstract dependences for alarm diagnosis. In Proceedings of the Asian Symposium on Programming Languages and Systems (APLAS). Lecture Notes in Computer Science, vol. 3780. Springer-Verlag, 347--363. Google Scholar
Digital Library
- Rival, X. 2005b. Understanding the origin of alarms in ASTRÉE. In Proceedings of the International Static Analysis Symposium (SAS). Lecture Notes in Computer Science, vol. 3672. Springer-Verlag, 303--319. Google Scholar
Digital Library
- Seo, S., Yang, H., and Yi, K. 2003. Automatic construction of Hoare proofs from abstract interpretation results. In Proceedings of the Asian Symposium on Programming Languages and Systems (APLAS). Lecture Notes in Computer Science, vol. 2895. Springer-Verlag, 230--245.Google Scholar
- Tip, F. 1995. A survey of program slicing techniques. J. Program. Lang. 3, 3, 121--189.Google Scholar
- Wadler, P. and Hughes, R. J. M. 1987. Projections for Strictness Analysis. In Functional Programming Languages and Computer Architecture, G. Kahn, Ed. Lecture Notes in Computer Science, vol. 274. Springer, Berlin, 385--407. Google Scholar
Digital Library
- Yang, H., Seo, S., Yi, K., and Han, T. 2006. Off-line semantic slicing from abstract interpretation results. Tech. mem. ROPAS-2006-34, Programming Research Laboratory, School of Computer Science & Engineering, Seoul National University. Available at http://ropas.snu.ac.kr/lib/dock/YaSeYiHa2006.pdf.Google Scholar
Index Terms
Goal-directed weakening of abstract interpretation results
Recommendations
Abstract interpretation of resolution-based semantics
We extend the abstract interpretation point of view on context-free grammars by Cousot and Cousot to resolution-based logic programs and proof systems. Starting from a transition-based small-step operational semantics of Prolog programs (akin to the ...
Theories, solvers and static analysis by abstract interpretation
The algebraic/model theoretic design of static analyzers uses abstract domains based on representations of properties and pre-calculated property transformers. It is very efficient. The logical/proof theoretic approach uses SMT solvers/theorem provers ...
On the power of abstract interpretation
Increasingly sophisticated applications of static analysis make it important to precisely characterize the power of static analysis techniques. Sekar et al. recently studied the power of strictness analysis techniques and showed that strictness analysis ...






Comments