Module Logtk.Ordering
Term Orderings
Type definitions
type term= Term.ttype tPartial ordering on terms
type ordering= t
val compare : t -> term -> term -> Comparison.tCompare two terms using the given ordering
val might_flip : t -> term -> term -> boolReturns false for two terms t and s if for any ground substitution θ the ordering of tθ vs sθ cannot change when appending arguments. This function is allowed to overapproximate, i.e. we get no information if it returns true.
val precedence : t -> Precedence.tCurrent precedence
val name : t -> stringName that describes this ordering
val clear_cache : t -> unit
include Interfaces.PRINT with type t := t
Ordering implementations
An ordering is a partial ordering on terms. Several implementations are simplification orderings (compatible with substitution, with the subterm property, and monotonic), some other are not.
val kbo : Precedence.t -> tKnuth-Bendix simplification ordering (Blanchette's lambda-free higher-order version)
val lfhokbo_arg_coeff : Precedence.t -> tBlanchette's lambda-free higher-order KPO with argument coefficients
val rpo6 : Precedence.t -> tEfficient implementation of RPO (recursive path ordering) (Blanchette's lambda-free higher-order version)
val none : tAll terms are incomparable (equality still works). Not a simplification ordering.
val subterm : tSubterm ordering. Not a simplification ordering.
Global table of Orders
val default_of_prec : Precedence.t -> tval by_name : string -> Precedence.t -> tChoose ordering by name among registered ones, or
- raises Invalid_argument
if no ordering with the given name are registered.
val names : unit -> string listval default_name : stringval register : string -> (Precedence.t -> t) -> unitRegister a new ordering, which can depend on a precedence. The name must not be registered already.
- raises Invalid_argument
if the name is already used.