Fixing function for gatesimp bit structures.
(gatesimp-fix x) → fty::fixed
Function:
(defun gatesimp-fix (x) (declare (xargs :guard (gatesimp-p x))) (let ((__function__ 'gatesimp-fix)) (declare (ignorable __function__)) (mbe :logic (loghead 6 (logapp 1 (part-select x :width 1 :low 0) (logapp 3 (gatesimp-level-fix (part-select x :width 3 :low 1)) (gatesimp-xor-mode-fix (part-select x :width 2 :low 4))))) :exec x)))
Theorem:
(defthm gatesimp-p-of-gatesimp-fix (b* ((fty::fixed (gatesimp-fix x))) (gatesimp-p fty::fixed)) :rule-classes :rewrite)
Theorem:
(defthm gatesimp-fix-when-gatesimp-p (implies (gatesimp-p x) (equal (gatesimp-fix x) x)))
Function:
(defun gatesimp-equiv$inline (x acl2::y) (declare (xargs :guard (and (gatesimp-p x) (gatesimp-p acl2::y)))) (equal (gatesimp-fix x) (gatesimp-fix acl2::y)))
Theorem:
(defthm gatesimp-equiv-is-an-equivalence (and (booleanp (gatesimp-equiv x y)) (gatesimp-equiv x x) (implies (gatesimp-equiv x y) (gatesimp-equiv y x)) (implies (and (gatesimp-equiv x y) (gatesimp-equiv y z)) (gatesimp-equiv x z))) :rule-classes (:equivalence))
Theorem:
(defthm gatesimp-equiv-implies-equal-gatesimp-fix-1 (implies (gatesimp-equiv x x-equiv) (equal (gatesimp-fix x) (gatesimp-fix x-equiv))) :rule-classes (:congruence))
Theorem:
(defthm gatesimp-fix-under-gatesimp-equiv (gatesimp-equiv (gatesimp-fix x) x) :rule-classes (:rewrite :rewrite-quoted-constant))