(observability-fix-core aignet aignet2 config state) → (mv new-aignet2 new-aignet new-state)
Function:
(defun observability-fix-core (aignet aignet2 config state) (declare (xargs :stobjs (aignet aignet2 state))) (declare (xargs :guard (observability-config-p config))) (let ((__function__ 'observability-fix-core)) (declare (ignorable __function__)) (b* (((local-stobjs copy strash) (mv copy strash aignet2 aignet state)) (aignet2 (aignet-init (num-outs aignet) (num-regs aignet) (num-ins aignet) (num-fanins aignet) aignet2)) (aignet2 (aignet-add-ins (num-ins aignet) aignet2)) (aignet2 (aignet-add-regs (num-regs aignet) aignet2)) ((mv copy strash aignet2 aignet state) (observability-fix-outs 0 config aignet copy strash aignet2 state)) ((mv copy strash aignet2 aignet state) (observability-fix-nxsts 0 config aignet copy strash aignet2 state))) (mv copy strash aignet2 aignet state))))
Theorem:
(defthm num-ins-of-observability-fix-core (b* (((mv ?new-aignet2 ?new-aignet ?new-state) (observability-fix-core aignet aignet2 config state))) (equal (stype-count :pi new-aignet2) (stype-count :pi aignet))))
Theorem:
(defthm num-regs-of-observability-fix-core (b* (((mv ?new-aignet2 ?new-aignet ?new-state) (observability-fix-core aignet aignet2 config state))) (equal (stype-count :reg new-aignet2) (stype-count :reg aignet))))
Theorem:
(defthm num-outs-of-observability-fix-core (b* (((mv ?new-aignet2 ?new-aignet ?new-state) (observability-fix-core aignet aignet2 config state))) (equal (stype-count :po new-aignet2) (stype-count :po aignet))))
Theorem:
(defthm comb-equiv-of-observability-fix-core (b* (((mv ?new-aignet2 ?new-aignet ?new-state) (observability-fix-core aignet aignet2 config state))) (comb-equiv new-aignet2 aignet)))
Theorem:
(defthm normalize-inputs-of-observability-fix-core (b* nil (implies (syntaxp (not (equal aignet2 ''nil))) (equal (observability-fix-core aignet aignet2 config state) (let ((aignet2 nil)) (observability-fix-core aignet aignet2 config state))))))
Theorem:
(defthm w-state-of-observability-fix-core (b* (((mv ?new-aignet2 ?new-aignet ?new-state) (observability-fix-core aignet aignet2 config state))) (equal (w new-state) (w state))))
Theorem:
(defthm observability-fix-core-of-node-list-fix-aignet (equal (observability-fix-core (node-list-fix aignet) aignet2 config state) (observability-fix-core aignet aignet2 config state)))
Theorem:
(defthm observability-fix-core-node-list-equiv-congruence-on-aignet (implies (node-list-equiv aignet aignet-equiv) (equal (observability-fix-core aignet aignet2 config state) (observability-fix-core aignet-equiv aignet2 config state))) :rule-classes :congruence)
Theorem:
(defthm observability-fix-core-of-node-list-fix-aignet2 (equal (observability-fix-core aignet (node-list-fix aignet2) config state) (observability-fix-core aignet aignet2 config state)))
Theorem:
(defthm observability-fix-core-node-list-equiv-congruence-on-aignet2 (implies (node-list-equiv aignet2 aignet2-equiv) (equal (observability-fix-core aignet aignet2 config state) (observability-fix-core aignet aignet2-equiv config state))) :rule-classes :congruence)
Theorem:
(defthm observability-fix-core-of-observability-config-fix-config (equal (observability-fix-core aignet aignet2 (observability-config-fix config) state) (observability-fix-core aignet aignet2 config state)))
Theorem:
(defthm observability-fix-core-observability-config-equiv-congruence-on-config (implies (observability-config-equiv config config-equiv) (equal (observability-fix-core aignet aignet2 config state) (observability-fix-core aignet aignet2 config-equiv state))) :rule-classes :congruence)