/vcfloat

VCFloat: A Unified Coq Framework for Verifying C Programs with Floating-Point Computations

Primary LanguageCoqOtherNOASSERTION

VCFloat: A Unified Coq Framework for Verifying C Programs with
Floating-Point Computations

Version 1.0 (2015-12-04)

Copyright (C) 2015 Reservoir Labs Inc.
All rights reserved.

patches/interval.patch is distributed under CeCILL-C, version 1.0. All
other files of this library are distributed under the GNU General
Public License, version 3.0, or (at your option) any later
version. See LICENSE for more legal information on use and
distribution of VCFloat.


For more technical information on VCFloat, you can read Sections 1 to
4 of our paper published at ACM/SIGPLAN Certified Programs and Proofs
(CPP) 2016:

Tahina Ramananandro, Paul Mountcastle, Benoit Meister and Richard
Lethin.
A Unified Coq Framework for Verifying C Programs with Floating-Point
Computations


Summary of directories (each of which corresponds to its logical path
with the same names where each path separator is replaced with . ):

  vcfloat/cverif: Verification of CompCert Clight programs (separation
  logic, etc.)

  vcfloat: VCFloat reasoning framework and tactic


Most interesting files:

  vcfloat/FPLang.v: VCFloat floating-point and annotated
  floating-point calculus

  vcfloat/FPLangOpt.v: further properties about VCFloat
     
  vcfloat/Clight2FP.v: C to unannotated VCFloat

  vcfloat/Clight2FPOpt.v: VCFloat annotation tactic

  vcfloat/Example.v: examples of Section 4 of the abovementioned CPP
  2016 paper (to be replayed interactively under ProofGeneral-Coq or
  CoqIDE)

VCFloat requires Coq 8.5beta2.


VCFloat depends on the following further external libraries, which are
automatically downloaded from their official sources and built during
VCFloat's building process:

- Reservoir Labs Inc. R-CoqLib version 1.0 (from Reservoir Labs'
  GitHub at http://github.com/reservoirlabs/rcoqlib )

- CompCert 2.4 (from AbsInt's GitHub at
  https://github.com/AbsInt/CompCert.git , commit 5dd15440). VCFloat
  contains a patch from this commit (patches/compcert.patch),
  distributed under the GNU General Public License, version 3.0 or (at
  your option) any later version.

- Ssreflect 1.5 (from its official website at
  http://ssr.msr-inria.inria.fr/FTP/ssreflect-1.5.coq85beta2.tar.gz )

- Mathematical Components (MathComp) 1.5 (from its official website at
  http://ssr.msr-inria.inria.fr/FTP/mathcomp-1.5.coq85beta2.tar.gz )

- Flocq 2.4.0 (from INRIA GForge at
  https://gforge.inria.fr/git/flocq/flocq.git , commit bcbcde24)

- Coq-Interval 2.0.0 (from INRIA GForge at
  https://scm.gforge.inria.fr/anonscm/git/coq-interval/coq-interval.git
  , commit 81f1f918). VCFloat contains a patch from this commit
  (patches/interval.patch), distributed under CeCILL-C, version 1.0.

See ACKS for copyright and licensing information about those external
libraries.


Usage: assuming that you already have a standard installation of Coq
8.5beta2, GNU make, GNU autoconf, GNU automake, and git.

  0. Fetch the external libraries mentioned above, by running the
     following automatic script:

     ./get_external_libs.sh

     You can provide any further options that you want passed to the
     `make' commands for Ssreflect and MathComp (e.g. -j)

  1. Configure, by:

     ./configure

  2. Build, by:

     make

  After building, you do not need to move the files anywhere else
  (and, by the way, `make install' does not work). The build system
  automatically generates a ./run-coqide.sh script to edit the sources
  with CoqIDE (if installed on your system), as well as local load
  path configuration files for Emacs+ProofGeneral (if installed on
  your system). If you want to compile code against VCFloat, you can
  have a look at the autogenerated `coqopts' file, to grab the load
  path options to pass to Coq and its relevant tools (coqc,
  coq_makefile, etc.)