{'fraction_non_alphanumeric': 0.024778761061946902, 'fraction_numerical': 0.0, 'mean_word_length': 5.01595744680851, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Building A State-Of-The-Art Model Checker

Verification is the activity of proving a software artefact correct with respect to its specification. In this paper we focus on the algorithmic approach to verification. Therefore, we present how one can build a state-of-the-art model checker for recursive integer programs. Since those programs are present in different environments, many techniques evolved. Inspired by the driver verification with Microsoft’s SLAM toolkit, we show how to integrate some of the available techniques into a single tool. One of those techniques is predicate abstraction. It allows us to handle one of today’s core problems of model checking, namely a infinite data domain which is introduced by integer variables. Moreover, we integrate a reachability analysis to check the abstraction for correctness. This analysis uses procedure summaries to cope with recursive programs and potentially infinite call stacks. To complete our tool we also integrate a refinement for the abstraction based on Craig interpolation. Altogether, this stack of state-of-the-art techniques allows us to perform a CEGAR loop.