Compose together svex assignments (using svex-compose-dfs) for the listed keys.
(svex-compose-assigns-keys keys assigns updates memo) → (mv updates1 memo1)
Function:
(defun svex-compose-assigns-keys (keys assigns updates memo) (declare (xargs :guard (and (svarlist-p keys) (svex-alist-p assigns) (svex-alist-p updates) (svex-svex-memo-p memo)))) (let ((__function__ 'svex-compose-assigns-keys)) (declare (ignorable __function__)) (b* (((when (atom keys)) (mv (mbe :logic (svex-alist-fix updates) :exec updates) (svex-svex-memo-fix memo))) ((mv & updates memo) (svex-compose-dfs (svex-var (car keys)) assigns updates memo nil))) (svex-compose-assigns-keys (cdr keys) assigns updates memo))))
Theorem:
(defthm svex-alist-p-of-svex-compose-assigns-keys.updates1 (b* (((mv ?updates1 ?memo1) (svex-compose-assigns-keys keys assigns updates memo))) (svex-alist-p updates1)) :rule-classes :rewrite)
Theorem:
(defthm svex-svex-memo-p-of-svex-compose-assigns-keys.memo1 (b* (((mv ?updates1 ?memo1) (svex-compose-assigns-keys keys assigns updates memo))) (svex-svex-memo-p memo1)) :rule-classes :rewrite)
Theorem:
(defthm svex-compose-assigns-keys-of-svarlist-fix-keys (equal (svex-compose-assigns-keys (svarlist-fix keys) assigns updates memo) (svex-compose-assigns-keys keys assigns updates memo)))
Theorem:
(defthm svex-compose-assigns-keys-svarlist-equiv-congruence-on-keys (implies (svarlist-equiv keys keys-equiv) (equal (svex-compose-assigns-keys keys assigns updates memo) (svex-compose-assigns-keys keys-equiv assigns updates memo))) :rule-classes :congruence)
Theorem:
(defthm svex-compose-assigns-keys-of-svex-alist-fix-assigns (equal (svex-compose-assigns-keys keys (svex-alist-fix assigns) updates memo) (svex-compose-assigns-keys keys assigns updates memo)))
Theorem:
(defthm svex-compose-assigns-keys-svex-alist-equiv-congruence-on-assigns (implies (svex-alist-equiv assigns assigns-equiv) (equal (svex-compose-assigns-keys keys assigns updates memo) (svex-compose-assigns-keys keys assigns-equiv updates memo))) :rule-classes :congruence)
Theorem:
(defthm svex-compose-assigns-keys-of-svex-alist-fix-updates (equal (svex-compose-assigns-keys keys assigns (svex-alist-fix updates) memo) (svex-compose-assigns-keys keys assigns updates memo)))
Theorem:
(defthm svex-compose-assigns-keys-svex-alist-equiv-congruence-on-updates (implies (svex-alist-equiv updates updates-equiv) (equal (svex-compose-assigns-keys keys assigns updates memo) (svex-compose-assigns-keys keys assigns updates-equiv memo))) :rule-classes :congruence)
Theorem:
(defthm svex-compose-assigns-keys-of-svex-svex-memo-fix-memo (equal (svex-compose-assigns-keys keys assigns updates (svex-svex-memo-fix memo)) (svex-compose-assigns-keys keys assigns updates memo)))
Theorem:
(defthm svex-compose-assigns-keys-svex-svex-memo-equiv-congruence-on-memo (implies (svex-svex-memo-equiv memo memo-equiv) (equal (svex-compose-assigns-keys keys assigns updates memo) (svex-compose-assigns-keys keys assigns updates memo-equiv))) :rule-classes :congruence)