module FO:Swith type term = FOTerm.t
type term
type t
val create : ?size:int -> unit -> tsize : a hint for the initial size of the hashtable.val clear : t -> unitval push : t -> unitCongruence.S.pop will restore the congruence to its current state.val pop : t -> unitInvalid_argument if there is no checkpoint to restore to
(ie if no call to Congruence.S.push matches this call to Congruence.S.pop)val stack_size : t -> intCongruence.S.push that lead to the current state of the
congruence. Also, how many times Congruence.S.pop can be called.val find : t -> term -> termval iter : t ->
(mem:term -> repr:term -> unit) -> unitmem, the term itself, and repr,
the current representative of the term mem.
Invariant: when calling iter cc f, if f ~mem ~repr is called,
then find cc mem == repr holds.
val iter_roots : t -> (term -> unit) -> unitval mk_eq : t -> term -> term -> unitmk_eq congruence t1 t2 asserts that t1 = t2 belongs to
the congruenceval mk_less : t -> term -> term -> unitmk_less congruence t1 t2 asserts that t1 < t2 belongs to
the congruenceval is_eq : t -> term -> term -> boolval is_less : t -> term -> term -> boolval cycles : t -> boolmk_eq and mk_less entail a cycle in
the ordering (hence contradicting irreflexivity/transitivity of less)