Title
Lazy counterfactual symbolic execution
Abstract
We present counterfactual symbolic execution, a new approach that produces counterexamples that localize the causes of failure of static verification. First, we develop a notion of symbolic weak head normal form and use it to define lazy symbolic execution reduction rules for non-strict languages like Haskell. Second, we introduce counterfactual branching, a new method to identify places where verification fails due to imprecise specifications (as opposed to incorrect code). Third, we show how to use counterfactual symbolic execution to localize refinement type errors, by translating refinement types into assertions. We implement our approach in a new Haskell symbolic execution engine, G2, and evaluate it on a corpus of 7550 errors gathered from users of the LiquidHaskell refinement type system. We show that for 97.7% of these errors, G2 is able to quickly find counterexamples that show how the code or specifications must be fixed to enable verification.
Year
DOI
Venue
2019
10.1145/3314221.3314618
Proceedings of the 40th ACM SIGPLAN Conference on Programming Language Design and Implementation
Keywords
Field
DocType
Haskell, counterexamples, counterfactual, lazy, symbolic execution
Computer science,Theoretical computer science,Counterfactual thinking,Symbolic execution
Conference
ISBN
Citations 
PageRank 
978-1-4503-6712-7
0
0.34
References 
Authors
0
5
Name
Order
Citations
PageRank
William T. Hallahan1152.75
Anton Xue200.34
Maxwell Troy Bland300.34
Ranjit Jhala42183111.68
Ruzica Piskac543.11