Checks that the given key either isn't bound the test alist, or else has a triple in the triplemap such that the test of the triple is the key's binding in the test-alist, the val of the triple is the key's binding in the val-alist, and the refvar of the triple is bound in probes to a probe whose signal is the key and time is the current phase.
(svtv-override-triplemap-key-check
key phase
test-alist val-alist probes triplemap)
→
okFunction:
(defun svtv-override-triplemap-key-check (key phase test-alist val-alist probes triplemap) (declare (xargs :guard (and (svar-p key) (natp phase) (svex-alist-p test-alist) (svex-alist-p val-alist) (svtv-probealist-p probes) (svtv-override-triplemap-p triplemap)))) (let ((__function__ 'svtv-override-triplemap-key-check)) (declare (ignorable __function__)) (b* ((test (svex-fastlookup key test-alist)) ((unless test) t) (val (or (svex-fastlookup key val-alist) (svex-x))) (triple (cdr (hons-get (svar-fix key) (svtv-override-triplemap-fix triplemap)))) ((unless triple) nil) ((svtv-override-triple triple)) ((unless (and (equal triple.test test) (equal triple.val val))) nil) ((unless triple.refvar) t) (probe (cdr (hons-get triple.refvar (svtv-probealist-fix probes)))) ((unless probe) nil) ((svtv-probe probe))) (and (equal probe.signal (svar-fix key)) (equal probe.time (lnfix phase))))))
Theorem:
(defthm svtv-override-triplemap-key-check-implies-4vec-override-mux-<<= (b* ((vl::?ok (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap))) (implies (and ok (svtv-override-triple-envs-ok (cdr (hons-assoc-equal (svar-fix key) triplemap)) pipe-env spec-env (svtv-probealist-extract probes ref-envs))) (4vec-override-mux-<<= (svex-eval (svex-lookup key test-alist) pipe-env) (svex-eval (svex-lookup key val-alist) pipe-env) (svex-eval (svex-lookup key test-alist) spec-env) (svex-eval (svex-lookup key val-alist) spec-env) (svex-env-lookup key (nth phase ref-envs))))))
Theorem:
(defthm svtv-override-triplemap-key-check-implies-4vec-muxtest-subsetp (b* ((vl::?ok (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap))) (implies (and ok (svtv-override-triple-envs-ok (cdr (hons-assoc-equal (svar-fix key) triplemap)) pipe-env spec-env ref-env)) (4vec-muxtest-subsetp (svex-eval (svex-lookup key test-alist) spec-env) (svex-eval (svex-lookup key test-alist) pipe-env)))))
Theorem:
(defthm svtv-override-triplemap-key-check-implies-lookup-in-triplemap (b* ((vl::?ok (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap))) (implies (and ok (case-split (svex-lookup key test-alist))) (hons-assoc-equal (svar-fix key) triplemap))))
Theorem:
(defthm svtv-override-triplemap-key-check-of-svar-fix-key (equal (svtv-override-triplemap-key-check (svar-fix key) phase test-alist val-alist probes triplemap) (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap)))
Theorem:
(defthm svtv-override-triplemap-key-check-svar-equiv-congruence-on-key (implies (svar-equiv key key-equiv) (equal (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap) (svtv-override-triplemap-key-check key-equiv phase test-alist val-alist probes triplemap))) :rule-classes :congruence)
Theorem:
(defthm svtv-override-triplemap-key-check-of-nfix-phase (equal (svtv-override-triplemap-key-check key (nfix phase) test-alist val-alist probes triplemap) (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap)))
Theorem:
(defthm svtv-override-triplemap-key-check-nat-equiv-congruence-on-phase (implies (nat-equiv phase phase-equiv) (equal (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap) (svtv-override-triplemap-key-check key phase-equiv test-alist val-alist probes triplemap))) :rule-classes :congruence)
Theorem:
(defthm svtv-override-triplemap-key-check-of-svex-alist-fix-test-alist (equal (svtv-override-triplemap-key-check key phase (svex-alist-fix test-alist) val-alist probes triplemap) (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap)))
Theorem:
(defthm svtv-override-triplemap-key-check-svex-alist-equiv-congruence-on-test-alist (implies (svex-alist-equiv test-alist test-alist-equiv) (equal (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap) (svtv-override-triplemap-key-check key phase test-alist-equiv val-alist probes triplemap))) :rule-classes :congruence)
Theorem:
(defthm svtv-override-triplemap-key-check-of-svex-alist-fix-val-alist (equal (svtv-override-triplemap-key-check key phase test-alist (svex-alist-fix val-alist) probes triplemap) (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap)))
Theorem:
(defthm svtv-override-triplemap-key-check-svex-alist-equiv-congruence-on-val-alist (implies (svex-alist-equiv val-alist val-alist-equiv) (equal (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap) (svtv-override-triplemap-key-check key phase test-alist val-alist-equiv probes triplemap))) :rule-classes :congruence)
Theorem:
(defthm svtv-override-triplemap-key-check-of-svtv-probealist-fix-probes (equal (svtv-override-triplemap-key-check key phase test-alist val-alist (svtv-probealist-fix probes) triplemap) (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap)))
Theorem:
(defthm svtv-override-triplemap-key-check-svtv-probealist-equiv-congruence-on-probes (implies (svtv-probealist-equiv probes probes-equiv) (equal (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap) (svtv-override-triplemap-key-check key phase test-alist val-alist probes-equiv triplemap))) :rule-classes :congruence)
Theorem:
(defthm svtv-override-triplemap-key-check-of-svtv-override-triplemap-fix-triplemap (equal (svtv-override-triplemap-key-check key phase test-alist val-alist probes (svtv-override-triplemap-fix triplemap)) (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap)))
Theorem:
(defthm svtv-override-triplemap-key-check-svtv-override-triplemap-equiv-congruence-on-triplemap (implies (svtv-override-triplemap-equiv triplemap triplemap-equiv) (equal (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap) (svtv-override-triplemap-key-check key phase test-alist val-alist probes triplemap-equiv))) :rule-classes :congruence)