This directory contains code implementing a way to formally verify C
functions.  It contains the following files and subdirectories:

Subdirectories:
	cbit	Implements code to symbolically execute C
		functions at a bit level.  See cbit/README for more information
	cudd-X.Y.Z
		Version X.Y.Z of the CUDD BDD package from the University
		of Colorado.

Files:
	check.pl:
		Checks correctness of function implementation.  Must be
		run from parent directory.  Specifically looks for function(s)
		in bits.c and it/their counterpart(s) in tests.c, extracts
		the code from the files, and runs it through cbit.  If it
		finds a discrepancy, it generates a C program to compile
		and test the counterexample.

		Can give it multiple function names on the command line

		Usage: bddcheck/check.pl fun1 fun2 ...

	checkprogs.pl, extractfun.pl:
		Helper code used by check.pl

	all-functions.txt:
		Contains information about the argument restrictions for
		the different datalab functions.


Installing CUDD:
        These instructions are valid as of CUDD 3.0.0
	> cd cudd-X.Y.Z
	> ./configure --prefix=$(pwd)/..
	> make
	> make install

The Makefile in bddcheck/ should be updated to compile everything
automatically now, even when checked out from Git.

The files checked into source control (such as ./configure) are pulled
directly from the CUDD tarfile. There should be no need to invoke the
autoconf tools (automake, autoreconf, etc.), since only the package
distributor needs to do this.

However, files like Makefile will be autogenerated by ./configure and
therefore should not be checked in.


INSTALLATION NOTE for CUDD:

If you retrieved the code via git, then the file dates will be
incorrect.  This can lead to problems with autoconfiguration, and
possibly cause the make command to fail.  The quick work around is to
execute the command:

   touch Makefile.am Makefile.in aclocal.m4

before executing the make command.
