(aignet-constprop-sweep-invar n invals regvals aignet copy aignet2) → *
Function:
(defun aignet-constprop-sweep-invar (n invals regvals aignet copy aignet2) (declare (xargs :stobjs (invals regvals aignet copy aignet2))) (declare (xargs :guard (natp n))) (declare (xargs :guard (and (<= n (num-fanins aignet)) (<= (num-ins aignet) (bits-length invals)) (<= (num-ins aignet2) (bits-length invals)) (<= (num-regs aignet) (bits-length regvals)) (<= (num-regs aignet2) (bits-length regvals)) (<= n (lits-length copy)) (aignet-copies-in-bounds copy aignet2)))) (let ((__function__ 'aignet-constprop-sweep-invar)) (declare (ignorable __function__)) (if (zp n) t (let ((n (1- n))) (and (equal (id-eval n invals regvals aignet) (lit-eval (get-lit n copy) invals regvals aignet2)) (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2))))))
Theorem:
(defthm aignet-constprop-sweep-invar-implies (implies (and (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2) (< (nfix m) (nfix n))) (equal (lit-eval (nth-lit m copy) invals regvals aignet2) (id-eval m invals regvals aignet))))
Theorem:
(defthm aignet-constprop-sweep-invar-implies-lit-eval-copy (implies (and (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2) (< (lit->var m) (nfix n))) (equal (lit-eval (lit-copy m copy) invals regvals aignet2) (lit-eval m invals regvals aignet))))
Theorem:
(defthm aignet-constprop-sweep-invar-of-aignet-extension (implies (and (aignet-extension-binding) (aignet-constprop-sweep-invar n invals regvals aignet copy orig) (aignet-copies-in-bounds copy orig)) (aignet-constprop-sweep-invar n invals regvals aignet copy new)))
Theorem:
(defthm aignet-constprop-sweep-invar-of-update-later (implies (and (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2) (<= (nfix n) (nfix m))) (aignet-constprop-sweep-invar n invals regvals aignet (update-nth-lit m lit copy) aignet2)))
Theorem:
(defthm aignet-constprop-sweep-invar-1 (implies (equal 0 (nth-lit 0 copy)) (aignet-constprop-sweep-invar 1 invals regvals aignet copy aignet2)))
Theorem:
(defthm aignet-constprop-sweep-invar-when-greater (implies (and (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2) (<= (nfix m) (nfix n))) (aignet-constprop-sweep-invar m invals regvals aignet copy aignet2)))
Theorem:
(defthm aignet-constprop-sweep-invar-of-nfix-n (equal (aignet-constprop-sweep-invar (nfix n) invals regvals aignet copy aignet2) (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2)))
Theorem:
(defthm aignet-constprop-sweep-invar-nat-equiv-congruence-on-n (implies (nat-equiv n n-equiv) (equal (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2) (aignet-constprop-sweep-invar n-equiv invals regvals aignet copy aignet2))) :rule-classes :congruence)
Theorem:
(defthm aignet-constprop-sweep-invar-of-node-list-fix-aignet (equal (aignet-constprop-sweep-invar n invals regvals (node-list-fix aignet) copy aignet2) (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2)))
Theorem:
(defthm aignet-constprop-sweep-invar-node-list-equiv-congruence-on-aignet (implies (node-list-equiv aignet aignet-equiv) (equal (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2) (aignet-constprop-sweep-invar n invals regvals aignet-equiv copy aignet2))) :rule-classes :congruence)
Theorem:
(defthm aignet-constprop-sweep-invar-of-node-list-fix-aignet2 (equal (aignet-constprop-sweep-invar n invals regvals aignet copy (node-list-fix aignet2)) (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2)))
Theorem:
(defthm aignet-constprop-sweep-invar-node-list-equiv-congruence-on-aignet2 (implies (node-list-equiv aignet2 aignet2-equiv) (equal (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2) (aignet-constprop-sweep-invar n invals regvals aignet copy aignet2-equiv))) :rule-classes :congruence)