Victor Wrapper User Manual
SPARK Team
1. Introduction
1.1. Disclaimer
1.2. Note on executables
2. Command-line usage
2.1. Synopsis
2.2. Description
Common Options
Options applicable only to Alt-Ergo
Options only available on GNU/Linux
2.3. Example
2.4. Output
3. Supported SMT Solvers
4. Integration with other SPARK Tools
4.1. Integration with SPARKSimp
4.2. Integration with POGS

1 Introduction

Victor is a tool to translate SPARK VCs, as generated by the Examiner, into SMT-LIB . (SMT stands for SAT Modulo Theory; SAT refers to the satisfiability problem; and SMT-LIB is a file format used to communicate with SMT solvers.) Since the tool is fairly general, it can translate into a number of different styles and features a very large set of command-line options which control the output in subtle ways. Victor can be used instead of, or alongside with, the Simplifier to discharge VCs. The latter is the recommended mode of operation.
In order to make using the tool easier to use and integrate well with the rest of the SPARK Toolset, we provide a wrapper around Victor. This program will call Victor with the appropriate arguments and its command-line semantics are deliberately similar to the Simplifier's.
It should be noted that, in theory, our Victor wrapper is not necessary and POGS will still recognise results produced by a manual invocation of Victor, provided that the correct options have been specified. However Victor wrapper makes Victor much easier to use for users familiar with the existing SPARK technology and does not require you to understand Victor's many command-line options.

1.1 Disclaimer

Currently we provide Victor as an experimental feature that is not guaranteed to work. Hence the other user manuals will not describe how it is integrated in detail yet; instead this document will capture how the other existing SPARK tools have been adapted to support Victor, in particular POGS and SPARKSimp. Furthermore, Victor is currently only available on GNU/Linux, Mac OSX and MS Windows.

1.2 Note on executables

The following executables will be of significance to victor wrapper:

2 Command-line usage

2.1 Synopsis

victor [OPTIONS] UNIT

2.2 Description

Calls vct with the appropriate arguments to attempt to discharge the VCs in the given unit. If a .siv file of the given unit already exists then this will be used and Victor will only attempt to discharge VCs which the Simplifier has been unable to. Otherwise, VCs will be read from the .vcg file.

2.2.1 Common Options

2.2.2 Options applicable only to Alt-Ergo

2.2.3 Options only available on GNU/Linux

2.3 Example

To use ViCToR to discharge VCs in code/scale.vcg, you would use (assuming that no .siv file exists):
$ victor code/scale
To use ViCToR to discharge VCs left over by the simplifier in code/scale.siv, you would use the same command-line as above.

2.4 Output

The victor wrapper produces no file output on its own, however Victor produces some files. For a given UNIT, these are:

3 Supported SMT Solvers

In theory any SMT solver which can discharge AUFNIRA theories may be used. However as each solver generally has some idiosyncrasies in their command-line invocation, we support only a few we have tested. (If you would like to see your favourite solver here, please get in touch with us.)
Solver License URL Platforms
Alt-Ergo Free/OS Win32, GNU/Linux, OSX
cvc3 Free/OS http://www.cs.nyu.edu/acsys/cvc3 Win32, GNU/Linux, OSX
Yices Proprietary http://yices.csl.sri.com Win32, GNU/Linux, OSX
Z3 Proprietary http://research.microsoft.com/projects/z3 Win32, GNU/Linux

Table 1: Supported SMT Solvers

4 Integration with other SPARK Tools

4.1 Integration with SPARKSimp

SPARKSimp can be used to call Victor wrapper for any units where the Simplifier was not able to discharge all VCs. The new options to SPARKSimp are:

4.2 Integration with POGS

POGS will look at any .vct and .vlg files it can find and will count any VCs discharged by Victor. The final table has been modified to include a "Victor" column.
Since Victor is still experimental the following will be noted in the POGS output:
No new command-line options have been added to POGS.