This is a universal equivalence, introduced using def-universal-equiv.
Function:
(defun svex-envs-1mask-equiv (x y) (declare (xargs :non-executable t)) (declare (xargs :guard t)) (declare (xargs :non-executable t)) (prog2$ (acl2::throw-nonexec-error 'svex-envs-1mask-equiv (list x y)) (let ((k (svex-envs-1mask-equiv-witness x y))) (and (4vec-1mask-equiv (svex-env-lookup k x) (svex-env-lookup k y))))))
Theorem:
(defthm svex-envs-1mask-equiv-necc (implies (not (and (4vec-1mask-equiv (svex-env-lookup k x) (svex-env-lookup k y)))) (not (svex-envs-1mask-equiv x y))))
Theorem:
(defthm svex-envs-1mask-equiv-witnessing-witness-rule-correct (implies (not ((lambda (k y x) (not (4vec-1mask-equiv (svex-env-lookup k x) (svex-env-lookup k y)))) (svex-envs-1mask-equiv-witness x y) y x)) (svex-envs-1mask-equiv x y)) :rule-classes nil)
Theorem:
(defthm svex-envs-1mask-equiv-instancing-instance-rule-correct (implies (not (4vec-1mask-equiv (svex-env-lookup k x) (svex-env-lookup k y))) (not (svex-envs-1mask-equiv x y))) :rule-classes nil)
Theorem:
(defthm svex-envs-1mask-equiv-is-an-equivalence (and (booleanp (svex-envs-1mask-equiv x y)) (svex-envs-1mask-equiv x x) (implies (svex-envs-1mask-equiv x y) (svex-envs-1mask-equiv y x)) (implies (and (svex-envs-1mask-equiv x y) (svex-envs-1mask-equiv y z)) (svex-envs-1mask-equiv x z))) :rule-classes (:equivalence))