This is a universal equivalence, introduced using ACL2::def-universal-equiv.
Function:
(defun frames-equiv (x acl2::y) (declare (xargs :non-executable t)) (declare (xargs :guard t)) (prog2$ (acl2::throw-nonexec-error 'frames-equiv (list x acl2::y)) (mv-let (i j) (frames-equiv-witness x acl2::y) (and (bit-equiv (nth i (nth j (stobjs::2darr->rows x))) (nth i (nth j (stobjs::2darr->rows acl2::y))))))))
Theorem:
(defthm frames-equiv-necc (implies (not (and (bit-equiv (nth i (nth j (stobjs::2darr->rows x))) (nth i (nth j (stobjs::2darr->rows acl2::y)))))) (not (frames-equiv x acl2::y))))
Theorem:
(defthm frames-equiv-is-an-equivalence (and (booleanp (frames-equiv x y)) (frames-equiv x x) (implies (frames-equiv x y) (frames-equiv y x)) (implies (and (frames-equiv x y) (frames-equiv y z)) (frames-equiv x z))) :rule-classes (:equivalence))