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 -> sorts
val add_constant : sorts ->
symbol -> symbol -> unit
add_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 list
val max_constant_partition_size : sorts -> int
Sort_inference.constants_partition
.val print : sorts -> unit