Compose together a network of svex assignments, stopping when a variable depends on itself.
(svex-compose-dfs x assigns updates memo stack) → (mv x1 updates1 memo1)
Theorem:
(defthm return-type-of-svex-compose-dfs.x1 (b* (((mv ?x1 ?updates1 ?memo1) (svex-compose-dfs x assigns updates memo stack))) (svex-p x1)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-svex-compose-dfs.updates1 (b* (((mv ?x1 ?updates1 ?memo1) (svex-compose-dfs x assigns updates memo stack))) (svex-alist-p updates1)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-svex-compose-dfs.memo1 (b* (((mv ?x1 ?updates1 ?memo1) (svex-compose-dfs x assigns updates memo stack))) (svex-svex-memo-p memo1)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-svexlist-compose-dfs.x1 (b* (((mv ?x1 ?updates1 ?memo1) (svexlist-compose-dfs x assigns updates memo stack))) (svexlist-p x1)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-svexlist-compose-dfs.updates1 (b* (((mv ?x1 ?updates1 ?memo1) (svexlist-compose-dfs x assigns updates memo stack))) (svex-alist-p updates1)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-svexlist-compose-dfs.memo1 (b* (((mv ?x1 ?updates1 ?memo1) (svexlist-compose-dfs x assigns updates memo stack))) (svex-svex-memo-p memo1)) :rule-classes :rewrite)
Theorem:
(defthm svex-compose-dfs-of-svex-fix-x (equal (svex-compose-dfs (svex-fix x) assigns updates memo stack) (svex-compose-dfs x assigns updates memo stack)))
Theorem:
(defthm svex-compose-dfs-of-svex-alist-fix-assigns (equal (svex-compose-dfs x (svex-alist-fix assigns) updates memo stack) (svex-compose-dfs x assigns updates memo stack)))
Theorem:
(defthm svex-compose-dfs-of-svex-alist-fix-updates (equal (svex-compose-dfs x assigns (svex-alist-fix updates) memo stack) (svex-compose-dfs x assigns updates memo stack)))
Theorem:
(defthm svex-compose-dfs-of-svex-svex-memo-fix-memo (equal (svex-compose-dfs x assigns updates (svex-svex-memo-fix memo) stack) (svex-compose-dfs x assigns updates memo stack)))
Theorem:
(defthm svexlist-compose-dfs-of-svexlist-fix-x (equal (svexlist-compose-dfs (svexlist-fix x) assigns updates memo stack) (svexlist-compose-dfs x assigns updates memo stack)))
Theorem:
(defthm svexlist-compose-dfs-of-svex-alist-fix-assigns (equal (svexlist-compose-dfs x (svex-alist-fix assigns) updates memo stack) (svexlist-compose-dfs x assigns updates memo stack)))
Theorem:
(defthm svexlist-compose-dfs-of-svex-alist-fix-updates (equal (svexlist-compose-dfs x assigns (svex-alist-fix updates) memo stack) (svexlist-compose-dfs x assigns updates memo stack)))
Theorem:
(defthm svexlist-compose-dfs-of-svex-svex-memo-fix-memo (equal (svexlist-compose-dfs x assigns updates (svex-svex-memo-fix memo) stack) (svexlist-compose-dfs x assigns updates memo stack)))
Theorem:
(defthm svex-compose-dfs-svex-equiv-congruence-on-x (implies (svex-equiv x x-equiv) (equal (svex-compose-dfs x assigns updates memo stack) (svex-compose-dfs x-equiv assigns updates memo stack))) :rule-classes :congruence)
Theorem:
(defthm svex-compose-dfs-svex-alist-equiv-congruence-on-assigns (implies (svex-alist-equiv assigns assigns-equiv) (equal (svex-compose-dfs x assigns updates memo stack) (svex-compose-dfs x assigns-equiv updates memo stack))) :rule-classes :congruence)
Theorem:
(defthm svex-compose-dfs-svex-alist-equiv-congruence-on-updates (implies (svex-alist-equiv updates updates-equiv) (equal (svex-compose-dfs x assigns updates memo stack) (svex-compose-dfs x assigns updates-equiv memo stack))) :rule-classes :congruence)
Theorem:
(defthm svex-compose-dfs-svex-svex-memo-equiv-congruence-on-memo (implies (svex-svex-memo-equiv memo memo-equiv) (equal (svex-compose-dfs x assigns updates memo stack) (svex-compose-dfs x assigns updates memo-equiv stack))) :rule-classes :congruence)
Theorem:
(defthm svexlist-compose-dfs-svexlist-equiv-congruence-on-x (implies (svexlist-equiv x x-equiv) (equal (svexlist-compose-dfs x assigns updates memo stack) (svexlist-compose-dfs x-equiv assigns updates memo stack))) :rule-classes :congruence)
Theorem:
(defthm svexlist-compose-dfs-svex-alist-equiv-congruence-on-assigns (implies (svex-alist-equiv assigns assigns-equiv) (equal (svexlist-compose-dfs x assigns updates memo stack) (svexlist-compose-dfs x assigns-equiv updates memo stack))) :rule-classes :congruence)
Theorem:
(defthm svexlist-compose-dfs-svex-alist-equiv-congruence-on-updates (implies (svex-alist-equiv updates updates-equiv) (equal (svexlist-compose-dfs x assigns updates memo stack) (svexlist-compose-dfs x assigns updates-equiv memo stack))) :rule-classes :congruence)
Theorem:
(defthm svexlist-compose-dfs-svex-svex-memo-equiv-congruence-on-memo (implies (svex-svex-memo-equiv memo memo-equiv) (equal (svexlist-compose-dfs x assigns updates memo stack) (svexlist-compose-dfs x assigns updates memo-equiv stack))) :rule-classes :congruence)