Model Checking Linear Temporal Logic Using Tabled Logic Programming

Logic Programming (LP) has been used in the last few years to construct model checkers [RRR97, DP99, LM99]. These model checkers verify whether a system of interest satis es properties expressed as formulas in some temporal logic. They are constructed by directly encoding the semantics of the temporal logic as a logic program. This program is then evaluated for the system and formula of interest using tabled resolution or bottom-up techniques. The system to be veri ed is given in terms of a state transition relation, either written directly or compiled from a process algebra notation. EÆcient tabled LP systems such as XSB [XSB00] permit us to construct practical model checkers using this approach. The works described in [RRR97, DP99, LM99] implement model checkers for modal mu-calculus [Koz83] and CTL. The model checking problem in these logics reduces to solving set equations with least or greatest xed points. Such equations can be solved by using the least model computation of tabled resolution. The XMC model checker [RRS00] has shown that the simplicity of implementation does not come at the cost of performance: XMC performs as well as hand-crafted model checkers [CDD98]. The XMC system can be obtained (with full sources) from http://www.cs.sunysb.edu/ lmc. Model checking linear temporal logic (LTL) and CTL involve path-based computations: in particular, detecting whether cycles of a particular form are reachable from the start state of the transition system. In this abstract, we describe how a model checker for LTL is constructed using tabled LP. The solution presented in the abstract contains several points of interest to logic programmers. First of all, we formulate the proof rules for LTL by using a dual of the tableau construction method proposed by Bhatt, Cleaveland and Grumberg [BCG95] (see Section 2). This formulation relies on tabulation and the ability to handle strati ed negation. Secondly, we present a programming abstraction of \in ationary negation" (inot) which is used to encode the strongly connected component (SCC) algorithm due to Kosaraju and Sharir described in [CLR89] (see Section 3). This illustrates combining procedural programming with tabled resolution.