Execution not involving function calls is independent from the function environment.
We express this by saying that when the execution functions are applied to constructs (expressions, statements, etc.) that do not contain function calls, they always yield the same results given any two arbitrary function environments.
Theorem:
(defthm exec-expr-call-without-calls t :rule-classes nil)
Theorem:
(defthm exec-expr-call-or-pure-without-calls (implies (expr-nocallsp e) (equal (exec-expr-call-or-pure e compst fenv limit) (exec-expr-call-or-pure e compst fenv1 limit))) :rule-classes nil)
Theorem:
(defthm exec-expr-asg-without-calls (implies (expr-nocallsp e) (equal (exec-expr-asg e compst fenv limit) (exec-expr-asg e compst fenv1 limit))) :rule-classes nil)
Theorem:
(defthm exec-expr-call-or-asg-without-calls (implies (expr-nocallsp e) (equal (exec-expr-call-or-asg e compst fenv limit) (exec-expr-call-or-asg e compst fenv1 limit))) :rule-classes nil)
Theorem:
(defthm exec-fun-without-calls t :rule-classes nil)
Theorem:
(defthm exec-stmt-without-calls (implies (stmt-nocallsp s) (equal (exec-stmt s compst fenv limit) (exec-stmt s compst fenv1 limit))) :rule-classes nil)
Theorem:
(defthm exec-stmt-while-without-calls (implies (and (expr-nocallsp test) (stmt-nocallsp body)) (equal (exec-stmt-while test body compst fenv limit) (exec-stmt-while test body compst fenv1 limit))) :rule-classes nil)
Theorem:
(defthm exec-initer-without-calls (implies (initer-nocallsp initer) (equal (exec-initer initer compst fenv limit) (exec-initer initer compst fenv1 limit))) :rule-classes nil)
Theorem:
(defthm exec-block-item-without-calls (implies (block-item-nocallsp item) (equal (exec-block-item item compst fenv limit) (exec-block-item item compst fenv1 limit))) :rule-classes nil)
Theorem:
(defthm exec-block-item-list-without-calls (implies (block-item-list-nocallsp items) (equal (exec-block-item-list items compst fenv limit) (exec-block-item-list items compst fenv1 limit))) :rule-classes nil)