A total ordering on ACL2 objects.
(<< x y) is a total ordering on ACL2 objects, defined in the
Matt Kaufmann and Pete Manolios. Adding a Total Order to ACL2. ACL2 Workshop, 2002.
Efficiency note. In the implementation, we generally use fast-<< and
fast-lexorder, which are probably faster alternatives to
Function:
(defun << (x y) (declare (xargs :guard t)) (mbe :logic (and (lexorder x y) (not (equal x y))) :exec (fast-<< x y)))
Theorem:
(defthm <<-irreflexive (not (<< x x)))
Theorem:
(defthm <<-transitive (implies (and (<< x y) (<< y z)) (<< x z)))
Theorem:
(defthm <<-asymmetric (implies (<< x y) (not (<< y x))))
Theorem:
(defthm <<-trichotomy (implies (and (not (<< y x)) (not (equal x y))) (<< x y)))
Theorem:
(defthm <<-implies-lexorder (implies (<< x y) (lexorder x y)))