Four-valued semantics for
(4v-or a b) returns:
See 4v-unfloat for an explanation of the Z case.
Function:
(defun 4v-or$inline (a b) (declare (xargs :guard t)) (mbe :logic (4vcases a (t (4vt)) (f (4v-unfloat b)) (& (4vcases b (t (4vt)) (& (4vx))))) :exec (cond ((or (eq a (4vt)) (eq b (4vt))) (4vt)) ((and (eq a (4vf)) (eq b (4vf))) (4vf)) (t (4vx)))))
Theorem:
(defthm 4v-equiv-implies-equal-4v-or-2 (implies (4v-equiv b b-equiv) (equal (4v-or a b) (4v-or a b-equiv))) :rule-classes (:congruence))
Theorem:
(defthm 4v-equiv-implies-equal-4v-or-1 (implies (4v-equiv a a-equiv) (equal (4v-or a b) (4v-or a-equiv b))) :rule-classes (:congruence))