Description |
Modern software applications now demand an underestimated software quality - proofs of their correctness. This means that rigorous program reasoning is enjoying more popularity after decades of research spent on its improvement. However, we observe that such improvement is mainly in terms of expressiveness and scalability of antecedently popular domains. We argue that the improvement should include two additional dimensions, automation, and scalability of finite-domain theories, in order to further boost the practicability of rigorous program reasoning. In this dissertation, we present three lines of work in this direction. First, we automate the process of verifying three robustness criteria, relative safety, accuracy, and termination, for a class of program approximations. We use mutual summaries to express relative specifications for program approximations, and SMT-based invariant inference to automate the verification of such specifications, achieving a much higher degree of automation than the previous work. Second, we devise a counterexample-guided approach to automatically tune the bit-precision of software verifiers. We employ a simple and fast type analysis to diagnose the spurious counterexamples caused by low bit-precision and leverage the learned type information to lazily and gradually refine the bit-precision of reasoning about the whole program. The evaluation shows that our approach significantly reduces the number of false alarms while maintaining scalability. Third, we tackle the scalability issue of SMT solving on the orating-point theory using stochastic local search (SLS), which has been successfully used on the SMT theory of bit-vectors. We show how the key ingredients of related work on leveraging SLS to solve the SMT bit-vector theory are redefined for solving the orating-point theory and three heuristics to improve the performance. We confirm the effectiveness of SLS on SMT solving by comparing our approach with mature solvers. |