(svstate-push-scope x locals) → new-x
Function:
(defun svstate-push-scope (x locals) (declare (xargs :guard (and (svstate-p x) (svarlist-p locals)))) (let ((__function__ 'svstate-push-scope)) (declare (ignorable __function__)) (b* (((svstate x))) (change-svstate x :blkst (cons (svstmt-initialize-locals locals) x.blkst)))))
Theorem:
(defthm svstate-p-of-svstate-push-scope (b* ((new-x (svstate-push-scope x locals))) (svstate-p new-x)) :rule-classes :rewrite)
Theorem:
(defthm vars-of-svstate-push-scope (b* ((?new-x (svstate-push-scope x locals))) (implies (and (not (member v (svstate-vars x))) (not (member v (svarlist-fix locals)))) (not (member v (svstate-vars new-x))))))
Theorem:
(defthm svstate-push-scope-of-svstate-fix-x (equal (svstate-push-scope (svstate-fix x) locals) (svstate-push-scope x locals)))
Theorem:
(defthm svstate-push-scope-svstate-equiv-congruence-on-x (implies (svstate-equiv x x-equiv) (equal (svstate-push-scope x locals) (svstate-push-scope x-equiv locals))) :rule-classes :congruence)
Theorem:
(defthm svstate-push-scope-of-svarlist-fix-locals (equal (svstate-push-scope x (svarlist-fix locals)) (svstate-push-scope x locals)))
Theorem:
(defthm svstate-push-scope-svarlist-equiv-congruence-on-locals (implies (svarlist-equiv locals locals-equiv) (equal (svstate-push-scope x locals) (svstate-push-scope x locals-equiv))) :rule-classes :congruence)