(vl-elabscopes-traverse/update trav scopes) → (mv new-scopes undo)
Function:
(defun vl-elabscopes-traverse/update (trav scopes) (declare (xargs :guard (and (vl-elabtraversal-p trav) (vl-elabscopes-p scopes)))) (let ((__function__ 'vl-elabscopes-traverse/update)) (declare (ignorable __function__)) (if (atom trav) (mv (vl-elabscopes-fix scopes) nil) (b* (((mv scopes undo1) (vl-elabscopes-do-instruction/update (car trav) scopes)) ((mv scopes undo2) (vl-elabscopes-traverse/update (cdr trav) scopes))) (mv scopes (vl-elabpaths-append undo1 undo2))))))
Theorem:
(defthm vl-elabscopes-p-of-vl-elabscopes-traverse/update.new-scopes (b* (((mv ?new-scopes ?undo) (vl-elabscopes-traverse/update trav scopes))) (vl-elabscopes-p new-scopes)) :rule-classes :rewrite)
Theorem:
(defthm vl-elabtraversal-p-of-vl-elabscopes-traverse/update.undo (b* (((mv ?new-scopes ?undo) (vl-elabscopes-traverse/update trav scopes))) (vl-elabtraversal-p undo)) :rule-classes :rewrite)
Theorem:
(defthm vl-elabscopes-traverse/update-of-vl-elabtraversal-fix-trav (equal (vl-elabscopes-traverse/update (vl-elabtraversal-fix trav) scopes) (vl-elabscopes-traverse/update trav scopes)))
Theorem:
(defthm vl-elabscopes-traverse/update-vl-elabtraversal-equiv-congruence-on-trav (implies (vl-elabtraversal-equiv trav trav-equiv) (equal (vl-elabscopes-traverse/update trav scopes) (vl-elabscopes-traverse/update trav-equiv scopes))) :rule-classes :congruence)
Theorem:
(defthm vl-elabscopes-traverse/update-of-vl-elabscopes-fix-scopes (equal (vl-elabscopes-traverse/update trav (vl-elabscopes-fix scopes)) (vl-elabscopes-traverse/update trav scopes)))
Theorem:
(defthm vl-elabscopes-traverse/update-vl-elabscopes-equiv-congruence-on-scopes (implies (vl-elabscopes-equiv scopes scopes-equiv) (equal (vl-elabscopes-traverse/update trav scopes) (vl-elabscopes-traverse/update trav scopes-equiv))) :rule-classes :congruence)