UpProver Demo
How to use UpProver for verifying revisions of C programs (version1.c and version2.c)
Bootstrapping phase
Run UpProver to perform the initial bootstrapping check of the program, namely version1.c (parameter --bootstrapping):
$ ./upprover --logic qflra --bootstrapping version1.c
When the program is changed (version2.c), perform the summary validation as follows. Note that version2.c is a parameter of --summary-validation.
$ ./upprover --logic qflra version1.c --summary-validation version2.c
This phase not only verifies the version2.c based on the result of the previous step, but also outputs a new __summaries file that is a repair of the previous summaries.
To guarantee the soundness of incremental check in UpProver Tree-Interpolation Property (TIP) must be preserved in interpolation algorithm. In our work in SAS'20 we proved that Farkas interpolation algorithm guarantees the TIP and we showed that Decomposing Farkas interpolation algorithm guarantees TIP under a certain condition. We also showed that TIP is not guaranteed by dual Farkas, dual decomposing Farkas, and a flexible variant of Farkas interpolation algorithm. For those algorithms that TIP is not preserved, we can check the TIP of the computed summaries after bootstrapping phase. To this end, run TIP-check option as follows:
$ ./upprover --logic qflra --TIP-check version1.c