Bitwise equality of 4vecs.
We return, following the boolean-convention,
This properly treats X and Z values as unknowns, i.e., whether or not an X/Z bit is equal to anything else, including another X/Z bit, is always unknown.
Function:
(defun 4vec-== (x y) (declare (xargs :guard (and (4vec-p x) (4vec-p y)))) (let ((__function__ '4vec-==)) (declare (ignorable __function__)) (3vec-== (3vec-fix x) (3vec-fix y))))
Theorem:
(defthm 4vec-p-of-4vec-== (b* ((equal (4vec-== x y))) (4vec-p equal)) :rule-classes :rewrite)
Theorem:
(defthm 4vec-==-of-3vec-fix-x (equal (4vec-== (3vec-fix x) y) (4vec-== x y)))
Theorem:
(defthm 4vec-==-3vec-equiv-congruence-on-x (implies (3vec-equiv x x-equiv) (equal (4vec-== x y) (4vec-== x-equiv y))) :rule-classes :congruence)
Theorem:
(defthm 4vec-==-of-3vec-fix-y (equal (4vec-== x (3vec-fix y)) (4vec-== x y)))
Theorem:
(defthm 4vec-==-3vec-equiv-congruence-on-y (implies (3vec-equiv y y-equiv) (equal (4vec-== x y) (4vec-== x y-equiv))) :rule-classes :congruence)