Extend a static environment with a variable declaration.
(extend-senv-with-vardecl decl env) → new-env
We add an entry for the variable, if possible. We ignore the initializing expression.
This does not type-check the variable declaration. It just incorporates it into the environment.
Function:
(defun extend-senv-with-vardecl (decl env) (declare (xargs :guard (and (vardeclp decl) (senvp env)))) (let ((__function__ 'extend-senv-with-vardecl)) (declare (ignorable __function__)) (b* (((vardecl decl) decl) (info (make-var/const-sinfo :type decl.type :constp nil)) (new-env (add-var/const-sinfo decl.name info env)) ((unless new-env) (reserrf (list :cannot-add-variable decl.name (senv-fix env))))) new-env)))
Theorem:
(defthm senv-resultp-of-extend-senv-with-vardecl (b* ((new-env (extend-senv-with-vardecl decl env))) (senv-resultp new-env)) :rule-classes :rewrite)
Theorem:
(defthm extend-senv-with-vardecl-of-vardecl-fix-decl (equal (extend-senv-with-vardecl (vardecl-fix decl) env) (extend-senv-with-vardecl decl env)))
Theorem:
(defthm extend-senv-with-vardecl-vardecl-equiv-congruence-on-decl (implies (vardecl-equiv decl decl-equiv) (equal (extend-senv-with-vardecl decl env) (extend-senv-with-vardecl decl-equiv env))) :rule-classes :congruence)
Theorem:
(defthm extend-senv-with-vardecl-of-senv-fix-env (equal (extend-senv-with-vardecl decl (senv-fix env)) (extend-senv-with-vardecl decl env)))
Theorem:
(defthm extend-senv-with-vardecl-senv-equiv-congruence-on-env (implies (senv-equiv env env-equiv) (equal (extend-senv-with-vardecl decl env) (extend-senv-with-vardecl decl env-equiv))) :rule-classes :congruence)