module Sort_inference:infers sorts based on a clause setsig..end
Implements sort inference, see the paper New Techniques that Improve MACE-style Finite Model Finding by Koen Classen and Niklas Soerensson.
For an unsorted first-order clause set, the sorts of each function and predicate symbol (arguments and results) are first assumed to be different. Then sorts are collapsed, if their occurrences in the clauses require two sorts to be identical. For example,
Finite_domain).typesymbol =Symbol.symbol
typeclause =Term.clause
type sorts
val infer : print:bool -> clause list -> sortsval add_constant : sorts ->
symbol -> symbol -> unitadd_constant sorts constant existing
registers the new constant symbol.
Its sort is of the result sort of the symbol existing,
which must already be registerd.val constants_partition : sorts -> symbol list listval max_constant_partition_size : sorts -> intSort_inference.constants_partition.val print : sorts -> unit