We say the objects
This might seem kind of strange at first, but it has some nice congruence properties that aren't true of ordinary faig-equiv.
In particular, FAIG operations like faig-eval and faig-restrict generally treat any malformed FAIGs (i.e., atoms) as "X", that
is,
Unfortunately, this means that
So, (faig-onoff-equiv x y) corrects for this by insisting that
Function:
(defun faig-onoff-equiv (x y) (and (iff (consp x) (consp y)) (faig-equiv x y)))
Function:
(defun faig-onoff-equiv (x y) (and (iff (consp x) (consp y)) (faig-equiv x y)))
Theorem:
(defthm faig-onoff-equiv-is-an-equivalence (and (booleanp (faig-onoff-equiv x y)) (faig-onoff-equiv x x) (implies (faig-onoff-equiv x y) (faig-onoff-equiv y x)) (implies (and (faig-onoff-equiv x y) (faig-onoff-equiv y z)) (faig-onoff-equiv x z))) :rule-classes (:equivalence))
Theorem:
(defthm faig-onoff-equiv-refines-faig-equiv (implies (faig-onoff-equiv x y) (faig-equiv x y)) :rule-classes (:refinement))
Theorem:
(defthm faig-equiv-implies-faig-onoff-equiv-faig-fix-1 (implies (faig-equiv x x-equiv) (faig-onoff-equiv (faig-fix x) (faig-fix x-equiv))) :rule-classes (:congruence))
Theorem:
(defthm faig-onoff-equiv-implies-aig-equiv-car-1 (implies (faig-onoff-equiv x x-equiv) (aig-equiv (car x) (car x-equiv))) :rule-classes (:congruence))
Theorem:
(defthm faig-onoff-equiv-implies-aig-equiv-cdr-1 (implies (faig-onoff-equiv x x-equiv) (aig-equiv (cdr x) (cdr x-equiv))) :rule-classes (:congruence))