Level 2, Subsumption Rules 1 and 2, Both Directions.
(aig-and-pass4 x y) → (mv status arg1 arg2)
Function:
(defun aig-and-pass4$inline (x y) (declare (xargs :guard t)) (let ((__function__ 'aig-and-pass4)) (declare (ignorable __function__)) (b* (((mv status arg1 arg2) (aig-and-pass4a y x)) ((unless (eq status :fail)) (mv status arg1 arg2))) (aig-and-pass4a x y))))
Theorem:
(defthm aig-and-pass4-correct (b* (((mv ?status ?arg1 ?arg2) (aig-and-pass4$inline x y))) (equal (and (aig-eval arg1 env) (aig-eval arg2 env)) (and (aig-eval x env) (aig-eval y env)))) :rule-classes nil)
Theorem:
(defthm aig-and-pass4-never-reduced (b* (((mv ?status ?arg1 ?arg2) (aig-and-pass4$inline x y))) (not (equal status :reduced))))
Theorem:
(defthm aig-and-pass4-subterm-convention (b* (((mv ?status ?arg1 ?arg2) (aig-and-pass4$inline x y))) (implies (equal status :subterm) (equal arg2 arg1))))
Theorem:
(defthm aig-and-pass4-normalize-status (b* (((mv ?status ?arg1 ?arg2) (aig-and-pass4$inline x y))) (implies (and (not (equal status :subterm)) (not (equal status :reduced))) (and (equal status :fail) (equal arg1 x) (equal arg2 y)))))