Equivalent of svexlist/env-list-eval intended to work well under GL symbolic execution.
(svexlist/env-list-eval-gl x envs symbolic-params) → *
This function is provably equivalent to
It is analogous to svexlist-eval-gl, but the individual lists of
svexes within
The
Function:
(defun svexlist/env-list-eval-gl (x envs symbolic-params) (declare (xargs :guard (and (svexlistlist-p x) (svex-envlist-p envs) (alistp symbolic-params)))) (let ((__function__ 'svexlist/env-list-eval-gl)) (declare (ignorable __function__)) (b* ((envs (take (len x) envs)) (x (svexlistlist-fix x)) (svexes (append-lists x)) (svars (svexlist/env-list-vars-for-symbolic-eval svexes envs symbolic-params)) (svexes (svexlist-x-out-unused-vars svexes svars (symbolic-params-x-out-cond symbolic-params))) (svexes (maybe-svexlist-rewrite-fixpoint svexes (cdr (assoc :simplify symbolic-params)))) (boolmasks (make-fast-alist (hons-copy (ec-call (svar-boolmasks-fix (cdr (assoc :boolmasks symbolic-params))))))) ((unless (svex-envlist-check-boolmasks boolmasks envs)) (b* ((?ign (cw "ERROR: some bits assumed to be Boolean were not~%")) (?ign (gl::gl-error 'boolcheck-failed))) (gl::gl-hide (svexlist/env-list-eval x envs)))) ((mv err a4vecs) (time$ (svexlist->a4vecs-for-varlist svexes svars boolmasks) :msg "; svex->aigs: ~st sec, ~sa bytes.~%")) ((when err) (b* ((?ign (cw "ERROR gathering AIG bits for variables: ~@0~%" err)) (?ign (gl::gl-error 'a4env-failed))) (gl::gl-hide (svexlist/env-list-eval x envs)))) (a4veclist-list (extract-lists x a4vecs))) (a4veclist/svex-env-list-eval a4veclist-list envs svexes svars boolmasks))))
Theorem:
(defthm svexlist/env-list-eval-gl-correct (equal (svexlist/env-list-eval-gl x envs symbolic-params) (svexlist/env-list-eval x envs)))
Theorem:
(defthm svexlist/env-list-eval-for-symbolic-redef (equal (svexlist/env-list-eval x envs) (svexlist/env-list-eval-gl x envs nil)))
Theorem:
(defthm svexlist/env-list-eval-gl-of-svexlistlist-fix-x (equal (svexlist/env-list-eval-gl (svexlistlist-fix x) envs symbolic-params) (svexlist/env-list-eval-gl x envs symbolic-params)))
Theorem:
(defthm svexlist/env-list-eval-gl-svexlistlist-equiv-congruence-on-x (implies (svexlistlist-equiv x x-equiv) (equal (svexlist/env-list-eval-gl x envs symbolic-params) (svexlist/env-list-eval-gl x-equiv envs symbolic-params))) :rule-classes :congruence)
Theorem:
(defthm svexlist/env-list-eval-gl-of-svex-envlist-fix-envs (equal (svexlist/env-list-eval-gl x (svex-envlist-fix envs) symbolic-params) (svexlist/env-list-eval-gl x envs symbolic-params)))
Theorem:
(defthm svexlist/env-list-eval-gl-svex-envlist-equiv-congruence-on-envs (implies (svex-envlist-equiv envs envs-equiv) (equal (svexlist/env-list-eval-gl x envs symbolic-params) (svexlist/env-list-eval-gl x envs-equiv symbolic-params))) :rule-classes :congruence)