Kettle can parse input files in the LF or
CVC format.
The code for the main proving engine is in Engine. The engine is
given a thunk that when invoked will return the next input fragment. Input
fragments are things like a literal to prove in the current context, an
assumption to add to the current context, an indication to pop the last
assumption, etc. The data type for the input language is described in the
Input file. This architecture was essential for proving very large
sequences of literals, what would not all fit in memory at once.
The actual inputs are written in terms of logical expressions and formulas,
defined in Logic. Proofs of formulas can be written using the
language defined in Proof. The same module also defines a proof
checker that is enabled when you pass the --checkproofs argument on the
command line.
The Engine module is initialized with a list of satisfiability
procedures to use, and a proof generator. A satisfiability procedure consists
of one or more ML modules, one of which exports a structure of type
Satproc.entries. That structure contains entry points to the
main operations that a satisfiability procedure supports.
In order to add a satisfiability procedure you can take the following steps:
Choose a short name for it (say, ``foo''). Then change the
configure.ac file to add to the list of ``features'' the name of the
procedure. Add ``foo=yes'', if you want it to be enabled by default, or
``foo=no'' if you want it disabled by default. Make sure to run ``autoconf''
when you edit this file.
Create the ML files that implement the procedures. Say that you have the
files ``src/foo1.ml'', ``src/foodir/foo2.ml''. Say that the module foo1
contains the entry point.
Now you can include the module foo in the build (if not included by
default), by doing configure --with-foo.
If the module is included in the build, you can use the command line
options --enable and --disable to enable or disable it for a
particular run.
Also, before starting the engine, you must set the current UI to use. If you
pass the --gui argument to Kettle, you will use the GUI, otherwise you use
a text user interface.