Very basic binary sequence/property operators.
The only confusing thing here is the different kinds of implies and follows operators. Here's the mapping:
This is an ordinary defenum.
Function:
(defun vl-property-binaryop-p (x) (declare (xargs :guard t)) (or (eq x ':vl-prop-and) (eq x ':vl-prop-intersect) (eq x ':vl-prop-or) (eq x ':vl-prop-within) (eq x ':vl-prop-iff) (eq x ':vl-prop-until) (eq x ':vl-prop-suntil) (eq x ':vl-prop-untilwith) (eq x ':vl-prop-suntilwith) (eq x ':vl-prop-word-implies) (eq x ':vl-prop-thin-implies) (eq x ':vl-prop-fat-implies) (eq x ':vl-prop-thin-follows) (eq x ':vl-prop-fat-follows)))
Theorem: type-when-vl-property-binaryop-p
(defthm type-when-vl-property-binaryop-p (implies (vl-property-binaryop-p x) (if (symbolp x) (if (not (equal x 't)) (not (equal x 'nil)) 'nil) 'nil)) :rule-classes :compound-recognizer)