Compose together an alist of svex assignments, with no unrolling when variables depend on themselves.
(svex-compose-assigns assigns) → updates
Function:
(defun svex-compose-assigns (assigns) (declare (xargs :guard (svex-alist-p assigns))) (let ((__function__ 'svex-compose-assigns)) (declare (ignorable __function__)) (b* (((mv updates memo) (with-fast-alist assigns (svex-compose-assigns-keys (svex-alist-keys assigns) assigns nil nil)))) (fast-alist-free memo) updates)))
Theorem:
(defthm svex-alist-p-of-svex-compose-assigns (b* ((updates (svex-compose-assigns assigns))) (svex-alist-p updates)) :rule-classes :rewrite)
Theorem:
(defthm svex-compose-assigns-of-svex-alist-fix-assigns (equal (svex-compose-assigns (svex-alist-fix assigns)) (svex-compose-assigns assigns)))
Theorem:
(defthm svex-compose-assigns-svex-alist-equiv-congruence-on-assigns (implies (svex-alist-equiv assigns assigns-equiv) (equal (svex-compose-assigns assigns) (svex-compose-assigns assigns-equiv))) :rule-classes :congruence)