Formal SpecificationHaskell CodeEngineeringProgram CheckingProgram AnalysisAutomated ReasoningSoftware TestingVerificationDependently Typed ProgrammingFormal MethodsSoftware AnalysisSoftware EngineeringComputer ScienceType SystemFormal VerificationMany Delightful FeaturesFunctional Programming
Haskell has many delightful features. Perhaps the one most beloved by its users is its type system that allows developers to specify and verify a variety of program properties at compile time. However, many properties, typically those that depend on relationships between program values are impossible, or at the very least, cumbersome to encode within the existing type system. Many such properties can be verified using a combination of Refinement Types and external SMT solvers. We describe the refinement type checker liquidHaskell, which we have used to specify and verify a variety of properties of over 10,000 lines of Haskell code from various popular libraries, including containers, hscolour, bytestring, text, vector-algorithms and xmonad. First, we present a high-level overview of liquidHaskell, through a tour of its features. Second, we present a qualitative discussion of the kinds of properties that can be checked -- ranging from generic application independent criteria like totality and termination, to application specific concerns like memory safety and data structure correctness invariants. Finally, we present a quantitative evaluation of the approach, with a view towards measuring the efficiency and programmer effort required for verification, and discuss the limitations of the approach.
34
Extended static checking for Java
Cormac Flanagan, K. Rustan M. Leino, Mark Lillibridge et al. · 2002 · 1.3K citations
The SMT-LIB Standard Version 2.0
Clark Barrett, Aaron Stump, Cesare Tinelli · 2010 · 718 citations
Patrick M. Rondon, Ming Kawaguci, Ranjit Jhala · 2008 · 380 citations
Simple unification-based type inference for GADTs
Simon Peyton Jones, Dimitrios Vytiniotis, Stephanie Weirich et al. · 2006 · 335 citations
Engineering, Data Type, Data Science +13
Proving the correctness of reactive systems using sized types
John Hughes, Lars Pareto, Amr Sabry · 1996 · 310 citations · Full text