(empty x) recognizes empty sets.
This function is like endp for lists, but it respects the non-set convention and always returns true for ill-formed sets.
Function:
(defun empty (x) (declare (xargs :guard (setp x))) (mbe :logic (or (null x) (not (setp x))) :exec (null x)))
Theorem:
(defthm empty-type (or (equal (empty x) t) (equal (empty x) nil)) :rule-classes :type-prescription)
Theorem:
(defthm nonempty-means-set (implies (not (empty x)) (setp x)))
Theorem:
(defthm empty-sfix-cancel (equal (empty (sfix x)) (empty x)))