19 research outputs found
HSF(C): A Software Verifier Based on Horn Clauses
Abstract. HSF(C) is a tool that automates verification of safety and liveness properties for C programs. This paper describes the verification approach taken by HSF(C) and provides instructions on how to install and use the tool. 1 Verification Approach HSF(C) is a tool for verification of C programs based on predicate abstraction and refinement following the counterexample-guided abstraction refinement (CE-GAR) paradigm [4]. There are a number of successful tools [1, 7, 5, 10, 2] based on abstraction refinement. We give here a brief description of our verification algorithm; interested readers can find more details about the underlying theory behind our implementation in [10, 6]. The algorithm used in HSF(C) is a generalization of the CEGAR scheme that deals with Horn-like clauses instead of transition systems/programs with procedures. We use Horn clauses to represent both the program to be verified and the proof rule used for verification, i.e., safety checking for programs wit
Generalised Interpolation by Solving Recursion-Free Horn Clauses
In this paper we present InterHorn, a solver for recursion-free Horn clauses.
The main application domain of InterHorn lies in solving interpolation problems
arising in software verification. We show how a range of interpolation
problems, including path, transition, nested, state/transition and well-founded
interpolation can be handled directly by InterHorn. By detailing these
interpolation problems and their Horn clause representations, we hope to
encourage the emergence of a common back-end interpolation interface useful for
diverse verification tools.Comment: In Proceedings HCVS 2014, arXiv:1412.082
Lost in Abstraction: Monotonicity in Multi-Threaded Programs (Extended Technical Report)
Monotonicity in concurrent systems stipulates that, in any global state,
extant system actions remain executable when new processes are added to the
state. This concept is not only natural and common in multi-threaded software,
but also useful: if every thread's memory is finite, monotonicity often
guarantees the decidability of safety property verification even when the
number of running threads is unknown. In this paper, we show that the act of
obtaining finite-data thread abstractions for model checking can be at odds
with monotonicity: Predicate-abstracting certain widely used monotone software
results in non-monotone multi-threaded Boolean programs - the monotonicity is
lost in the abstraction. As a result, well-established sound and complete
safety checking algorithms become inapplicable; in fact, safety checking turns
out to be undecidable for the obtained class of unbounded-thread Boolean
programs. We demonstrate how the abstract programs can be modified into
monotone ones, without affecting safety properties of the non-monotone
abstraction. This significantly improves earlier approaches of enforcing
monotonicity via overapproximations
Automatic verification of multi-threaded programs by inference of rely-guarantee specifications
Ministry of Education, Singapore under its Academic Research Funding Tier 2; National Research Foundation (NRF) Singapor
Verification of Component-based Systems via Predicate Abstraction and Simultaneous Set Reduction
This paper presents a novel safety property verification approach for component-based systems
modelled in BIP (Behaviour, Interaction and Priority), encompassing multiparty synchronisation
with data transfer and priority. Our contributions consist of: (1) an on-the-fly lazy predicate
abstraction technique for BIP; (2) a novel explicit state reduction technique, called simultaneous
set reduction, that can be combined with lazy predicate abstraction to prune the search space
of abstract reachability analysis; (3) a prototype tool implementing all the proposed techniques.
We also conduct thorough experimental evaluation, which demonstrates the effectiveness of our
proposed approach