(constprop-core aignet aignet2 config) → new-aignet2
Function:
(defun constprop-core (aignet aignet2 config) (declare (xargs :stobjs (aignet aignet2))) (declare (xargs :guard (constprop-config-p config))) (let ((__function__ 'constprop-core)) (declare (ignorable __function__)) (b* (((unless (and (eql (num-outs aignet) 1) (eql (num-regs aignet) 0))) (b* ((aignet2 (aignet-raw-copy aignet aignet2))) (aignet-fix aignet2))) ((constprop-config config))) (constprop-iter config.iterations aignet config.gatesimp aignet2))))
Theorem:
(defthm stype-count-of-constprop-core (b* ((?new-aignet2 (constprop-core aignet aignet2 config))) (and (equal (stype-count :pi new-aignet2) (stype-count :pi aignet)) (equal (stype-count :reg new-aignet2) (stype-count :reg aignet)) (equal (stype-count :po new-aignet2) (stype-count :po aignet)))))
Theorem:
(defthm constprop-core-preserves-comb-equiv (b* ((?new-aignet2 (constprop-core aignet aignet2 config))) (comb-equiv new-aignet2 aignet)))
Theorem:
(defthm normalize-inputs-of-constprop-core (b* nil (implies (syntaxp (not (equal aignet2 ''nil))) (equal (constprop-core aignet aignet2 config) (let ((aignet2 nil)) (constprop-core aignet aignet2 config))))))
Theorem:
(defthm constprop-core-of-node-list-fix-aignet (equal (constprop-core (node-list-fix aignet) aignet2 config) (constprop-core aignet aignet2 config)))
Theorem:
(defthm constprop-core-node-list-equiv-congruence-on-aignet (implies (node-list-equiv aignet aignet-equiv) (equal (constprop-core aignet aignet2 config) (constprop-core aignet-equiv aignet2 config))) :rule-classes :congruence)
Theorem:
(defthm constprop-core-of-node-list-fix-aignet2 (equal (constprop-core aignet (node-list-fix aignet2) config) (constprop-core aignet aignet2 config)))
Theorem:
(defthm constprop-core-node-list-equiv-congruence-on-aignet2 (implies (node-list-equiv aignet2 aignet2-equiv) (equal (constprop-core aignet aignet2 config) (constprop-core aignet aignet2-equiv config))) :rule-classes :congruence)
Theorem:
(defthm constprop-core-of-constprop-config-fix-config (equal (constprop-core aignet aignet2 (constprop-config-fix config)) (constprop-core aignet aignet2 config)))
Theorem:
(defthm constprop-core-constprop-config-equiv-congruence-on-config (implies (constprop-config-equiv config config-equiv) (equal (constprop-core aignet aignet2 config) (constprop-core aignet aignet2 config-equiv))) :rule-classes :congruence)