Recognize function substitutions.
(fun-substp fsbs) → yes/no
A function substitution is an alist from function names to function names, with unique keys and with no trivial pairs.
Function:
(defun fun-substp (fsbs) (declare (xargs :guard t)) (let ((__function__ 'fun-substp)) (declare (ignorable __function__)) (and (symbol-symbol-alistp fsbs) (no-duplicatesp (alist-keys fsbs)) (no-trivial-pairsp fsbs))))
Theorem:
(defthm booleanp-of-fun-substp (b* ((yes/no (fun-substp fsbs))) (booleanp yes/no)) :rule-classes :rewrite)