Automatically check programs for equivalence

llrêve

llrêve is an automated program equivalence verification tool. See the project homepage for a description of the approach.

Supported Language

The tool supports most of C99. Bit operations, with the exception of shifts, are not supported.

Marks

llrêve requires you to annotate your program with marks which represent synchronization points between the two programs. In most cases those synchronization points can simply be the loop header. You need to first declare the mark function using extern int __mark(int); and then place it at the points that you synchronize using the same number as argument in both programs. You can also associate multiple marks with the same point, take look at the example for the details on that.

Annotations

Either program may be annotated with relational specifications:

/*@ rel_in condition @*/
This clause can be used to define an alternative definition of the input equivalence relation. The clause has to be valid SMT and can contain the function arguments suffixed by $1_0 or $2_0 depending on which program they refer to. If this clause is ommitted, equality of all parameters is taken as input relation. An example is included.
/*@ rel_out condition @*/
This clause is the correspondant to the above for the output equivalence relation. If this clause is ommitted, equality of both result variables is taken as output relation. An example is included.

Available options

You can specify options using /*@ opt optionname [optval]@*/. Take a look at the example.
Name Description

Server performance

This service is currently run on a stock virtualized server that shares its underlying hardware with other services. It is therefore that the performance of rêve is unpredictable and may deviate from run to run. Moreover, each time you launch a query to the server a Java Virtual Machine (JVM) needs to be launched. For the experiments in the papers, we used the SMT solver Eldarica in a client-server-mode avoiding the JVM startup time. This is not possible on the server for technical reasons. The runtimes you experience may hence be considerably longer than in the paper.