This is a universal equivalence, introduced using ACL2::def-universal-equiv.
Function:
(defun bfr-env-equiv (x y) (declare (xargs :non-executable t)) (declare (xargs :guard t)) (prog2$ (acl2::throw-nonexec-error 'bfr-env-equiv (list x y)) (let ((v (bfr-env-equiv-witness x y))) (and (iff (bfr-lookup v x) (bfr-lookup v y))))))
Theorem:
(defthm bfr-env-equiv-necc (implies (not (and (iff (bfr-lookup v x) (bfr-lookup v y)))) (not (bfr-env-equiv x y))))
Theorem:
(defthm bfr-env-equiv-is-an-equivalence (and (booleanp (bfr-env-equiv x y)) (bfr-env-equiv x x) (implies (bfr-env-equiv x y) (bfr-env-equiv y x)) (implies (and (bfr-env-equiv x y) (bfr-env-equiv y z)) (bfr-env-equiv x z))) :rule-classes (:equivalence))