This is a universal equivalence, introduced using def-universal-equiv.
Function:
(defun svex-envlists-equivalent (x y) (declare (xargs :non-executable t)) (declare (xargs :guard t)) (declare (xargs :non-executable t)) (prog2$ (acl2::throw-nonexec-error 'svex-envlists-equivalent (list x y)) (let ((n (svex-envlists-equivalent-witness x y))) (and (svex-envs-equivalent (nth n x) (nth n y)) (equal (len x) (len y))))))
Theorem:
(defthm svex-envlists-equivalent-necc (implies (not (and (svex-envs-equivalent (nth n x) (nth n y)) (equal (len x) (len y)))) (not (svex-envlists-equivalent x y))))
Theorem:
(defthm svex-envlists-equivalent-witnessing-witness-rule-correct (implies (not ((lambda (n y x) (not (if (svex-envs-equivalent (nth n x) (nth n y)) (equal (len x) (len y)) 'nil))) (svex-envlists-equivalent-witness x y) y x)) (svex-envlists-equivalent x y)) :rule-classes nil)
Theorem:
(defthm svex-envlists-equivalent-instancing-instance-rule-correct (implies (not (if (svex-envs-equivalent (nth n x) (nth n y)) (equal (len x) (len y)) 'nil)) (not (svex-envlists-equivalent x y))) :rule-classes nil)
Theorem:
(defthm svex-envlists-equivalent-is-an-equivalence (and (booleanp (svex-envlists-equivalent x y)) (svex-envlists-equivalent x x) (implies (svex-envlists-equivalent x y) (svex-envlists-equivalent y x)) (implies (and (svex-envlists-equivalent x y) (svex-envlists-equivalent y z)) (svex-envlists-equivalent x z))) :rule-classes (:equivalence))