(fraig-add-equiv-class-outputs classes copy aignet2) → (mv num-outs new-aignet2)
Function:
(defun fraig-add-equiv-class-outputs (classes copy aignet2) (declare (xargs :stobjs (classes copy aignet2))) (declare (xargs :guard (and (<= (classes-size classes) (lits-length copy)) (aignet-copies-in-bounds copy aignet2) (classes-wellformed classes)))) (let ((__function__ 'fraig-add-equiv-class-outputs)) (declare (ignorable __function__)) (b* ((orig-outs (num-outs aignet2)) ((local-stobjs mark) (mv outs aignet2 mark)) (mark (resize-bits (num-fanins aignet2) mark)) (mark (set-bit 0 1 mark)) (mark (aignet-mark-dfs-outs mark aignet2)) (size (classes-size classes)) (aignet2 (fraig-add-equiv-class-outputs-aux-1 0 size classes copy mark aignet2)) (aignet2 (fraig-add-equiv-class-outputs-aux-2 0 size classes copy mark aignet2))) (mv (- (num-outs aignet2) orig-outs) aignet2 mark))))
Theorem:
(defthm natp-of-fraig-add-equiv-class-outputs.num-outs (b* (((mv ?num-outs ?new-aignet2) (fraig-add-equiv-class-outputs classes copy aignet2))) (natp num-outs)) :rule-classes :rewrite)
Theorem:
(defthm aignet-extension-p-of-fraig-add-equiv-class-outputs (b* (((mv ?num-outs ?new-aignet2) (fraig-add-equiv-class-outputs classes copy aignet2))) (aignet-extension-p new-aignet2 aignet2)))
Theorem:
(defthm stype-count-of-fraig-add-equiv-class-outputs (b* (((mv ?num-outs ?new-aignet2) (fraig-add-equiv-class-outputs classes copy aignet2))) (implies (not (equal (stype-fix stype) :po)) (equal (stype-count stype new-aignet2) (stype-count stype aignet2)))))
Theorem:
(defthm num-outs-of-fraig-add-equiv-class-outputs (b* (((mv ?num-outs ?new-aignet2) (fraig-add-equiv-class-outputs classes copy aignet2))) (equal num-outs (- (stype-count :po new-aignet2) (stype-count :po aignet2)))))