Given an alist mapping variables to assigned expressions, compose them together into full update functions.
(svex-assigns-compose x &key (rewrite 't) (scc-selfcompose-limit 'nil)) → xx
Function:
(defun svex-assigns-compose-fn (x rewrite scc-selfcompose-limit) (declare (xargs :guard (and (svex-alist-p x) (maybe-natp scc-selfcompose-limit)))) (let ((__function__ 'svex-assigns-compose)) (declare (ignorable __function__)) (b* (((mv err ans) (svex-assigns-compose1 x :rewrite rewrite :scc-selfcompose-limit scc-selfcompose-limit)) (ans (if err (prog2$ (raise "~@0" err) (svex-alist-fix x)) ans)) (final-ans (b* ((vars (svex-alist-keys x)) (xes-alist (svarlist-x-subst vars))) (with-fast-alist xes-alist (svex-alist-compose-rw ans (make-svex-substconfig :simp (if rewrite 20 t) :alist xes-alist)))))) final-ans)))
Theorem:
(defthm svex-alist-p-of-svex-assigns-compose (b* ((xx (svex-assigns-compose-fn x rewrite scc-selfcompose-limit))) (svex-alist-p xx)) :rule-classes :rewrite)
Theorem:
(defthm netevalcomp-p-of-svex-assigns-compose (b* ((?xx (svex-assigns-compose-fn x rewrite scc-selfcompose-limit))) (netevalcomp-p xx x)))
Theorem:
(defthm svex-alist-keys-of-svex-assigns-compose (b* ((?xx (svex-assigns-compose-fn x rewrite scc-selfcompose-limit))) (set-equiv (svex-alist-keys xx) (svex-alist-keys x))))
Theorem:
(defthm svex-assigns-compose-fn-of-svex-alist-fix-x (equal (svex-assigns-compose-fn (svex-alist-fix x) rewrite scc-selfcompose-limit) (svex-assigns-compose-fn x rewrite scc-selfcompose-limit)))
Theorem:
(defthm svex-assigns-compose-fn-svex-alist-equiv-congruence-on-x (implies (svex-alist-equiv x x-equiv) (equal (svex-assigns-compose-fn x rewrite scc-selfcompose-limit) (svex-assigns-compose-fn x-equiv rewrite scc-selfcompose-limit))) :rule-classes :congruence)
Theorem:
(defthm svex-assigns-compose-fn-of-maybe-natp-fix-scc-selfcompose-limit (equal (svex-assigns-compose-fn x rewrite (acl2::maybe-natp-fix scc-selfcompose-limit)) (svex-assigns-compose-fn x rewrite scc-selfcompose-limit)))
Theorem:
(defthm svex-assigns-compose-fn-maybe-nat-equiv-congruence-on-scc-selfcompose-limit (implies (acl2::maybe-nat-equiv scc-selfcompose-limit scc-selfcompose-limit-equiv) (equal (svex-assigns-compose-fn x rewrite scc-selfcompose-limit) (svex-assigns-compose-fn x rewrite scc-selfcompose-limit-equiv))) :rule-classes :congruence)