Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
skip to main content
10.5555/2041552.2041575guideproceedingsArticle/Chapter ViewAbstractPublication PagesConference Proceedingsacm-pubtype
Article

Satisfiability modulo recursive programs

Published: 14 September 2011 Publication History

Abstract

We present a semi-decision procedure for checking satisfiability of expressive correctness properties of recursive first-order functional programs. In our approach, both properties and programs are expressed in the same language, a subset of Scala. We implemented our procedure and integrated it with the Z3 SMT solver and the Scala compiler. Our procedure is sound for counterexamples and for proofs of terminating functions. It is terminating and thus complete for many important classes of specifications, including all satisfiable formulas and all formulas where recursive functions satisfy certain syntactic restrictions. Using our system, Leon, we verified detailed correctness properties for functional data structure implementations, as well as syntax tree manipulations. We have found our system to be fast for both finding counterexamples and finding correctness proofs, and to scale to larger programs than alternative techniques.

References

[1]
Albert, E., Arenas, P., Genaim, S., Puebla, G., Zanardini, D.: COSTA: Design and implementation of a cost and termination analyzer for java bytecode. In: de Boer, F.S., Bonsangue, M.M., Graf, S., de Roever, W.-P. (eds.) FMCO 2007. LNCS, vol. 5382, pp. 113-132. Springer, Heidelberg (2008).
[2]
Ball, T., Bounimova, E., Levin, V., Kumar, R., Lichtenberg, J.: The static driver verifier research platform. In: Touili, T., Cook, B., Jackson, P. (eds.) CAV 2010. LNCS, vol. 6174, pp. 119-122. Springer, Heidelberg (2010).
[3]
Barrett, C., Tinelli, C.: CVC3. In: Damm, W., Hermanns, H. (eds.) CAV 2007. LNCS, vol. 4590, pp. 298-302. Springer, Heidelberg (2007).
[4]
Basler, G., Kroening, D., Weissenbacher, G.: A complete bounded model checking algorithm for pushdown systems. In: Yorav, K. (ed.) HVC 2007. LNCS, vol. 4899, pp. 202-217. Springer, Heidelberg (2008).
[5]
Bertot, Y., Castéran, P.: Interactive Theorem Proving and Program Development-Coq'Art: The Calculus of Inductive Constructions. Springer, Heidelberg (2004).
[6]
Blanchette, J.C., Nipkow, T.: Nitpick: A counterexample generator for higher-order logic based on a relational model finder. In: Kaufmann, M., Paulson, L.C. (eds.) ITP 2010. LNCS, vol. 6172, pp. 131-146. Springer, Heidelberg (2010).
[7]
Chamarthi, H.R., Dillinger, P.C., Manolios, P., Vroon, D.: The ACL2 sedan theorem proving system. In: Abdulla, P.A., Leino, K.R.M. (eds.) TACAS 2011. LNCS, vol. 6605, pp. 291-295. Springer, Heidelberg (2011).
[8]
Clarke, E.M., Kröning, D., Lerda, F.: A tool for checking ANSI-C programs. In: Jensen, K., Podelski, A. (eds.) TACAS 2004. LNCS, vol. 2988, pp. 168-176. Springer, Heidelberg (2004).
[9]
Dotta, M., Suter, P., Kuncak, V.: On static analysis for expressive pattern matching. Tech. Rep. LARA-REPORT-2008-004, EPFL (2008).
[10]
Dutertre, B., de Moura, L.: A Fast Linear-Arithmetic Solver for DPLL(T). In: Ball, T., Jones, R.B. (eds.) CAV 2006. LNCS, vol. 4144, pp. 81-94. Springer, Heidelberg (2006).
[11]
Ferrara, P.: Static type analysis of pattern matching by abstract interpretation. In: Hatcliff, J., Zucca, E. (eds.) FMOODS 2010. LNCS, vol. 6117, pp. 186-200. Springer, Heidelberg (2010).
[12]
Franzen, A., Cimatti, A., Nadel, A., Sebastiani, R., Shalev, J.: Applying SMT in symbolic execution of microcode. In: FMCAD (2010).
[13]
Freeman, T., Pfenning, F.: Refinement types for ML. In: Proc. ACM PLDI (1991).
[14]
Giesl, J., Thiemann, R., Schneider-Kamp, P., Falke, S.: Automated termination proofs with AProVE. In: van Oostrom, V. (ed.) RTA 2004. LNCS, vol. 3091, pp. 210-220. Springer, Heidelberg (2004).
[15]
Gries, D.: The Science of Programming. Springer, Heidelberg (1981).
[16]
Haftmann, F., Nipkow, T.: A code generator framework for Isabelle/HOL. In: Theorem Proving in Higher Order Logics: Emerging Trends Proceedings (2007).
[17]
Jhala, R., Majumdar, R., Rybalchenko, A.: HMC: Verifying functional programs using abstract interpreters. In: Computer Aided Verification, CAV (2011).
[18]
Kaufmann, M., Manolios, P., Moore, J.S. (eds.): Computer-Aided Reasoning: ACL2 Case Studies. Kluwer Academic Publishers, Dordrecht (2000).
[19]
Kobayashi, N., Tabuchi, N., Unno, H.: Higher-order multi-parameter tree transducers and recursion schemes for program verification. In: POPL (2010).
[20]
Manolios, P., Turon, A.: All-termination(T). In: Kowalewski, S., Philippou, A. (eds.) TACAS 2009. LNCS, vol. 5505, pp. 398-412. Springer, Heidelberg (2009).
[21]
Moore, J.S.: Theorem proving for verification - the early days. In: Keynote Talk at FLoC, Edinburgh (July 2010).
[22]
de Moura, L., Bjørner, N.: Z3: An efficient SMT solver. In: Ramakrishnan, C.R., Rehof, J. (eds.) TACAS 2008. LNCS, vol. 4963, pp. 337-340. Springer, Heidelberg (2008).
[23]
Nipkow, T., Paulson, L.C., Wenzel, M.: Isabelle/HOL: A Proof Assistant for Higher-Order Logic. LNCS, vol. 2283. Springer, Heidelberg (2002).
[24]
Odersky, M.: Contracts for scala. In: Barringer, H., Falcone, Y., Finkbeiner, B., Havelund, K., Lee, I., Pace, G., Rosu, G., Sokolsky, O., Tillmann, N. (eds.) RV 2010. LNCS, vol. 6418, pp. 51-57. Springer, Heidelberg (2010).
[25]
Odersky, M., Spoon, L., Venners, B.: Programming in Scala: a comprehensive step-by-step guide. Artima Press (2008).
[26]
Rondon, P.M., Kawaguchi, M., Jhala, R.: Liquid types. In: PLDI (2008).
[27]
Sinha, N.: Modular bug detection with inertial refinement. In: FMCAD (2010).
[28]
Suter, P., Dotta, M., Kuncak, V.: Decision procedures for algebraic data types with abstractions. In: POPL (2010).
[29]
Taghdiri, M.: Inferring specifications to detect errors in code. In: ASE 2004 (2004).
[30]
VSComp: The Verified Software Competition (2010), http://www.macs.hw.ac.uk/vstte10/Competition.html
[31]
Walther, C., Schweitzer, S.: About veriFun. In: Baader, F. (ed.) CADE 2003. LNCS (LNAI), vol. 2741, pp. 322-327. Springer, Heidelberg (2003).
[32]
Zee, K., Kuncak, V., Taylor, M., Rinard, M.: Runtime checking for program verification. In: Sokolsky, O., Tasiran, S. (eds.) RV 2007. LNCS, vol. 4839, pp. 202-213. Springer, Heidelberg (2007).

Cited By

View all
  • (2017)Contract-based resource verification for higher-order functions with memoizationACM SIGPLAN Notices10.1145/3093333.300987452:1(330-343)Online publication date: 1-Jan-2017
  • (2017)Contract-based resource verification for higher-order functions with memoizationProceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages10.1145/3009837.3009874(330-343)Online publication date: 1-Jan-2017
  • (2017)A Decision Procedure for (Co)datatypes in SMT SolversJournal of Automated Reasoning10.1007/s10817-016-9372-658:3(341-362)Online publication date: 1-Mar-2017
  • Show More Cited By

Recommendations

Comments

Information & Contributors

Information

Published In

cover image Guide Proceedings
SAS'11: Proceedings of the 18th international conference on Static analysis
September 2011
386 pages
ISBN:9783642237010
  • Editor:
  • Eran Yahav

Publisher

Springer-Verlag

Berlin, Heidelberg

Publication History

Published: 14 September 2011

Qualifiers

  • Article

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)0
  • Downloads (Last 6 weeks)0
Reflects downloads up to 01 Jan 2025

Other Metrics

Citations

Cited By

View all
  • (2017)Contract-based resource verification for higher-order functions with memoizationACM SIGPLAN Notices10.1145/3093333.300987452:1(330-343)Online publication date: 1-Jan-2017
  • (2017)Contract-based resource verification for higher-order functions with memoizationProceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages10.1145/3009837.3009874(330-343)Online publication date: 1-Jan-2017
  • (2017)A Decision Procedure for (Co)datatypes in SMT SolversJournal of Automated Reasoning10.1007/s10817-016-9372-658:3(341-362)Online publication date: 1-Mar-2017
  • (2017)AutoProofInternational Journal on Software Tools for Technology Transfer (STTT)10.1007/s10009-016-0419-019:6(697-716)Online publication date: 1-Nov-2017
  • (2016)Scalable verification of border gateway protocol configurations with an SMT solverACM SIGPLAN Notices10.1145/3022671.298401251:10(765-780)Online publication date: 19-Oct-2016
  • (2016)Scalable verification of border gateway protocol configurations with an SMT solverProceedings of the 2016 ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications10.1145/2983990.2984012(765-780)Online publication date: 19-Oct-2016
  • (2016)Automatically learning shape specificationsACM SIGPLAN Notices10.1145/2980983.290812551:6(491-507)Online publication date: 2-Jun-2016
  • (2016)MapReduce program synthesisACM SIGPLAN Notices10.1145/2980983.290810251:6(326-340)Online publication date: 2-Jun-2016
  • (2016)Program synthesis from polymorphic refinement typesACM SIGPLAN Notices10.1145/2980983.290809351:6(522-538)Online publication date: 2-Jun-2016
  • (2016)Automatically learning shape specificationsProceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation10.1145/2908080.2908125(491-507)Online publication date: 2-Jun-2016
  • Show More Cited By

View Options

View options

Media

Figures

Other

Tables

Share

Share

Share this Publication link

Share on social media