Overview of what's in here:

first: the top of the makefile; the sources are grouped by category
and ordered by abstraction layer.

Support code:
	util.ml - simple stuff that's not in the ocaml standard library
	types.ml - applications of library functors, some basic types
	log.ml - stuff for writing to a log file
	pos.ml - file positions, mostly not actually used, cloned from bintools
	modes.ml - operating modes and switches;
		new experimental modes should probably be switched on/off here
	dumptools.ml - for dumping(1) asts; cloned from bintools
	mintops.ml - master enumeration of machine integer ops
	ppoint.ml - program points, kinda sealed abstraction
	symbolic.ml - wrapper type for making things symbolic
	lextools.ml - support code for canned mllex lexers, from bintools

machine and logic level:
	mipsstate.ml - the state in the processor
	mips.ml - mips instructions and also the logic expressions about them
	enabled.ml - switches for turning state elements and instructions on
		and off at runtime
	insns.ml - stuff relating to the list of all supported instructions
	mipstools.ml - miscellaneous extra mips-level stuff
	syminsns.ml - generate and populate symbolic instructions
	printasm.ml - printer for mips instructions
	printlogic.ml - printer for mips.ml logic expressions
	(these files are not well organized)

program/snippet specs:
	spectree.ml - parsetree/ast for reading specifications
	speccomp.ml - compile spectree.ml specs into mips.ml logic expressions
	specparse.mly - parser for specifications
	speclex.mll - lexer for specifications

logic-level passes:
	typecheck.ml - type checker
	simplify.ml - simple optimizer for improving readability
	symexec.ml - symbolic execution for mips instructions

smt-level:
	smt.ml - AST for our SMT representation
	printsmt.ml - printer for smt
	smtopt.ml - simple optimizer for improving readability
	smtcheck.ml - SMT representation typechecker 

operational:
	solver.ml - translate from SMT representation to z3 API and run z3
	build.ml - build SMT from logic expressions
	synthcegis.ml - synthesis by CEGIS loop
	main.ml - top level driver.

	The interface to solver.ml is relatively clean.

	The interface to build.ml is an ad hoc mess; it's neither a
	general interface for building SMT from mips.ml logic
	expressions nor a set of operations framed so as to make the
	top level stuff in main.ml tidy. It should certainly be
	refactored if it obstructs anything.
