The formal semantics of programming languages: an introduction
The formal semantics of programming languages: an introduction
Contracts for higher-order functions
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Sound and complete models of contracts
Journal of Functional Programming
System F with type equality coercions
TLDI '07 Proceedings of the 2007 ACM SIGPLAN international workshop on Types in languages design and implementation
Dependent ML An approach to practical programming with dependent types
Journal of Functional Programming
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Not all patterns, but enough: an automatic verifier for partial but sufficient pattern matching
Proceedings of the first ACM SIGPLAN symposium on Haskell
A Hoare Logic for Call-by-Value Functional Programs
MPC '08 Proceedings of the 9th international conference on Mathematics of Program Construction
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
Well-Typed Programs Can't Be Blamed
ESOP '09 Proceedings of the 18th European Symposium on Programming Languages and Systems: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
Model-checking higher-order functions
PPDP '09 Proceedings of the 11th ACM SIGPLAN conference on Principles and practice of declarative programming
Some Domain Theory and Denotational Semantics in Coq
TPHOLs '09 Proceedings of the 22nd International Conference on Theorem Proving in Higher Order Logics
The TPTP Problem Library and Associated Infrastructure
Journal of Automated Reasoning
ACM Transactions on Programming Languages and Systems (TOPLAS)
TACAS'08/ETAPS'08 Proceedings of the Theory and practice of software, 14th international conference on Tools and algorithms for the construction and analysis of systems
Semantic subtyping with an SMT solver
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Extending Sledgehammer with SMT solvers
CADE'11 Proceedings of the 23rd international conference on Automated deduction
Secure distributed programming with value-dependent types
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Characteristic formulae for the verification of imperative programs
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Satisfiability modulo recursive programs
SAS'11 Proceedings of the 18th international conference on Static analysis
Boogie: a modular reusable verifier for object-oriented programs
FMCO'05 Proceedings of the 4th international conference on Formal Methods for Components and Objects
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
Connecting a logical framework to a first-order logic prover
FroCoS'05 Proceedings of the 5th international conference on Frontiers of Combining Systems
Interpolation and symbol elimination in vampire
IJCAR'10 Proceedings of the 5th international conference on Automated Reasoning
Automating induction with an SMT solver
VMCAI'12 Proceedings of the 13th international conference on Verification, Model Checking, and Abstract Interpretation
Combining interactive and automatic reasoning in first order theories of functional programs
FOSSACS'12 Proceedings of the 15th international conference on Foundations of Software Science and Computational Structures
Zeno: an automated prover for properties of recursive data structures
TACAS'12 Proceedings of the 18th international conference on Tools and Algorithms for the Construction and Analysis of Systems
Formal verification of monad transformers
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
Higher-order symbolic execution via contracts
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Automating inductive proofs using theory exploration
CADE'13 Proceedings of the 24th international conference on Automated Deduction
Hi-index | 0.00 |
Even well-typed programs can go wrong in modern functional languages, by encountering a pattern-match failure, or simply returning the wrong answer. An increasingly-popular response is to allow programmers to write contracts that express semantic properties, such as crash-freedom or some useful post-condition. We study the static verification of such contracts. Our main contribution is a novel translation to first-order logic of both Haskell programs, and contracts written in Haskell, all justified by denotational semantics. This translation enables us to prove that functions satisfy their contracts using an off-the-shelf first-order logic theorem prover.