2015 · 24 citations · 31 references
ComputingComputer ScienceAlgorithmsFormal MethodsSoftware EngineeringControl-flow AnalysisData-flow AnalysisFunctional ProgrammingSoftware TestingType CheckingType SystemsAutomated Bug FindingInvariantsProgram InvariantsRefinementRefinement CheckingRefinement InvariantsRefinement TypesTest Generation
We propose the integration of a random test generation system (capable of discovering program bugs) and a refinement type system (capable of expressing and verifying program invariants), for higher-order functional programs, using a novel lightweight learning algorithm as an effective intermediary between the two. Our approach is based on the well-understood intuition that useful, but difficult to infer, program properties can often be observed from concrete program states generated by tests; these properties act as likely invariants, which if used to refine simple types, can have their validity checked by a refinement type checker. We describe an implementation of our technique for a variety of benchmarks written in ML, and demonstrate its effectiveness in inferring and proving useful invariants for programs that express complex higher-order control and dataflow.
31
Minimization of Boolean Functions*
E.J. McCluskey · Bell System Technical Journal · 1956 · 1.2K citations
The Daikon system for dynamic detection of likely invariants
Michael D. Ernst, Jeff Perkins, Philip J. Guo et al. · Science of Computer Programming · 2007 · 1.1K citations
Koen Claessen, John Hughes · ACM SIGPLAN Notices · 2011 · 1K citations
Counterexample-guided abstraction refinement for symbolic model checking
Edmund M. Clarke, Orna Grümberg, Somesh Jha et al. · Journal of the ACM · 2003 · 991 citations
Koen Claessen, John Hughes · 2000 · 714 citations