Building SMT-based Software Model Checkers: an Experience Report
|
|
|
- Colin Kenneth Carter
- 9 years ago
- Views:
Transcription
1 Building SMT-based Software Model Checkers: an Experience Report Alessandro Armando Artificial Intelligence Laboratory (AI-Lab) DIST - University of Genova, Italy Abstract. In this paper I report on my experience on developing two SMT-based software model checking techniques and show through comparison with rival state-of-the-art software model checkers that SMT solvers are key to the effectiveness and scalability of software model checking. 1 Introduction Software model checking is one of the most promising techniques for automatic program analysis. This is witnessed by the growing attention that this technique is receiving by leading software industries which have already introduced in their software production cycle: Things like even software verification, this has been the Holy Grail of computer science for many decades but now in some very key areas, for example, driver verification we re building tools that can do actual proof about the software and how it works in order to guarantee the reliability. Bill Gates [Gat02] As the name suggests, software model checking owns its origins to model checking [Cla00], a powerful technique capable to perform a complete and fully automatic exploration of the behaviors of a finite state system by using sophisticated data structures and algorithms (most notably OBDDs and SAT solvers). Model checking has been (and still is) remarkably successful in the analysis of hardware and communication protocols. However the application of model checking to software is considerably more difficult as most programs deal with very large or even infinite data structures and are therefore inherently infinitestate. The development of software model checking tools asks for a technology that supports automated reasoning about data structures commonly occurring in programs (e.g. integers, lists, arrays, bit-vectors). This goes clearly beyond the scope of OBDDs and SAT solvers. The development of decision procedures for theories of data structures is a long standing problem in Automated Reasoning. The Satisfiability Modulo Theory (SMT) problem is the problem of determining whether a formula is satisfied by at least one model of a given theory T. Of course, theories whose SMT
2 problem is decidable are of special interest. State-of-the-art SMT-solvers provide decision procedures for a number of decidable theories used in program verification, including propositional logic, linear arithmetics, the theory of uninterpreted function symbols, the theory of arrays, the theory of records and the combination thereof. (See [Seb07] for a survey on SMT.) In this paper I report on my experience in developing two SMT-based software model checking techniques. The first technique carries out a bounded analysis of the input program through a reduction to a SMT problem. The second technique is based on the CounterExample-Guided Abstraction Refinement (CE- GAR) paradigm and heavily relies on SMT solving during the refinement phase. Both techniques have been implemented in prototype model checking tools. I also show through experimental comparison with rival state-of-the-art software model checkers that SMT solvers are key to the effectiveness and scalability of the tools. Structure of the paper. Section 2 shows that bounded model checking of software can greatly benefit if SMT solvers are used instead of SAT Solvers. Section 3 introduces the CEGAR paradigm and shows the prominent role played by SMTsolvers in this context. A brief survey of the related work is given in Sect. 4. Some concluding remarks are drawn in Sect Bounded Model Checking of Software For simplicity in this paper we focus on fragments of the C programming language containing the usual control-flow constructs (e.g. if, while, and assert), (recursive) function definitions, and with assignments (over numeric variables and arrays) and function calls as atomic statements. Programs may also contain conditional expressions, i.e. expressions of the form (c?e 1 :e 2 ) whose value is the value of e 1 if the value of c is different from 0 and is the value of e 2 otherwise. We also assume that the failure of an assert statement leads the program to a special control location denoted by 0. If a is a program variable of type array, then size(a) denotes its size. The bounded reachability problem for a program P is the problem of determining whether there exists an execution path of P of at most a given length reaching a given control location of P. Here I focus on the bounded 0-reachability problem for P, i.e. the problem of determining whether there exists an execution path of P of bounded length reaching control location 0. In this section I show how to reduce this problem to a SMT problem. (For the sake of simplicity, in this section I assume that = is the only assignment operator occurring in P and that no pointer variables nor conditional expressions occur in P.) Given an integer k, the procedure generates an SMT formula whose models (if any) correspond to execution traces (of length bounded by k) leading to an assertion violation. Finding assertion violations (of length up to k) therefore boils down to solving SMT problems. Preliminarily to the generation of the formula, we apply a number of simplifying transformations to P, thereby obtaining a simplified program S, whose
3 execution paths correspond to finite prefixes of the execution paths of P. These transformations are described in Section 2.1. We then build two sets of quantifierfree formulae C S and P S such that C S = T PS (1) for some given background theory T if and only if no execution path of S violates any assert statement. The generation of C S and P S is the described in Sect The usage of SAT and SMT solvers to tackle (1) is discussed in Sect. 2.3 and in Sect. 2.3 respectively. 2.1 The Preprocessing Phase The preprocessing activity starts by unwinding loops, i.e. by replacing them with a sequence of nested if statements. This is done by removing while loops through the application of the following transformation k times: while (e) { P if(d) { P while (c) { P and by replacing the remaining while loop with an unwinding assertion of the form assert(!c). The failure of an unwinding assertion indicates that the bound k is not sufficient to adequately model the problem at hand, thereby indicating that it must be increased. Non-recursive function calls are then inlined. Recursive function calls are unwound similarly to loop statements. Let Q be the program obtained from P by applying the above transformations. It is easy to see that the execution paths of Q correspond to finite prefixes of the execution paths of P. Next, program Q is put in Static Single Assignment (SSA) form. Let R be the resulting program. A program in SSA form [CFR + 89] is a program in which every variable is assigned at most once. The transformation in SSA form is done by 1. replacing all the assignments of the form a[e 1 ]=e 2 with a=store(a,e 1,e 2 ), where store is a function such that store(a,e 1,e 2 ) returns the array obtained from a by setting the element at position e 1 with the value of e 2 2. replacing the occurrences of the variables that are target of assignments (say x) with new, indexed versions x 0, x 1, replacing all the occurrences of the variables that are not target of assignments with appropriate versions so to preserve the semantics of the original program and 4. adding a new assignment of the form x j3 =(c?x j1 :x j2 ) (for suitable values of j 1, j 2, and j 3 ) after each conditional statement of the form if(c) Q 1 [else Q 2 ] where x occurs as target of an assignment in Q 1 [or in Q 2 ]. An example of transformation in SSA form is given in Fig. 1. As the first two statements of Q have the same target variable (namely i), the target of the corresponding assignments in R are two distinct versions of the same variable (namely i 1 and i 2 ). The assignment at line 3 of R uses in its right-hand side
4 the version of the variable that is target of the assignment at line 2, namely i 1. The same considerations apply to the two occurrences of x that are target of the assignments at lines 6 and 8. Notice that the additional assignments at lines 9 and 11 of R are added to provide a unique definition for the future uses of x. 1 // Program Q 2 i=a [0] 3 i=i +1 4 if(x >0) { 5 if(x <10) 6 x=x +1 7 else 8 x=x assert (x >0 && x <10) 11 a[x]=i 1 // Program R 2 i 1=a 0 [0] 3 i 2=i if(x 0 >0) { 5 if(x 0 <10) 6 x 1=x else 8 x 2=x x 3 =(x 0 <10?x 1:x 2) x 4 =(x 0 >0?x 3:x 0) 12 assert (x 4 >0 && x 4 <10) 13 a 1= store (a 0,x 4,i 2 ) Fig. 1. Example program Q (left) and corresponding program in SSA form R (right) Notice that by turning a program into SSA form we are trading assignments (e.g. x=x+1) for equalities (e.g. x 1 = x 0 + 1). This is why, preliminarily to the generation of the encoding, it is convenient to apply this transformation. The program R is now turned in Conditional Normal form, i.e. into a sequence of statements of the form if(c) r, where r is either an assignment or an assertion and does not contain conditional expressions. We refer to statements of the form if(c) r as conditional statements. Notice that this normalization step removes the else constructs and pushes the if statements downwards in the abstract syntax tree of the program until they are applied to atomic statements only. The program in Conditional Normal form S corresponding to the program R on the right of Fig. 1 is shown on the left of Fig. 2. As the execution of statements at lines 2, 3, 12 and 13 of R does not depend on any condition, the guard of the corresponding conditional statements in S is true. The assignment at line 6 of R is executed only if the conditions of the two preceding if statements hold. Therefore the corresponding assignment at line 4 in S is guarded by the conjunction of these two conditions. Similar considerations apply for the guard of the assignment at line 5 in S. The assignment at line 9 (11) of R is turned into the pair of conditional statements at lines 6 and 7 (8 and 9, resp.) of S. It must be noted that S is not necessarily in SSA form. However, all the variables that are assigned more than once (e.g. x 3 and x 4 in the program of Fig. 2) are guarded by mutually exclusive conditions. Notice that, for suitable values of k, all the above transformations (i.e. the transformations leading from the input program P to Q, from Q to R, and from
5 1 // Program S 2 if( true ) i 1=a 0 [0] 3 if( true ) i 2=i if(x 0 >0 && x 0 <10) x 1=x if(x 0 >0 &&!(x 0 <10)) x 2=x if(x 0 >0 && x 0 <10) x 3=x 1 7 if(x 0 >0 &&!(x 0 <10)) x 3=x 2 8 if(x 0 >0) x 4=x 3 9 if (!( x 0 >0)) x 4=x 0 10 if( true ) assert (x 4 >0 && x 4 <10) 11 if( true ) a 1= store (a 0,x 4,i 2 ) C S = { (true i 1 = select(a 0, 0)), (true i 2 = i 1 + 1), ((x 0 > 0 x 0 < 10) x 1 = x 0 + 1), ((x 0 > 0 (x 0 < 10)) x 2 = x 0 1), ((x 0 > 0 x 0 < 10) x 3 = x 1), ((x 0 > 0 (x 0 < 10)) x 3 = x 2), (x 0 > 0 x 4 = x 3), ( (x 0 > 0) x 4 = x 0), (true a 1 = store(a 0, x 4, i 2)) P S = {true (x 4 > 0 x 4 < 10) Fig. 2. Program in Conditional Normal S (left) and corresponding encoding (right) R to the program S) are such that each execution path in the input program corresponds to an execution path in the output program and vice versa, and both paths contain the same (modulo renaming of the variables) sequence of atomic statements, and all atomic statements are guarded by the same (modulo renaming of the variables) conditions. From this fact it readily follows that the bounded reachability problem for P can be reduced to the reachability problem for S. 2.2 The Encoding Phase Let S = s 1 s m be the program in Conditional Normal form resulting from the application of the transformations described in Section 2.1 to the input program P for a given value of k. We now show how to build two sets of quantifier-free formulae C S and P S such that C S = T PS if and only if no execution path of S violates any assert statement. For simplicity we assume that the variables of S are either of type int or are arrays of elements of type int. We define T to be the union of a theory of the integers and the theory of arrays. We also assume that the language of T contains (i) a variable v j of sort int for each variable v j of S of type int and (ii) a variable a j of sort array for each variable a j of S ranging over arrays. Let e be a program expression. By e we indicate the term of the language of T obtained from e by replacing all program variables (say v j ) with the corresponding variables of T (say v j ) and the operators occurring in e with the corresponding function and predicate symbols in T. For instance, if e =(a 1 [v 1 +1]<=v 0 +2), then e = (select(a 1, v 1 + 1) v 0 + 2). For each statement in S of the form if(c) v j =e, C S contains the formula (c (v j = e )) and for each statement of the form if(c) assert(e) in S, P S contains the formula (c e ). An example of the encoding is given in Fig. 2. If S is a program in conditional normal form with m statements, then C S = T P S if and only if all complete execution paths of S end in control location m + 1. This result (proved in [AMP09]) guarantees that the encoding given by C S and P S
6 is sound and complete, i.e. the bounded 0-reachability problem can be reduced to a SMT problem. 2.3 The Solving Phase Solving the Formulae with a SAT Solver. In [KCY03] checking problems of the form (1) is reduced to a propositional satisfiability problem which is then fed to a SAT solver. This is done by modeling variables of basic data types (e.g. int) as fixed-size bit-vectors and by considering the equations in C S and in P S as bit-vector equations. Each array variable a is also replaced by size(a) distinct variables a 0,..., a size(a) 1 and each formula of the form c (a j+1 = store(a j, e 1, e 2 )) occurring in C S is replaced by the formula size(a) 1 i=0 a i j+1 = ((c e 1 = i)? e 2 : a i j ), where v = (c? e 1 : e 2 ) abbreviates the formula (c v = e 1 ) ( c v = e 2 ). Finally each term of the form select(a j, e) is replaced by a new variable, say x, and size(a) 1 i=0 ((e = i) x = a i j ) is added to C S. The resulting set of bit-vector equations is then turned into a propositional formula. Notice that the size of the propositional formula generated in this way depends (i) on the size of the bit-vector representation of the basic data types as well as (ii) on the size of the arrays used in the program. More generally, if the program contains a multi-dimensional array a with dimensions d 1,..., d m, then the number of added formulae grows as O (d 1 d 2... d m ). Solving the Formulae with a SMT Solver. The alternative approach, first proposed in [AMP06], is to use a SMT solver to directly check whether C S = T PS. By proceeding in this way the size of the formula given as input to the SMT solver does not depend on the size of the bit-vector representation of the basic data types nor on the size of the arrays occurring in the program. Moreover the use of a SMT solver gives additional freedom in the modeling the basic data types. In fact, program variables of numeric type (e.g. int, float) can be modeled by variables ranging over bit-vectors or over the corresponding numerical domain (e.g. Z, R, resp.). If the modeling of numeric variables is done through fixed-size bit-vectors, then the result of the analysis is precise but it depends on the specific size considered for the bit-vectors. If, instead, the modeling of numeric variables is done through the corresponding numerical domain, then the result of the analysis is independent from the actual binary representation. 2.4 Experimental Results smt-cbmc is an SMT-based bounded model checker for sequential programs that implements the ideas described in Sect. 2. smt-cbmc consists of four main modules. The first module parses the input program, the second carries out the preprocessing, the third builds the quantifier-free formula, and the fourth module solves the formula by invoking CVC Lite [BB04] as a SMT solver. The latter module also builds and prints the error trace whenever a counterexample is returned by CVC Lite. smt-cbmc can represent numeric data types with
7 corresponding numeric domains as well as with fixed-size bit-vectors. Moreover the user can specify the maximum number of unwindings to be considered. We have thoroughly assessed the approach by running smt-cbmc and cbmc against the following families of C programs: SelectSort.c(N), an implementation of the Selection Sort algorithm [Knu97], BellmanFord.c(N), an implementation of the Bellman Ford algorithm [Bel58] for computing single-source shortest paths in a weighted graph, and m k Gray codes.c(n), an implementation of an algorithm for the generation of (m, k)-gray code [Bla05], a generalization of the binary Gray code. Each family of programs is parametric in a positive integer N such that both the size of the arrays occurring in the programs and the number of iterations done by the programs depend on N. Therefore the instances become harder as the value of N increases. The results of the experiments are reported in Fig. 3. All the experiments presented here and in the rest of this paper have been carried out on a 2.4GHz Pentium IV running Linux with memory limit set to 800MB and time limit set to 30 minutes. The time (in seconds) spent by the tools to tackle each individual instance is given in the plots on the left. The size of the encodings (in bytes) generated by the tools are given by the plots on the right. cbmc has been invoked by manually setting the unwinding bound and by disabling simplification as these functionalities are not available in smt-cbmc. On the instances in the SelectSort.c(N) family, cbmc runs out of memory for N > 17, while smt-cbmc can still analyze programs for N = 75. A comparison between the size of the formulae generated by smt-cbmc and cbmc substantiates our remarks about the size of the encodings: the formula built by smtcbmc for N = 17 is almost two orders of magnitude smaller than the one built by cbmc. Similar considerations apply on the results obtained by running the tools against the instances of the BellmanFord.c(N) and m k Gray Code.c(N) families. It is worth pointing out that in our experiments we modeled the basic data types with bit-vectors thereby exploiting the decision procedure for the theory of bit-vectors available in CVC Lite during the solving phase. Experimental results indicate that similar performances are obtained by letting the numerical variables range over the integers and thereby using the decision procedure for linear arithmetic available in CVC Lite during the solving phase. 3 Counterexample-Guided Abstraction Refinement Given a program P as input, a model checking procedure based on CEGAR amounts to the iteration of the following steps (see also Fig. 4): Abstraction. An abstract program P is generated from P. By construction every execution trace of P is also an execution trace of P. However, some trace of P may not correspond to a trace of P.
8 2.5 x 108 SMT CBMC formula (byte) 2.5 x 108 SMT CBMC formula (byte) SelectSort.c(N) 250 SMT CBMC time (s) CBMC time (s) 10 x 107 SMT CBMC formula (Bytes) CBMC formula (Bytes) BellmanFord.c(N) 35 SMT CBMC time (s) CBMC time (s) 12 x 107 SMT CBMC formula (byte) CBMC formula (byte) m k Gray Code.c(N) CBMC formula (byte) CBMC formula (byte) Time spent by the tools Size of the formulae Fig. 3. smt-cbmc vs. cbmc: time spent by the tools (left) and size of the encodings (right)
9 Input Program Abstraction Abstract Program Model Checking The program is correct Refinement Spurious Trace Candidate Error Trace Simulation Error Trace Fig. 4. The CEGAR Loop Model Checking. The abstract program P is model-checked. If P is found to be safe (i.e. correct w.r.t. given properties), so is the original program P and this is reported to the user. If an error trace is found in P, then it is given as input to the next step. Simulation. The error trace of P found in the previous step is simulated on P in order to determine its feasibility, i.e. if it corresponds to an error trace of P. The feasibility check is usually carried out with the aid of an SMT solver. If the trace is feasible, then the error trace is reported to the user, otherwise the procedure continues with the next step. Refinement. The information gathered from the SMT solver during the simulation step (typically a proof of the unfeasibility of the trace) is used to generate a new abstract program which (i) is more precise than the previous abstraction, and (ii) does not contain the spurious error trace found by the model checking phase. The procedure outlined above can be instantiated in a variety of ways depending on the abstraction chosen. This choice has an important impact on the effectiveness of the whole procedure as it affects the complexity of the component steps (namely how difficult is (i) to model check abstract programs, (ii) to check abstract error traces, and (iii) to compute refined versions of the current abstract program whenever a spurious counterexample is found) as well as the number of iterations needed by the procedure to terminate. 3.1 Boolean Programs and CEGAR with Predicate Abstraction The most widely applied instance of CEGAR (e.g. SLAM [BR01], BLAST [HJMS02], SATABS [CKSY05]) is based on predicate abstraction and uses boolean programs as target of the abstraction, i.e. programs whose variables range over the booleans and model the truth values of predicates corresponding to properties of the program state. The nice feature of boolean programs is that their reachability problem is decidable. A model checker for boolean programs based on the OBDDs technology is described in [BR00]. To illustrate, consider the programs in Fig. 5. These programs are obtained by applying a CEGAR procedure based on predicate abstraction to program
10 P. Program P 0 is the first abstraction of P and is obtained by replacing all 1 /* Program P */ 2 int numunits 3 int level 4 5 void getunit () { 6 int canenter =F 7 if( numunits ==0) { 8 if( level >0) { 9 NewUnit () 10 numunits =1 11 canenter = else canenter =1 14 if( canenter ==1) { 15 if( numunits ==0) 16 ERROR : 17 else 18 gotunit () /* Program P 0 */ void getunit () { if(u) { if(u) { else if(u) { if(u) ERROR : else /* Program P 1 */ bool nu0 void getunit () { if(nu0 ) { if(u) { nu0 =F else if(u) { if( nu0 ) ERROR : else /* Program P 2 */ bool nu0 void getunit () { bool ce=f if(nu0 ) { if(u) { nu0 =F ce=t else ce=t if(ce) { if( nu0 ) ERROR : else Fig. 5. Application of CEGAR with Predicate Abstraction the atomic statements by the skip statement () and all the expressions occurring in conditionals statements and in assertions with the U symbol (standing for undefined). A model checker for boolean programs determines that line 16 reachable in P 0 and returns 6,7,14,15,16 as execution trace. This trace is found to be spurious by simulating its execution on P. In fact, numunits==0 cannot be false at line 7 and true at line 15. Program P 0 is thus refined into a program P 1 containing a new boolean variable nu0 that is true when numunits==0 and false otherwise. The model checker now determines that line 16 is still reachable in P 1 with error trace 6,7,8,14,15,16. Simulation on P reveals that also this trace is spurious. In fact, the assignment at line 6 sets canenter to 0 and hence canenter==1 at line 13 cannot possibly be true. Thus P 1 is refined to P 2 which contains a new boolean variable ce that is true when canenter==1 and false otherwise. The model checker now concludes that line 16 is not reachable in P 2 and the CEGAR procedure can thus halt and return that line 16 in not reachable in P as well. Predicate abstraction has proved effective on important application domains such as operating systems device drivers [BBC + 06]. But it must be noted that device drivers are inherently control-intensive (i.e. the control flow largely prevails over the data flow). The effectiveness of predicate abstraction refinement on other kinds of software is still to be ascertained. As a matter of fact, CEGAR based on predicate abstraction performs poorly when applied to data intensive programs (e.g. programs performing non trivial manipulations of numeric variables and/or arrays): the abstractions that are built are too coarse, too many iterations of the abstraction refinement loop are usually required, and the re-
11 finement phase often fails to determine the boolean variables needed to build a more accurate model. 3.2 Linear Programs and CEGAR with Array Abstraction Linear Programs (with arrays) are C programs where variables (and array elements) range over a numeric domain and expressions involve linear combinations of variables and array elements. By Linear Arithmetic we mean standard arithmetic (over R or Z) with addition (i.e. +) and the usual relational operators (e.g. =, <,, >, ) but without multiplication. By the theory of arrays we mean the theory concisely presented by the following axiom: a, i, j, e. select(store(a, i, e), j) = (j = i? e : select(a, j)) (2) where (? : ) is a conditional term constructor with the obvious semantics. An CEGAR procedure for model checking linear programs with arrays was is forward in [ABM07]. At the core of the procedure lies the model checker for linear programs described in [ACM04] and uses array indexes instead of predicates for the abstraction: the input program is abstracted w.r.t. sets of array indexes, the abstraction is a linear program (without arrays), and refinement looks for new array indexes. Thus, while predicate abstraction uses boolean programs as the target of the abstraction, in this approach linear programs are used for the same purpose. This is particularly attractive as linear programs can directly and concisely represent complex correlations among program variables and a small number of iterations of the abstraction refinement loop usually suffice to either prove or disprove that the input program enjoys the desired properties. 1 /* Program P */ 2 void main () { 3 int i, a [30] 4 a [1] = 9 5 i = 0 6 while (a[i ]!=9) { 7 a[i] = 2* i 8 i = i +1 9 assert (i <=1) /* Program P 0 */ void main () { int i i = 0 while (U!=9) { i = i +1 assert (i <=1) /* Program P 1 */ void main () { int i, a 1 a 1 = (1==1)?9: a 1 i = 0 while ((( i ==1)? a 1 :U)!=9) { a 1 = (i ==1)?2* i:a 1 i = i +1 assert (i <=1) Fig. 6. Application of CEGAR with Array Abstraction To illustrate, consider the linear program with arrays P in Fig. 6. The procedure starts by abstracting P into P 0. This done by replacing every occurrence of array expressions with the symbol U (denoting an arbitrary number) and every assignment to array elements with a skip statement (). By applying a model checker for linear programs to P 0 we get the execution trace 4, 5, 6, 7, 8, 6, 7, 8, 6, 9, 0 witnessing the violation of the assertion at line 9. The feasibility check of the above trace w.r.t. P is done by generating a set of quantifier-free formulæ
12 whose satisfying valuations correspond to all possible executions of the sequence of statements of P corresponding to the trace under consideration. This is done by first putting the trace in SSA form, then by replacing while statements with assume statements as shown in Tab. 1. Finally, quantifier-free formulæ encoding the behavior of the statements are generated. Table 1. Checking the trace for feasibility. Step Line Original Statement Renamed Statement Formula 1 4 a[1]=9 a 1[1]=9 a 1 = store(a 0, 1, 9) 2 5 i=0 i 1=0 i 1 = while(a[i]!=9) assume(a 1[i 1]!=9) select(a 1, i 1) a[i]= 2*i a 2[i 1]=2*i 1 a 2 = store(a 1, i 1, 2 i 1) 5 8 i=i+1 i 2=i 1+1 i 2 = i while(a[i]!=9) assume(a 2[i 2]!=9) select(a 2, i 2) a[i]=2*i a 3[i 2]=2*i 2 a 3 = store(a 2, i 2, 2 i 2) 8 8 i=i+1 i 3=i 2+1 i 3 = i while(a[i]!=9) assume(!(a 3[i 3]!=9)) (select(a 3, i 3) 9) 10 8 assert(i<=1) assert(i 3<=1) (i 3 1) The resulting set of formulæ is then fed to an SMT solver. If it is found unsatisfiable (w.r.t. the union of the theory of arrays and the theory of bitvectors), then the trace is not executable in P. If it is found satisfiable, then we can conclude that the trace is also executable in P. In our example the set of formulæ (see rightmost column in Table 1) is unsatisfiable and the proof of unsatisfiability found by the SMT solver is the following: Q(i 2, a) select(a 2, i 2) 9 i 2 = i Q(i 1 + 1, a) select(a 2, i 1 + 1) 9 a 2 = store(a 1, i 1, 2 i 1) Q(i 1 + 1, a) select(store(a 1, i 1, 2 i 1), i 1 + 1) 9 (2) Q(i 1 + 1, a) (i = i 1? 2 i 1 : select(a 1, i 1 + 1)) 9 Q(i 1 + 1, a) select(a 1, i 1 + 1) 9 i 1 = 0 Q(1, a) select(a 1, 1) 9 a 1 = store(a 0, 1, 9) Q(1, a) select(store(a 0, 1, 9), 1) 9 (2) Q(1, a) (1 = 1? 9 : select(a 0, 1)) 9 Q(1, a) It is easy to see that the formulæ contributing to the proof are those associated with steps 1, 2, 4, 5, and 6. Moreover, the only term of the form select(a, e) occurring in these formulæ is select(a 2, i 2 ) (with i 2 = 1 given by the context). Thus, in order to rule out the above trace, we must refine P 0 by including the element of a at position 1. The resulting program, P 1, is obtained by replacing every expression of the form a[e] with the conditional expression ((e==1)?a 1 :U) and every assignment of the form a[e 1 ]=e 2 with the assignment a 1 =((e 1 ==1)?e 2 :a 1 ) where a 1 is a new variable of numeric type corresponding to the array element of index 1. The model checker can now conclude that node 0 cannot be reached in P 1 and from this it follows that it is not reachable in P as well.
13 3.3 Experimental Results The procedure presented in Sect. 3.2 has been implemented in the eureka tool [ABC + 07]. We have tested eureka against a number of programs that involve reasoning on both arithmetic and arrays and thus allow to thoroughly assess the effectiveness and the scalability properties of the tool. On the same problems we have tested two well-known software model checkers based on predicate abstraction, namely BLAST and SATABS. All problems consist of a family of programs parametric in a positive integer N. The size of the arrays occurring in the programs and/or the number of iterations carried out by the loops increase as N increases. Thus the higher is the value of N, the bigger is the search space to be analyzed. Table 2. Experimental results. Safe instances Benchmark eureka BLAST SATABS total refined/total N time array elems N total ref. total time N time time string copy /2N Incorrect string compare /2N Incorrect gray code /28 Incorrect Inconclusive partition /N Incorrect Inconclusive bubble sort N/N Incorrect insertion sort N/N Incorrect selection sort N/N Incorrect Unsafe Instances Benchmark eureka BLAST SATABS total refined/total total N time array elems N time N time ref. total time string copy /2N string compare /2N gray code / Inconclusive partition /N bubble sort /N insertion sort /N selection sort /N The results in Table 2 refers to safe and unsafe (i.e. with a bug injected) instances of the above benchmarks. Each entry shows the greatest instance the tools are able to analyze and the time in seconds. Also, we give the time taken by the refinement phase of SATABS, the number of array elements found by eureka during the refinement phase, and the sum of the sizes of the arrays involved in the programs. Numbers with indicate that the tool can analyze greater instances than the one shown.
14 The analysis of linear programs with arrays is obtained by letting each tool deal with arrays in its own way: eureka abstracts and refines them w.r.t. array indexes, SATABS models them faithfully as adjacent sequences of variables, and BLAST applies some abstraction techniques. (Expressions of the for a[i] and a[i + r], as well as (a + i) and (a + i + r), with r > 0 are indistinguishable for BLAST [HJMS02].) As shown in Table 2, on most safe problems BLAST reports an incorrect answer, that is, it concludes that the program is unsafe when it is safe instead. On unsafe instances BLAST exhibits a better behavior than on safe ones, but still it exhibits scalability problems. SATABS employs a SAT solver in the abstraction and refinement phases, thus allowing a precise encoding of pointer arithmetic, bit-level constructs, etc. Table 2 reveals (as expected) that SATABS does not output false positives nor negatives, and that scalability is often an issue. The results of the experiments demonstrate the great effort required by the refinement phase despite the efficiency of current SAT solvers. The experimental results confirm the effectiveness of the array abstraction and reveal the difficulties of the approaches based on predicate abstraction when dealing with programs featuring a tight interplay between arithmetic and array manipulation. 4 Related Work Bultan, Gerber, and Pugh are probably among the first to investigate model checking of infinite-state systems. In [BGP99] they propose a model checking technique for concurrent systems where transition systems are specified using Presburger formulæ over the integers. The systems are formalized in an ad-hoc event-action input language which no provision for arrays. Termination of the procedure process is ensured by means of widening techniques [CC77]. Besides BLAST and SATABS, which we analyzed in the previous sections, a number of other tools based on predicate abstraction have been developed. The early SLAM project 1 has now given raise to the Static Driver Verifier tool 2. F-Soft [ISGG05] is a model checker for C programs developed at NEC Labs America. F-Soft treats pointers and arrays precisely, but this is done by fully expanding arrays and using an explicit representation of the internal memory. Since F-Soft is not publicly available no experimental comparison has been possible. The approach proposed in [CR06] reduces the problem of finding execution paths of finite length that violate some given properties to a Constraint Satisfaction Problem (CSP). This is done by building a boolean constraint system whose solutions correspond to the execution paths of the control-flow graph of the program. A SAT solver is then used to enumerate the execution paths. For each execution path found by the SAT solver a constraint system encoding the reachability of an error statement is built and fed to a constraint solver for finite 1 See 2 See
15 domains. The approach is thus clearly exponential in the number of execution paths of the control-flow graph of the program. Flanagan [Fla04] provides an in-depth analysis of the connection between Constraint Logic Programs (CLPs), imperative, and object oriented programs. CLPs are embedded in the CEGAR paradigm in order to combine and unify theorem proving (performed with CLP over a numeric domain) and model checking of boolean programs (performed using CLP over the booleans). However, to the best of our knowledge, no implementation is publicly available. ESC/Java [FLL + 02] analyzes user-annotated Java programs by generating verification conditions (representing the initial states from which no execution can lead to a violation of the given properties) which are then checked with the Simplify theorem prover [DNS03]. Since the generation of the verification conditions is an undecidable problem, several heuristics are used to drive this activity, but this may lead the tool to report unsound results. 5 Conclusions SMT solvers are a key technology for the development of effective software model checkers. In this paper I have shown that by leveraging the strengths of SMT solvers it is possible to build software model checkers that outperform state-ofthe-art tools based on OBDDs and SAT solvers. Acknowledgments I am indebted to Jacopo Mantovani, Lorenzo Platania, and Massimo Benerecetti for their collaboration on the development of the software model checking techniques presented in the paper. Most of the work I have reported here would not have been possible without their contribution. I am also grateful to Dario Carotenuto and Pasquale Spica for their help in the development of the eureka tool. This work was partially supported by the PRIN Project no E5KM8 Integrating automated reasoning in model checking: towards push-button formal verification of large-scale and infinite-state systems funded by the Italian Ministry of University and Research. References [ABC + 07] Alessandro Armando, Massimo Benerecetti, Dario Carotenuto, Jacopo Mantovani, and Pasquale Spica. The EUREKA tool for software model checking. In R. E. Kurt Stirewalt, Alexander Egyed, and Bernd Fischer, editors, ASE, pages ACM, [ABM07] Alessandro Armando, Massimo Benerecetti, and Jacopo Mantovani. Abstraction refinement of linear programs with arrays. In TACAS, volume 4424 of LNCS, Braga, Portugal, Springer.
16 [ACM04] Alessandro Armando, Claudio Castellini, and Jacopo Mantovani. Software model checking using linear constraints. In ICFEM 04, volume 3308 of LNCS, Seattle, USA, Springer. [AMP06] Alessandro Armando, Jacopo Mantovani, and Lorenzo Platania. Bounded Model Checking of Software using SMT Solvers instead of SAT Solvers. In SPIN, volume 3925 of LNCS, Vienna, Austria, Springer. [AMP09] Alessandro Armando, Jacopo Mantovani, and Lorenzo Platania. Bounded Model Checking of Software using SMT Solvers instead of SAT Solvers. International Journal on Software Tools for Technology Transfer (STTT), 11(1):69 83, [BB04] Clark Barrett and Sergey Berezin. CVC Lite: A new implementation of the cooperating validity checker. In CAV, volume 3114, pages , Boston, Springer. [BBC + 06] Thomas Ball, Ella Bounimova, Byron Cook, Vladimir Levin, Jakob Lichtenberg, Con McGarvey, Bohus Ondrusek, Sriram K. Rajamani, and Abdullah Ustuner. Thorough static analysis of device drivers. In EuroSys 06: Proceedings of the 2006 EuroSys conference, pages 73 85, New York, NY, USA, ACM Press. [Bel58] Richard Ernest Bellman. On a Routing Problem. Quarterly of applied mathematics, 16:87 90, [BGP99] Tevfik Bultan, Richard Gerber, and William Pugh. Model-checking concurrent systems with unbounded integer variables: symbolic representations, approximations, and experimental results. ACM Transactions on Programming Languages and Systems, 21(4): , [Bla05] Paul E. Black. Gray code, in dictionary of algorithms and data structures. See [BR00] Thomas Ball and Sriram K. Rajamani. Bebop: A symbolic model checker for boolean programs. In Klaus Havelund, John Penix, and Willem Visser, editors, SPIN, volume 1885 of Lecture Notes in Computer Science, pages Springer, [BR01] Thomas Ball and Sriram K. Rajamani. Automatically validating temporal safety properties of interfaces. In Proc. of SPIN, pages , Toronto, [CC77] Canada, Springer. Patrick Cousot and Radhia Cousot. Abstract interpretation: A unified lattice model for static analysis of programs by construction or approximation of fixpoints. In POPL, pages , Los Angeles, USA, ACM. [CFR + 89] Ron Cytron, Jeanne Ferrante, Barry K. Rosen, Mark N. Wegman, and F. Kenneth Zadeck. An efficient method of computing static single assignment form. In Proceedings of POPL (ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages), pages ACM, [CKSY05] Edmund Clarke, Daniel Kroening, Natasha Sharygina, and Karen Yorav. SATABS: SAT-based predicate abstraction for ANSI-C. In TACAS, volume 3440 of LNCS, pages 570 4, Edinburgh, UK, Springer. [Cla00] Edmund Clarke. Model Checking. MIT Press, Boston, USA, January [CR06] Hélène Collavizza and Michel Rueher. Exploration of the capabilities of constraint programming for software verification. In TACAS, volume 3920 of LNCS, pages , Vienna, Austria, Springer. [DNS03] [Fla04] D. L. Detlefs, G. Nelson, and J. B. Saxe. Simplify: a Theorem Prover for Program Checking. Technical Report 148, HP Labs, Cormac Flanagan. Software model checking via iterative abstraction refinement of constraint logic queries. CP+CV 04, 2004.
17 [FLL + 02] Cormac Flanagan, K. Rustan M. Leino, Mark Lillibridge, Greg Nelson, James B. Saxe, and Raymie Stata. Extended static checking for java. In PLDI 02: Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation, pages , New York, NY, USA, ACM Press. [Gat02] Bill Gates. Keynote address at WinHEC 02, Available at /04-18winhec.aspx. [HJMS02] Thomas A. Henzinger, Ranjit Jhala, Rupak Majumdar, and Gregoire Sutre. Lazy abstraction. In POPL, pages 58 70, Portland, USA, ACM. [ISGG05] Franco Ivanicic, Ilya Shlyakhter, Aarti Gupta, and Malay K. Ganai. Model checking c programs using f-soft. In ICCD 05: Proceedings of the 2005 International Conference on Computer Design, pages , Washington, DC, USA, IEEE Computer Society. [KCY03] Daniel Kroening, Edmund Clarke, and Karen Yorav. Behavioral consistency of C and Verilog programs using bounded model checking. In Proc. of DAC [Knu97] 2003, pages , Anaheim, USA, ACM Press. Donald Knuth. The Art of Computer Programming, Volume 3: Sorting and Searching, volume 3. Addison-Wesley, [Seb07] Roberto Sebastiani. Lazy satisability modulo theories. JSAT, 3(3-4): , 2007.
InvGen: An Efficient Invariant Generator
InvGen: An Efficient Invariant Generator Ashutosh Gupta and Andrey Rybalchenko Max Planck Institute for Software Systems (MPI-SWS) Abstract. In this paper we present InvGen, an automatic linear arithmetic
Model Checking: An Introduction
Announcements Model Checking: An Introduction Meeting 2 Office hours M 1:30pm-2:30pm W 5:30pm-6:30pm (after class) and by appointment ECOT 621 Moodle problems? Fundamentals of Programming Languages CSCI
µz An Efficient Engine for Fixed points with Constraints
µz An Efficient Engine for Fixed points with Constraints Kryštof Hoder, Nikolaj Bjørner, and Leonardo de Moura Manchester University and Microsoft Research Abstract. The µz tool is a scalable, efficient
Static Program Transformations for Efficient Software Model Checking
Static Program Transformations for Efficient Software Model Checking Shobha Vasudevan Jacob Abraham The University of Texas at Austin Dependable Systems Large and complex systems Software faults are major
Formal Verification by Model Checking
Formal Verification by Model Checking Natasha Sharygina Carnegie Mellon University Guest Lectures at the Analysis of Software Artifacts Class, Spring 2005 1 Outline Lecture 1: Overview of Model Checking
Software Verification: Infinite-State Model Checking and Static Program
Software Verification: Infinite-State Model Checking and Static Program Analysis Dagstuhl Seminar 06081 February 19 24, 2006 Parosh Abdulla 1, Ahmed Bouajjani 2, and Markus Müller-Olm 3 1 Uppsala Universitet,
Chair of Software Engineering. Software Verification. Assertion Inference. Carlo A. Furia
Chair of Software Engineering Software Verification Assertion Inference Carlo A. Furia Proving Programs Automatically The Program Verification problem: Given: a program P and a specification S = [Pre,
The Course. http://www.cse.unsw.edu.au/~cs3153/
The Course http://www.cse.unsw.edu.au/~cs3153/ Lecturers Dr Peter Höfner NICTA L5 building Prof Rob van Glabbeek NICTA L5 building Dr Ralf Huuck NICTA ATP building 2 Plan/Schedule (1) Where and When Tuesday,
How To Develop A Static Analysis System For Large Programs
Towards the Industrial Scale Development of Custom Static Analyzers John Anton, Eric Bush, Allen Goldberg, Klaus Havelund, Doug Smith, Arnaud Venet Kestrel Technology LLC 4984 El Camino Real #230 Los Altos,
The software model checker BLAST
Int J Softw Tools Technol Transfer (2007) 9:505 525 DOI 10.1007/s10009-007-0044-z SPECIAL SECTION FASE 04/05 The software model checker BLAST Applications to software engineering Dirk Beyer Thomas A. Henzinger
Model Checking of Software
Model Checking of Software Patrice Godefroid Bell Laboratories, Lucent Technologies SpecNCheck Page 1 August 2001 A Brief History of Model Checking Prehistory: transformational programs and theorem proving
Software safety - DEF-STAN 00-55
Software safety - DEF-STAN 00-55 Where safety is dependent on the safety related software (SRS) fully meeting its requirements, demonstrating safety is equivalent to demonstrating correctness with respect
Scalable Automated Symbolic Analysis of Administrative Role-Based Access Control Policies by SMT solving
Scalable Automated Symbolic Analysis of Administrative Role-Based Access Control Policies by SMT solving Alessandro Armando 1,2 and Silvio Ranise 2, 1 DIST, Università degli Studi di Genova, Italia 2 Security
FoREnSiC An Automatic Debugging Environment for C Programs
FoREnSiC An Automatic Debugging Environment for C Programs Roderick Bloem 1, Rolf Drechsler 2, Görschwin Fey 2, Alexander Finder 2, Georg Hofferek 1, Robert Könighofer 1, Jaan Raik 3, Urmas Repinski 3,
Regression Verification: Status Report
Regression Verification: Status Report Presentation by Dennis Felsing within the Projektgruppe Formale Methoden der Softwareentwicklung 2013-12-11 1/22 Introduction How to prevent regressions in software
Formal Verification Coverage: Computing the Coverage Gap between Temporal Specifications
Formal Verification Coverage: Computing the Coverage Gap between Temporal Specifications Sayantan Das Prasenjit Basu Ansuman Banerjee Pallab Dasgupta P.P. Chakrabarti Department of Computer Science & Engineering
GameTime: A Toolkit for Timing Analysis of Software
GameTime: A Toolkit for Timing Analysis of Software Sanjit A. Seshia and Jonathan Kotker EECS Department, UC Berkeley {sseshia,jamhoot}@eecs.berkeley.edu Abstract. Timing analysis is a key step in the
A Static Analyzer for Large Safety-Critical Software. Considered Programs and Semantics. Automatic Program Verification by Abstract Interpretation
PLDI 03 A Static Analyzer for Large Safety-Critical Software B. Blanchet, P. Cousot, R. Cousot, J. Feret L. Mauborgne, A. Miné, D. Monniaux,. Rival CNRS École normale supérieure École polytechnique Paris
Testing LTL Formula Translation into Büchi Automata
Testing LTL Formula Translation into Büchi Automata Heikki Tauriainen and Keijo Heljanko Helsinki University of Technology, Laboratory for Theoretical Computer Science, P. O. Box 5400, FIN-02015 HUT, Finland
Formal Verification and Linear-time Model Checking
Formal Verification and Linear-time Model Checking Paul Jackson University of Edinburgh Automated Reasoning 21st and 24th October 2013 Why Automated Reasoning? Intellectually stimulating and challenging
Model Checking based Software Verification
Model Checking based Software Verification 18.5-2006 Keijo Heljanko [email protected] Department of Computer Science and Engineering Helsinki University of Technology http://www.tcs.tkk.fi/~kepa/ 1/24
Automated Theorem Proving - summary of lecture 1
Automated Theorem Proving - summary of lecture 1 1 Introduction Automated Theorem Proving (ATP) deals with the development of computer programs that show that some statement is a logical consequence of
http://aejm.ca Journal of Mathematics http://rema.ca Volume 1, Number 1, Summer 2006 pp. 69 86
Atlantic Electronic http://aejm.ca Journal of Mathematics http://rema.ca Volume 1, Number 1, Summer 2006 pp. 69 86 AUTOMATED RECOGNITION OF STUTTER INVARIANCE OF LTL FORMULAS Jeffrey Dallien 1 and Wendy
Random vs. Structure-Based Testing of Answer-Set Programs: An Experimental Comparison
Random vs. Structure-Based Testing of Answer-Set Programs: An Experimental Comparison Tomi Janhunen 1, Ilkka Niemelä 1, Johannes Oetsch 2, Jörg Pührer 2, and Hans Tompits 2 1 Aalto University, Department
AUTOMATED TEST GENERATION FOR SOFTWARE COMPONENTS
TKK Reports in Information and Computer Science Espoo 2009 TKK-ICS-R26 AUTOMATED TEST GENERATION FOR SOFTWARE COMPONENTS Kari Kähkönen ABTEKNILLINEN KORKEAKOULU TEKNISKA HÖGSKOLAN HELSINKI UNIVERSITY OF
Thomas Jefferson High School for Science and Technology Program of Studies Foundations of Computer Science. Unit of Study / Textbook Correlation
Thomas Jefferson High School for Science and Technology Program of Studies Foundations of Computer Science updated 03/08/2012 Unit 1: JKarel 8 weeks http://www.fcps.edu/is/pos/documents/hs/compsci.htm
npsolver A SAT Based Solver for Optimization Problems
npsolver A SAT Based Solver for Optimization Problems Norbert Manthey and Peter Steinke Knowledge Representation and Reasoning Group Technische Universität Dresden, 01062 Dresden, Germany [email protected]
Reasoning About the Unknown in Static Analysis
Reasoning About the Unknown in Static Analysis Isil Dillig Thomas Dillig Alex Aiken {isil, tdillig, aiken}@cs.stanford.edu Computer Science Department Stanford University ABSTRACT Static program analysis
Software Modeling and Verification
Software Modeling and Verification Alessandro Aldini DiSBeF - Sezione STI University of Urbino Carlo Bo Italy 3-4 February 2015 Algorithmic verification Correctness problem Is the software/hardware system
UnitCheck: Unit Testing and Model Checking Combined
UnitCheck: Unit Testing and Model Checking Combined Michal Kebrt and Ondřej Šerý Charles University in Prague Malostranské náměstí 25 118 00 Prague 1 Czech Republic [email protected], [email protected]
Formal Verification Problems in a Bigdata World: Towards a Mighty Synergy
Dept. of Computer Science Formal Verification Problems in a Bigdata World: Towards a Mighty Synergy Matteo Camilli [email protected] http://camilli.di.unimi.it ICSE 2014 Hyderabad, India June 3,
Why? A central concept in Computer Science. Algorithms are ubiquitous.
Analysis of Algorithms: A Brief Introduction Why? A central concept in Computer Science. Algorithms are ubiquitous. Using the Internet (sending email, transferring files, use of search engines, online
Introduction to Static Analysis for Assurance
Introduction to Static Analysis for Assurance John Rushby Computer Science Laboratory SRI International Menlo Park CA USA John Rushby Static Analysis for Assurance: 1 Overview What is static analysis?
Rigorous Software Engineering Hoare Logic and Design by Contracts
Rigorous Software Engineering Hoare Logic and Design by Contracts Simão Melo de Sousa RELEASE (UBI), LIACC (Porto) Computer Science Department University of Beira Interior, Portugal 2010-2011 S. Melo de
A Model-driven Approach to Predictive Non Functional Analysis of Component-based Systems
A Model-driven Approach to Predictive Non Functional Analysis of Component-based Systems Vincenzo Grassi Università di Roma Tor Vergata, Italy Raffaela Mirandola {vgrassi, mirandola}@info.uniroma2.it Abstract.
Experimental Comparison of Concolic and Random Testing for Java Card Applets
Experimental Comparison of Concolic and Random Testing for Java Card Applets Kari Kähkönen, Roland Kindermann, Keijo Heljanko, and Ilkka Niemelä Aalto University, Department of Information and Computer
T-79.186 Reactive Systems: Introduction and Finite State Automata
T-79.186 Reactive Systems: Introduction and Finite State Automata Timo Latvala 14.1.2004 Reactive Systems: Introduction and Finite State Automata 1-1 Reactive Systems Reactive systems are a class of software
WESTMORELAND COUNTY PUBLIC SCHOOLS 2011 2012 Integrated Instructional Pacing Guide and Checklist Computer Math
Textbook Correlation WESTMORELAND COUNTY PUBLIC SCHOOLS 2011 2012 Integrated Instructional Pacing Guide and Checklist Computer Math Following Directions Unit FIRST QUARTER AND SECOND QUARTER Logic Unit
The Model Checker SPIN
The Model Checker SPIN Author: Gerard J. Holzmann Presented By: Maulik Patel Outline Introduction Structure Foundation Algorithms Memory management Example/Demo SPIN-Introduction Introduction SPIN (Simple(
Lecture Notes on Linear Search
Lecture Notes on Linear Search 15-122: Principles of Imperative Computation Frank Pfenning Lecture 5 January 29, 2013 1 Introduction One of the fundamental and recurring problems in computer science is
Updating Action Domain Descriptions
Updating Action Domain Descriptions Thomas Eiter, Esra Erdem, Michael Fink, and Ján Senko Institute of Information Systems, Vienna University of Technology, Vienna, Austria Email: (eiter esra michael jan)@kr.tuwien.ac.at
Formal Verification of Software
Formal Verification of Software Sabine Broda Department of Computer Science/FCUP 12 de Novembro de 2014 Sabine Broda (DCC-FCUP) Formal Verification of Software 12 de Novembro de 2014 1 / 26 Formal Verification
FPGA area allocation for parallel C applications
1 FPGA area allocation for parallel C applications Vlad-Mihai Sima, Elena Moscu Panainte, Koen Bertels Computer Engineering Faculty of Electrical Engineering, Mathematics and Computer Science Delft University
The ProB Animator and Model Checker for B
The ProB Animator and Model Checker for B A Tool Description Michael Leuschel and Michael Butler Department of Electronics and Computer Science University of Southampton Highfield, Southampton, SO17 1BJ,
A Propositional Dynamic Logic for CCS Programs
A Propositional Dynamic Logic for CCS Programs Mario R. F. Benevides and L. Menasché Schechter {mario,luis}@cos.ufrj.br Abstract This work presents a Propositional Dynamic Logic in which the programs are
ONLINE EXERCISE SYSTEM A Web-Based Tool for Administration and Automatic Correction of Exercises
ONLINE EXERCISE SYSTEM A Web-Based Tool for Administration and Automatic Correction of Exercises Daniel Baudisch, Manuel Gesell and Klaus Schneider Embedded Systems Group, University of Kaiserslautern,
Table-based Software Designs: Bounded Model Checking and Counterexample Tracking
Table-based Software Designs: Bounded Model Checking and Counterexample Tracking Noriyuki Katahira 1, Weiqiang Kong 1, Wanpeng Qian 1, Masahiko Watanabe 2, Tetsuro Katayama 3, Akira Fukuda 4 1 Fukuoka
Automated Program Behavior Analysis
Automated Program Behavior Analysis Stacy Prowell [email protected] March 2005 SQRL / SEI Motivation: Semantics Development: Most engineering designs are subjected to extensive analysis; software is
On the Modeling and Verification of Security-Aware and Process-Aware Information Systems
On the Modeling and Verification of Security-Aware and Process-Aware Information Systems 29 August 2011 What are workflows to us? Plans or schedules that map users or resources to tasks Such mappings may
Specification and Analysis of Contracts Lecture 1 Introduction
Specification and Analysis of Contracts Lecture 1 Introduction Gerardo Schneider [email protected] http://folk.uio.no/gerardo/ Department of Informatics, University of Oslo SEFM School, Oct. 27 - Nov.
StaRVOOrS: A Tool for Combined Static and Runtime Verification of Java
StaRVOOrS: A Tool for Combined Static and Runtime Verification of Java Jesús Mauricio Chimento 1, Wolfgang Ahrendt 1, Gordon J. Pace 2, and Gerardo Schneider 3 1 Chalmers University of Technology, Sweden.
Rigorous Software Development CSCI-GA 3033-009
Rigorous Software Development CSCI-GA 3033-009 Instructor: Thomas Wies Spring 2013 Lecture 11 Semantics of Programming Languages Denotational Semantics Meaning of a program is defined as the mathematical
Automata-based Verification - I
CS3172: Advanced Algorithms Automata-based Verification - I Howard Barringer Room KB2.20: email: [email protected] March 2006 Supporting and Background Material Copies of key slides (already
The Halting Problem is Undecidable
185 Corollary G = { M, w w L(M) } is not Turing-recognizable. Proof. = ERR, where ERR is the easy to decide language: ERR = { x { 0, 1 }* x does not have a prefix that is a valid code for a Turing machine
MEMORY MODEL SENSITIVE ANALYSIS OF CONCURRENT DATA TYPES. Sebastian Burckhardt. Computer and Information Science
MEMORY MODEL SENSITIVE ANALYSIS OF CONCURRENT DATA TYPES Sebastian Burckhardt A DISSERTATION in Computer and Information Science Presented to the Faculties of the University of Pennsylvania in Partial
Monitoring Metric First-order Temporal Properties
Monitoring Metric First-order Temporal Properties DAVID BASIN, FELIX KLAEDTKE, SAMUEL MÜLLER, and EUGEN ZĂLINESCU, ETH Zurich Runtime monitoring is a general approach to verifying system properties at
ML for the Working Programmer
ML for the Working Programmer 2nd edition Lawrence C. Paulson University of Cambridge CAMBRIDGE UNIVERSITY PRESS CONTENTS Preface to the Second Edition Preface xiii xv 1 Standard ML 1 Functional Programming
Software Testing & Analysis (F22ST3): Static Analysis Techniques 2. Andrew Ireland
Software Testing & Analysis (F22ST3) Static Analysis Techniques Andrew Ireland School of Mathematical and Computer Science Heriot-Watt University Edinburgh Software Testing & Analysis (F22ST3): Static
Model Checking II Temporal Logic Model Checking
1/32 Model Checking II Temporal Logic Model Checking Edmund M Clarke, Jr School of Computer Science Carnegie Mellon University Pittsburgh, PA 15213 2/32 Temporal Logic Model Checking Specification Language:
Using Patterns and Composite Propositions to Automate the Generation of Complex LTL
University of Texas at El Paso DigitalCommons@UTEP Departmental Technical Reports (CS) Department of Computer Science 8-1-2007 Using Patterns and Composite Propositions to Automate the Generation of Complex
Fabio Massacci Ida Siahaan
Inline-Reference Monitor Optimization using Automata Modulo Theory (AMT) Fabio Massacci Ida Siahaan 2009-09-24 STM09 - UNITN - Siahaan 1 Inlined Reference Monitors Security Policy Original Application
Model Checking LTL Properties over C Programs with Bounded Traces
Noname manuscript No. (will be inserted by the editor) Model Checking LTL Properties over C Programs with Bounded Traces Jeremy Morse 1, Lucas Cordeiro 2, Denis Nicole 1, Bernd Fischer 1,3 1 Electronics
Jieh Hsiang Department of Computer Science State University of New York Stony brook, NY 11794
ASSOCIATIVE-COMMUTATIVE REWRITING* Nachum Dershowitz University of Illinois Urbana, IL 61801 N. Alan Josephson University of Illinois Urbana, IL 01801 Jieh Hsiang State University of New York Stony brook,
Towards a Framework for Generating Tests to Satisfy Complex Code Coverage in Java Pathfinder
Towards a Framework for Generating Tests to Satisfy Complex Code Coverage in Java Pathfinder Matt Department of Computer Science and Engineering University of Minnesota [email protected] Abstract We present
Regular Expressions with Nested Levels of Back Referencing Form a Hierarchy
Regular Expressions with Nested Levels of Back Referencing Form a Hierarchy Kim S. Larsen Odense University Abstract For many years, regular expressions with back referencing have been used in a variety
Minimum Satisfying Assignments for SMT
Minimum Satisfying Assignments for SMT Isil Dillig 1, Thomas Dillig 1, Kenneth L. McMillan 2, and Alex Aiken 3 1 College of William & Mary 2 Microsoft Research 3 Stanford University Abstract. A minimum
The Classes P and NP
The Classes P and NP We now shift gears slightly and restrict our attention to the examination of two families of problems which are very important to computer scientists. These families constitute the
CS 3719 (Theory of Computation and Algorithms) Lecture 4
CS 3719 (Theory of Computation and Algorithms) Lecture 4 Antonina Kolokolova January 18, 2012 1 Undecidable languages 1.1 Church-Turing thesis Let s recap how it all started. In 1990, Hilbert stated a
A simple algorithm with no simple verication
A simple algorithm with no simple verication Laszlo Csirmaz Central European University Abstract The correctness of a simple sorting algorithm is resented, which algorithm is \evidently wrong" at the rst
MetaGame: An Animation Tool for Model-Checking Games
MetaGame: An Animation Tool for Model-Checking Games Markus Müller-Olm 1 and Haiseung Yoo 2 1 FernUniversität in Hagen, Fachbereich Informatik, LG PI 5 Universitätsstr. 1, 58097 Hagen, Germany [email protected]
Sequentializationtargetedto BoundedModel-Checkers
Sequentializationtargetedto BoundedModel-Checkers Salvatore La Torre Dipartimento di Informatica Università degli Studi di Salerno Sequentialization Code-to-code translation from a multithreaded program
Class notes Program Analysis course given by Prof. Mooly Sagiv Computer Science Department, Tel Aviv University second lecture 8/3/2007
Constant Propagation Class notes Program Analysis course given by Prof. Mooly Sagiv Computer Science Department, Tel Aviv University second lecture 8/3/2007 Osnat Minz and Mati Shomrat Introduction This
Ensuring Consistency in Long Running Transactions
Ensuring Consistency in Long Running Transactions UCLA Computer Science Dept. Technical Report TR-070011 Jeffrey Fischer Rupak Majumdar Department of Computer Science, University of California, Los Angeles
Introduction to Logic in Computer Science: Autumn 2006
Introduction to Logic in Computer Science: Autumn 2006 Ulle Endriss Institute for Logic, Language and Computation University of Amsterdam Ulle Endriss 1 Plan for Today Now that we have a basic understanding
Theory of Automated Reasoning An Introduction. Antti-Juhani Kaijanaho
Theory of Automated Reasoning An Introduction Antti-Juhani Kaijanaho Intended as compulsory reading for the Spring 2004 course on Automated Reasononing at Department of Mathematical Information Technology,
Fundamentals of Software Engineering
Fundamentals of Software Engineering Model Checking with Temporal Logic Ina Schaefer Institute for Software Systems Engineering TU Braunschweig, Germany Slides by Wolfgang Ahrendt, Richard Bubel, Reiner
Sources: On the Web: Slides will be available on:
C programming Introduction The basics of algorithms Structure of a C code, compilation step Constant, variable type, variable scope Expression and operators: assignment, arithmetic operators, comparison,
Competitive Analysis of On line Randomized Call Control in Cellular Networks
Competitive Analysis of On line Randomized Call Control in Cellular Networks Ioannis Caragiannis Christos Kaklamanis Evi Papaioannou Abstract In this paper we address an important communication issue arising
AMONG the various storage platforms available, flash
146 IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. 37, NO. 2, MARCH/APRIL 2011 A Comparative Study of Software Model Checkers as Unit Testing Tools: An Industrial Case Study Moonzoo Kim, Member, IEEE,
Algorithmic Software Verification
Algorithmic Software Verification (LTL Model Checking) Azadeh Farzan What is Verification Anyway? Proving (in a formal way) that program satisfies a specification written in a logical language. Formal
Attaining EDF Task Scheduling with O(1) Time Complexity
Attaining EDF Task Scheduling with O(1) Time Complexity Verber Domen University of Maribor, Faculty of Electrical Engineering and Computer Sciences, Maribor, Slovenia (e-mail: [email protected]) Abstract:
