(t-aig-tristate c a) constructs an FAIG representing a tri-state buffer whose inputs are known to be non-X.
(t-aig-tristate c a) → *
See also 4v-tristate.
Onset of output:
(not (or (and (not c.on) c.off) (and c.on (not c.off) (not a.on) a.off)))
Offset of output:
(not (or (and (not c.on) c.off) (and c.on (not c.off) a.off (not a.on))))
Function:
(defun t-aig-tristate (c a) (declare (xargs :guard t)) (let ((__function__ 't-aig-tristate)) (declare (ignorable __function__)) (b* (((faig a1 a0) a) ((faig c1 c0) c) (float (aig-and (aig-not c1) c0)) (set (aig-and c1 (aig-not c0))) (on (aig-and (aig-not a0) a1)) (off (aig-and (aig-not a1) a0))) (cons (aig-and (aig-not float) (aig-not (aig-and set off))) (aig-and (aig-not float) (aig-not (aig-and set on)))))))
Theorem:
(defthm faig-eval-of-t-aig-tristate (equal (faig-eval (t-aig-tristate c a) env) (t-aig-tristate (faig-eval c env) (faig-eval a env))))
Theorem:
(defthm faig-fix-equiv-implies-equal-t-aig-tristate-1 (implies (faig-fix-equiv c c-equiv) (equal (t-aig-tristate c a) (t-aig-tristate c-equiv a))) :rule-classes (:congruence))
Theorem:
(defthm faig-fix-equiv-implies-equal-t-aig-tristate-2 (implies (faig-fix-equiv a a-equiv) (equal (t-aig-tristate c a) (t-aig-tristate c a-equiv))) :rule-classes (:congruence))
Theorem:
(defthm faig-equiv-implies-faig-equiv-t-aig-tristate-2 (implies (faig-equiv a a-equiv) (faig-equiv (t-aig-tristate c a) (t-aig-tristate c a-equiv))) :rule-classes (:congruence))
Theorem:
(defthm faig-equiv-implies-faig-equiv-t-aig-tristate-1 (implies (faig-equiv c c-equiv) (faig-equiv (t-aig-tristate c a) (t-aig-tristate c-equiv a))) :rule-classes (:congruence))