An abstract frame work for environment machines
Theoretical Computer Science
Control-flow analysis of higher-order languages of taming lambda
Control-flow analysis of higher-order languages of taming lambda
Eiffel: the language
A modular, polyvariant and type-based closure analysis
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
A practical and flexible flow analysis for higher-order languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
Control flow analysis: a functional languages compilation paradigm
SAC '95 Proceedings of the 1995 ACM symposium on Applied computing
Symbolic execution and program testing
Communications of the ACM
How to design programs: an introduction to programming and computing
How to design programs: an introduction to programming and computing
Automatic predicate abstraction of C programs
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
POPL '77 Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Refinement Calculus: A Systematic Introduction
Refinement Calculus: A Systematic Introduction
Contracts for higher-order functions
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
A proof method for the corectness of modularized OCFA
Information Processing Letters
Modular control-flow analysis with rank 2 intersection types
Mathematical Structures in Computer Science
DART: directed automated random testing
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
CUTE: a concolic unit testing engine for C
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering
Modular set-based analysis from contracts
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Improving flow analyses via ΓCFA: abstract garbage collection and counting
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
Type-sensitive control-flow analysis
Proceedings of the 2006 workshop on ML
Sound and complete models of contracts
Journal of Functional Programming
EXE: automatically generating inputs of death
Proceedings of the 13th ACM conference on Computer and communications security
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Static contract checking for Haskell
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Types and higher-order recursion schemes for verification of higher-order programs
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A rewriting semantics for type inference
ESOP'07 Proceedings of the 16th European conference on Programming
Proceedings of the 2010 ACM Symposium on Applied Computing
KLEE: unassisted and automatic generation of high-coverage tests for complex systems programs
OSDI'08 Proceedings of the 8th USENIX conference on Operating systems design and implementation
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Logical types for untyped languages
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Correct blame for contracts: no more scapegoating
Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Static contract checking with abstract interpretation
FoVeOOS'10 Proceedings of the 2010 international conference on Formal verification of object-oriented software
Specification and verification: the Spec# experience
Communications of the ACM
A decade of software model checking with SLAM
Communications of the ACM
Predicate abstraction and CEGAR for higher-order model checking
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
On contract satisfaction in a higher-order world
ACM Transactions on Programming Languages and Systems (TOPLAS)
Typed contracts for functional programming
FLOPS'06 Proceedings of the 8th international conference on Functional and Logic Programming
Hybrid contract checking via symbolic simplification
PEPM '12 Proceedings of the ACM SIGPLAN 2012 workshop on Partial evaluation and program manipulation
Chaperones and impersonators: run-time support for reasonable interposition
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
HALO: haskell to logic through denotational semantics
POPL '13 Proceedings of the 40th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
An overview of the Leon verification system: verification by translation to recursive functions
Proceedings of the 4th Workshop on Scala
Optimizing abstract abstract machines
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Input-covering schedules for multithreaded programs
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Hi-index | 0.00 |
We present a new approach to automated reasoning about higher-order programs by extending symbolic execution to use behavioral contracts as symbolic values, thus enabling symbolic approximation of higher-order behavior. Our approach is based on the idea of an abstract reduction semantics that gives an operational semantics to programs with both concrete and symbolic components. Symbolic components are approximated by their contract and our semantics gives an operational interpretation of contracts-as-values. The result is an executable semantics that soundly predicts program behavior, including contract failures, for all possible instantiations of symbolic components. We show that our approach scales to an expressive language of contracts including arbitrary programs embedded as predicates, dependent function contracts, and recursive contracts. Supporting this rich language of specifications leads to powerful symbolic reasoning using existing program constructs. We then apply our approach to produce a verifier for contract correctness of components, including a sound and computable approximation to our semantics that facilitates fully automated contract verification. Our implementation is capable of verifying contracts expressed in existing programs, and of justifying contract-elimination optimizations.