(observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state) → (mv hyp-copy new-hyps new-concls new-copy new-strash new-aignet2 new-state)
Function:
(defun observability-fix-hyps/concls (hyps concls aignet copy gatesimp strash aignet2 state) (declare (xargs :stobjs (aignet copy strash aignet2 state))) (declare (xargs :guard (and (lit-listp hyps) (lit-listp concls) (gatesimp-p gatesimp)))) (declare (xargs :guard (and (<= (num-fanins aignet) (lits-length copy)) (aignet-copies-in-bounds copy aignet2) (aignet-lit-listp hyps aignet) (aignet-lit-listp concls aignet) (<= (num-ins aignet) (num-ins aignet2)) (<= (num-regs aignet) (num-regs aignet2))))) (let ((__function__ 'observability-fix-hyps/concls)) (declare (ignorable __function__)) (b* (((mv copy strash aignet2) (b* (((local-stobjs mark) (mv mark copy strash aignet2)) (mark (resize-bits (num-fanins aignet) mark)) ((mv mark copy strash aignet2) (aignet-copy-dfs-list hyps aignet mark copy strash gatesimp aignet2))) (mv mark copy strash aignet2))) (hyp-copies (lit-list-copies hyps copy)) ((mv hyp-copy strash aignet2) (aignet-hash-and-supergate hyp-copies gatesimp strash aignet2)) ((mv ?status copy strash aignet2 state) (observability-fix-input-copies hyp-copy aignet copy strash aignet2 state)) ((when (eq status :unsat)) (mv 0 hyp-copies (make-list (len concls) :initial-element 0) copy strash aignet2 state)) ((mv copy strash aignet2) (b* (((local-stobjs mark) (mv mark copy strash aignet2)) (mark (resize-bits (num-fanins aignet) mark))) (aignet-copy-dfs-list concls aignet mark copy strash gatesimp aignet2))) (concl-copies (lit-list-copies concls copy))) (mv hyp-copy hyp-copies concl-copies copy strash aignet2 state))))
Theorem:
(defthm litp-of-observability-fix-hyps/concls.hyp-copy (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (litp hyp-copy)) :rule-classes :rewrite)
Theorem:
(defthm lit-listp-of-observability-fix-hyps/concls.new-hyps (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (lit-listp new-hyps)) :rule-classes :rewrite)
Theorem:
(defthm lit-listp-of-observability-fix-hyps/concls.new-concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (lit-listp new-concls)) :rule-classes :rewrite)
Theorem:
(defthm aignet-extension-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (aignet-extension-p new-aignet2 aignet2)))
Theorem:
(defthm stype-counts-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (implies (and (not (equal (stype-fix stype) (and-stype))) (not (equal (stype-fix stype) (xor-stype)))) (equal (stype-count stype new-aignet2) (stype-count stype aignet2)))))
Theorem:
(defthm copy-length-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (implies (and (<= (num-fanins aignet) (len copy)) (aignet-lit-listp hyps aignet) (aignet-lit-listp concls aignet)) (equal (len new-copy) (len copy)))))
Theorem:
(defthm copies-in-bounds-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (implies (and (aignet-copies-in-bounds copy aignet2) (aignet-lit-listp hyps aignet) (aignet-lit-listp concls aignet) (<= (num-ins aignet) (num-ins aignet2)) (<= (num-regs aignet) (num-regs aignet2))) (and (aignet-copies-in-bounds new-copy new-aignet2) (aignet-litp hyp-copy new-aignet2) (aignet-lit-listp new-hyps new-aignet2) (aignet-lit-listp new-concls new-aignet2)))))
Theorem:
(defthm dfs-copy-onto-invar-of-empty-mark (dfs-copy-onto-invar aignet (resize-list nil n 0) copy aignet2))
Theorem:
(defthm new-concls-len-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (equal (len new-concls) (len concls))))
Theorem:
(defthm new-hyps-len-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (equal (len new-hyps) (len hyps))))
Theorem:
(defthm new-concls-consp-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (equal (consp new-concls) (consp concls))))
Theorem:
(defthm new-hyps-consp-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (equal (consp new-hyps) (consp hyps))))
Theorem:
(defthm hyp-eval-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (implies (and (aignet-copies-in-bounds copy aignet2) (aignet-lit-listp hyps aignet) (<= (num-ins aignet) (num-ins aignet2)) (<= (num-regs aignet) (num-regs aignet2))) (and (equal (lit-eval hyp-copy invals regvals new-aignet2) (aignet-eval-conjunction hyps (input-copy-values 0 invals regvals aignet copy aignet2) (reg-copy-values 0 invals regvals aignet copy aignet2) aignet)) (equal (lit-eval-list new-hyps invals regvals new-aignet2) (lit-eval-list hyps (input-copy-values 0 invals regvals aignet copy aignet2) (reg-copy-values 0 invals regvals aignet copy aignet2) aignet))))))
Theorem:
(defthm eval-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (implies (and (aignet-copies-in-bounds copy aignet2) (aignet-lit-listp concls aignet) (aignet-lit-listp hyps aignet) (<= (num-ins aignet) (num-ins aignet2)) (<= (num-regs aignet) (num-regs aignet2)) (equal (aignet-eval-conjunction hyps (input-copy-values 0 invals regvals aignet copy aignet2) (reg-copy-values 0 invals regvals aignet copy aignet2) aignet) 1)) (equal (lit-eval-list new-concls invals regvals new-aignet2) (lit-eval-list concls (input-copy-values 0 invals regvals aignet copy aignet2) (reg-copy-values 0 invals regvals aignet copy aignet2) aignet)))))
Theorem:
(defthm nth-hyp-eval-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (implies (and (aignet-copies-in-bounds copy aignet2) (aignet-lit-listp hyps aignet) (<= (num-ins aignet) (num-ins aignet2)) (<= (num-regs aignet) (num-regs aignet2))) (equal (lit-eval (nth n new-hyps) invals regvals new-aignet2) (lit-eval (nth n hyps) (input-copy-values 0 invals regvals aignet copy aignet2) (reg-copy-values 0 invals regvals aignet copy aignet2) aignet)))))
Theorem:
(defthm nth-concl-eval-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (implies (and (aignet-copies-in-bounds copy aignet2) (aignet-lit-listp concls aignet) (aignet-lit-listp hyps aignet) (<= (num-ins aignet) (num-ins aignet2)) (<= (num-regs aignet) (num-regs aignet2)) (equal (aignet-eval-conjunction hyps (input-copy-values 0 invals regvals aignet copy aignet2) (reg-copy-values 0 invals regvals aignet copy aignet2) aignet) 1)) (equal (lit-eval (nth n new-concls) invals regvals new-aignet2) (lit-eval (nth n concls) (input-copy-values 0 invals regvals aignet copy aignet2) (reg-copy-values 0 invals regvals aignet copy aignet2) aignet)))))
Theorem:
(defthm w-state-of-observability-fix-hyps/concls (b* (((mv ?hyp-copy ?new-hyps ?new-concls ?new-copy ?new-strash ?new-aignet2 ?new-state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state))) (equal (w new-state) (w state))))
Theorem:
(defthm observability-fix-hyps/concls-of-lit-list-fix-hyps (equal (observability-fix-hyps/concls (lit-list-fix hyps) concls aignet copy gatesimp strash aignet2 state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state)))
Theorem:
(defthm observability-fix-hyps/concls-lit-list-equiv-congruence-on-hyps (implies (satlink::lit-list-equiv hyps hyps-equiv) (equal (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state) (observability-fix-hyps/concls hyps-equiv concls aignet copy gatesimp strash aignet2 state))) :rule-classes :congruence)
Theorem:
(defthm observability-fix-hyps/concls-of-lit-list-fix-concls (equal (observability-fix-hyps/concls hyps (lit-list-fix concls) aignet copy gatesimp strash aignet2 state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state)))
Theorem:
(defthm observability-fix-hyps/concls-lit-list-equiv-congruence-on-concls (implies (satlink::lit-list-equiv concls concls-equiv) (equal (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state) (observability-fix-hyps/concls hyps concls-equiv aignet copy gatesimp strash aignet2 state))) :rule-classes :congruence)
Theorem:
(defthm observability-fix-hyps/concls-of-node-list-fix-aignet (equal (observability-fix-hyps/concls hyps concls (node-list-fix aignet) copy gatesimp strash aignet2 state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state)))
Theorem:
(defthm observability-fix-hyps/concls-node-list-equiv-congruence-on-aignet (implies (node-list-equiv aignet aignet-equiv) (equal (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state) (observability-fix-hyps/concls hyps concls aignet-equiv copy gatesimp strash aignet2 state))) :rule-classes :congruence)
Theorem:
(defthm observability-fix-hyps/concls-of-gatesimp-fix-gatesimp (equal (observability-fix-hyps/concls hyps concls aignet copy (gatesimp-fix gatesimp) strash aignet2 state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state)))
Theorem:
(defthm observability-fix-hyps/concls-gatesimp-equiv-congruence-on-gatesimp (implies (gatesimp-equiv gatesimp gatesimp-equiv) (equal (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp-equiv strash aignet2 state))) :rule-classes :congruence)
Theorem:
(defthm observability-fix-hyps/concls-of-node-list-fix-aignet2 (equal (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash (node-list-fix aignet2) state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state)))
Theorem:
(defthm observability-fix-hyps/concls-node-list-equiv-congruence-on-aignet2 (implies (node-list-equiv aignet2 aignet2-equiv) (equal (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2 state) (observability-fix-hyps/concls hyps concls aignet copy gatesimp strash aignet2-equiv state))) :rule-classes :congruence)