* versat source code layout

- general utilities
lib_includes.g: includes all library files used
lib-lemma.g: lemmas about library functions

- specification
pf.g: defines propositional logic
parser.g: trusted parser that constructs list-based formulas
main.g: defines the solve and main functions

- basic run-time data types and lemmas
pf_util.g: helper definitions on top of pf.g and general lemmas
pf_util2.g: more lemmas related to pf.g, but used in specific modules
 - a target to prove together
cnf.g: run-time datatype for literals and clauses
cnf-lemma.g: general lemmas related to cnf.g
 - a target to prove together
cnf-lemma2.g: more specialized lemmas
 - a target to prove together
cnf-util.g: contructing array-based clauses from list-based clauses
 - there is a lemma to prove
debug.g: formatting functions for debug output

- main algorithm
assignment.g: defines current assignment and related run-time data
assignment-util.g: lemmas about assignment states
unitprop.g: clause database and unit-propagation using watched-literals
decision.g: decision heuristic
resolution.g: single resolution step
conflict.g: conflict analysis applying a series of resolutions
init.g: checks the input formula and sets up the initial clause database
solver.g: the main loop w/ conflict driven assertion and learning

- maintenance
check.g: type/proof-check all files above at once
force-check-lib.g: checks all included library files

- compilation
flags.g: compilation flags
compile.g: compiles versat

- unit tests
test-parse.g
test-conv.g
test-solver.g


* Type checking and compiling
To check the whole project, execute "guru check.g". It trustes library
files and only checks project files. This is faster than checking all
the files individually. It takes about 67 seconds on my computer.

To check individual files, execute "guru lib_includes.g <your file>".
lib_includes.g includes the library files used in the project, but
trustes them. Other project files included in <your file> are also
trusted. This is useful to check only modified files because check.g
takes too long.

To compile, execute "guru flags.g compile.g" or simply "make". Now,
flags.g file is not included in  main.g nor compile.g so that a
different flags file can be plugged in. "flags.g" skips
type/proof-checking. So, it's fast and gives fast feedback for
resource-typing. Make sure the whole project is type/proof-checked
before compiling.

Finally, you can check the included library files by executing "guru
force-check-lib.g" if you are skeptical about the guru's library.
