CVCHOL is a proof translator that translates CVC3 theorems into HOL Light theorems. It is implemented in OCaml as an extension of HOL Light. Given a proof from CVC3, it constructs a corresponding proof in HOL Light. As of October 2008, it can translate proofs by CVC3 for most cases in the AUFLIA category of SMT LIB .
CVCHOL could be used as a proof checker for CVC3. CVCHOL provides a HOL Light command "cvc_prove_file". The command accepts a string of file name and calls CVC3 through C API. If CVC3 reports valid for the file, the proof is then translated into HOL Light. If the translation is successful, the result of translation, a theorem in HOL Light, could be seen as a certificate that the theorem from CVC3 is indeed valid.
CVCHOL could be used as a trusted external decision procedure for HOL Light. CVCHOL provides a HOL Light command "cvc_prove". "cvc_prove" accepts a HOL term "t" and returns a HOL Light theorem "|- t" if CVC3 is able to prove it valid and the proof translation is a success.
CVCHOL works with HOL Light. CVC3 and HOL Light are connected through the C interface of OCaml. To use CVCHOL, a new OCaml toplevel that combines CVC3 has to be built.
As of October 2008, the translator works with the latest CVC3. Before building a new Ocaml toplevel, please check CVC3 and HOL Light have been properly installed.
Please find the location of CVC3's static library file "libcvc3.a" and c_interface header file "c_interface.h". On my machine the two files are at "/home/yeting/cvc3_zaphod/lib/libcvc3.a" and "/home/yeting/cvc3_zaphod/src/include/c_interface.h" respectively.
If CVC3 is built with dynamic link enabled and a dynamic linked library is preferred, please find "libcvc3.so" and change the installation procedure accordingly.
1. Copy the tar file of CVCHOL into the directory where HOL Light resides. Unpack the source tar file. e.g.
tar -zxvf cvchol.tar.gz
cd cvchol
2. Call "make" to build a new Ocaml toplevel by specifying values for "CVC_INCLUDE_DIR" and "CVC_LIB". e.g.
make "CVC_LIB=/home/yeting/cvc3_zaphod/lib/libcvc3.a" "CVC_INCLUDE_DIR=/home/yeting/cvc3_zaphod/src/include"
An alternative is to call "make" by specifying "CVC_DIR". e.g.
make "CVC_DIR=/home/yeting/cvc3_zaphod"
A new OCaml toplevel named "cvc_hol" should be created.
3. Copy "cvc_hol" into the HOL Light directory. e.g.
cp cvc_hol ../
4. Copy "cvchol.ml" into the HOL Light directory. e.g.
cp cvchol.ml ../
To run CVCHOL
1. Go to the HOL Light directory
2. Run the new Ocaml toplevel "cvc_hol". e.g.
./cvc_hol
3. Launch HOL Light. e.g.
#use"hol.ml";;
4. Load CVCHOL by the following command:
#use"cvchol/cvchol.ml";;
CVCHOL provides two HOL Light commands.
cvc_prove : term -> thm = <fun>
cvc_prove_file : string -> thm = <fun>
1. Errors in building the new OCaml toplevel.
Please check installation of OCaml, HOL Light and CVC3. Make sure required files are there and their locations are shown in the Makefile.
2. Segmentation fault.
This usually means some bugs in the translator. Please contact people in CONTACTS and send a brief bug report.
3. Unsupported proof rules.
As of October 2008, CVCHOL should be able to handle most proof rules for arithmetic and arrays. Please contact people in CONTACTS if you need more proof rules.
Yeting Ge
Clark Barrett
The translator is developed under the leadership of Clark Barrett. Sean McLaughlin wrote the first version. Yeting Ge has been the developer since 2005. John Harrison gave many helpful advice on Hol light.