Fixing function for lhprobe/4vec type
(lhprobe/4vec-fix x) → new-x
Function:
(defun lhprobe/4vec-fix (x) (declare (xargs :guard (lhprobe/4vec-p x))) (let ((__function__ 'lhprobe/4vec-fix)) (declare (ignorable __function__)) (mbe :logic (if (eq (lhprobe/4vec-kind x) :4vec) (4vec-fix x) (lhprobe-fix x)) :exec x)))
Theorem:
(defthm lhprobe/4vec-p-of-lhprobe/4vec-fix (b* ((new-x (lhprobe/4vec-fix x))) (lhprobe/4vec-p new-x)) :rule-classes :rewrite)
Theorem:
(defthm lhprobe/4vec-fix-when-lhprobe/4vec-p (implies (lhprobe/4vec-p x) (equal (lhprobe/4vec-fix x) x)))
Function:
(defun lhprobe/4vec-equiv$inline (x y) (declare (xargs :guard (and (lhprobe/4vec-p x) (lhprobe/4vec-p y)))) (equal (lhprobe/4vec-fix x) (lhprobe/4vec-fix y)))
Theorem:
(defthm lhprobe/4vec-equiv-is-an-equivalence (and (booleanp (lhprobe/4vec-equiv x y)) (lhprobe/4vec-equiv x x) (implies (lhprobe/4vec-equiv x y) (lhprobe/4vec-equiv y x)) (implies (and (lhprobe/4vec-equiv x y) (lhprobe/4vec-equiv y z)) (lhprobe/4vec-equiv x z))) :rule-classes (:equivalence))
Theorem:
(defthm lhprobe/4vec-equiv-implies-equal-lhprobe/4vec-fix-1 (implies (lhprobe/4vec-equiv x x-equiv) (equal (lhprobe/4vec-fix x) (lhprobe/4vec-fix x-equiv))) :rule-classes (:congruence))
Theorem:
(defthm lhprobe/4vec-fix-under-lhprobe/4vec-equiv (lhprobe/4vec-equiv (lhprobe/4vec-fix x) x) :rule-classes (:rewrite :rewrite-quoted-constant))
Theorem:
(defthm lhprobe/4vec-fix-when-kind-is-4vec (implies (equal (lhprobe/4vec-kind x) :4vec) (equal (lhprobe/4vec-fix x) (4vec-fix x))))
Theorem:
(defthm lhprobe/4vec-fix-when-kind-is-lhprobe (implies (equal (lhprobe/4vec-kind x) :lhprobe) (equal (lhprobe/4vec-fix x) (lhprobe-fix x))))
Theorem:
(defthm lhprobe/4vec-kind-of-lhprobe/4vec-fix-x (equal (lhprobe/4vec-kind (lhprobe/4vec-fix x)) (lhprobe/4vec-kind x)))
Theorem:
(defthm lhprobe/4vec-kind-lhprobe/4vec-equiv-congruence-on-x (implies (lhprobe/4vec-equiv x x-equiv) (equal (lhprobe/4vec-kind x) (lhprobe/4vec-kind x-equiv))) :rule-classes :congruence)