(m-assum-n-output-observability m n aignet aignet2 config state) → (mv new-aignet2 new-state)
Function:
(defun m-assum-n-output-observability (m n aignet aignet2 config state) (declare (xargs :stobjs (aignet aignet2 state))) (declare (xargs :guard (and (natp m) (natp n) (m-assum-n-output-observability-config-p config)))) (declare (ignorable n)) (declare (xargs :guard (<= (+ m n) (num-outs aignet)))) (let ((__function__ 'm-assum-n-output-observability)) (declare (ignorable __function__)) (b* (((local-stobjs copy strash) (mv copy strash aignet2 state)) ((mv copy aignet2) (init-copy-comb aignet copy aignet2)) (m (mbe :logic (min (nfix m) (num-outs aignet)) :exec m)) (hyps (output-lit-range 0 m aignet)) (concls (output-lit-range m (- (num-outs aignet) m) aignet)) ((mv ?hyp new-hyps new-concls copy strash aignet2 state) (observability-fix-hyps/concls hyps concls aignet copy (m-assum-n-output-observability-config->gatesimp config) strash aignet2 state)) (aignet2 (aignet-add-outs new-hyps aignet2)) (aignet2 (aignet-add-outs new-concls aignet2))) (mv copy strash aignet2 state))))
Theorem:
(defthm normalize-inputs-of-m-assum-n-output-observability (b* nil (implies (syntaxp (not (equal aignet2 ''nil))) (equal (m-assum-n-output-observability m n aignet aignet2 config state) (let ((aignet2 nil)) (m-assum-n-output-observability m n aignet aignet2 config state))))))
Theorem:
(defthm num-ins-of-m-assum-n-output-observability (b* (((mv ?new-aignet2 ?new-state) (m-assum-n-output-observability m n aignet aignet2 config state))) (equal (stype-count :pi new-aignet2) (stype-count :pi aignet))))
Theorem:
(defthm num-regs-of-m-assum-n-output-observability (b* (((mv ?new-aignet2 ?new-state) (m-assum-n-output-observability m n aignet aignet2 config state))) (equal (stype-count :reg new-aignet2) (stype-count :reg aignet))))
Theorem:
(defthm num-outs-of-m-assum-n-output-observability (b* (((mv ?new-aignet2 ?new-state) (m-assum-n-output-observability m n aignet aignet2 config state))) (equal (stype-count :po new-aignet2) (stype-count :po aignet))))
Theorem:
(defthm m-assum-n-output-observability-eval-assumptions (b* (((mv ?new-aignet2 ?new-state) (m-assum-n-output-observability m n aignet aignet2 config state))) (implies (< (nfix i) (nfix m)) (equal (output-eval i invals regvals new-aignet2) (output-eval i invals regvals aignet)))))
Theorem:
(defthm m-assum-n-output-observability-eval-conclusion (b* (((mv ?new-aignet2 ?new-state) (m-assum-n-output-observability m n aignet aignet2 config state))) (implies (and (< (nfix i) (+ (nfix m) (nfix n))) (equal (conjoin-output-range 0 m invals regvals aignet) 1)) (equal (output-eval i invals regvals new-aignet2) (output-eval i invals regvals aignet)))))
Theorem:
(defthm w-state-of-m-assum-n-output-observability (b* (((mv ?new-aignet2 ?new-state) (m-assum-n-output-observability m n aignet aignet2 config state))) (equal (w new-state) (w state))))
Theorem:
(defthm list-of-outputs-of-m-assum-n-output-observability (b* (((mv ?new-aignet2 ?new-state) (m-assum-n-output-observability m n aignet aignet2 config state))) (equal (list new-aignet2 new-state) (m-assum-n-output-observability m n aignet aignet2 config state))))
Theorem:
(defthm m-assum-n-output-observability-of-nfix-m (equal (m-assum-n-output-observability (nfix m) n aignet aignet2 config state) (m-assum-n-output-observability m n aignet aignet2 config state)))
Theorem:
(defthm m-assum-n-output-observability-nat-equiv-congruence-on-m (implies (nat-equiv m m-equiv) (equal (m-assum-n-output-observability m n aignet aignet2 config state) (m-assum-n-output-observability m-equiv n aignet aignet2 config state))) :rule-classes :congruence)
Theorem:
(defthm m-assum-n-output-observability-of-nfix-n (equal (m-assum-n-output-observability m (nfix n) aignet aignet2 config state) (m-assum-n-output-observability m n aignet aignet2 config state)))
Theorem:
(defthm m-assum-n-output-observability-nat-equiv-congruence-on-n (implies (nat-equiv n n-equiv) (equal (m-assum-n-output-observability m n aignet aignet2 config state) (m-assum-n-output-observability m n-equiv aignet aignet2 config state))) :rule-classes :congruence)
Theorem:
(defthm m-assum-n-output-observability-of-node-list-fix-aignet (equal (m-assum-n-output-observability m n (node-list-fix aignet) aignet2 config state) (m-assum-n-output-observability m n aignet aignet2 config state)))
Theorem:
(defthm m-assum-n-output-observability-node-list-equiv-congruence-on-aignet (implies (node-list-equiv aignet aignet-equiv) (equal (m-assum-n-output-observability m n aignet aignet2 config state) (m-assum-n-output-observability m n aignet-equiv aignet2 config state))) :rule-classes :congruence)
Theorem:
(defthm m-assum-n-output-observability-of-node-list-fix-aignet2 (equal (m-assum-n-output-observability m n aignet (node-list-fix aignet2) config state) (m-assum-n-output-observability m n aignet aignet2 config state)))
Theorem:
(defthm m-assum-n-output-observability-node-list-equiv-congruence-on-aignet2 (implies (node-list-equiv aignet2 aignet2-equiv) (equal (m-assum-n-output-observability m n aignet aignet2 config state) (m-assum-n-output-observability m n aignet aignet2-equiv config state))) :rule-classes :congruence)
Theorem:
(defthm m-assum-n-output-observability-of-m-assum-n-output-observability-config-fix-config (equal (m-assum-n-output-observability m n aignet aignet2 (m-assum-n-output-observability-config-fix config) state) (m-assum-n-output-observability m n aignet aignet2 config state)))
Theorem:
(defthm m-assum-n-output-observability-m-assum-n-output-observability-config-equiv-congruence-on-config (implies (m-assum-n-output-observability-config-equiv config config-equiv) (equal (m-assum-n-output-observability m n aignet aignet2 config state) (m-assum-n-output-observability m n aignet aignet2 config-equiv state))) :rule-classes :congruence)