Check an input expression.
(check-input-expression inexpr env) → type
The expression must be a value expression.
Function:
(defun check-input-expression (inexpr env) (declare (xargs :guard (and (input-expressionp inexpr) (senvp env)))) (let ((__function__ 'check-input-expression)) (declare (ignorable __function__)) (b* ((expr (input-expression->get inexpr)) ((unless (expression-valuep expr)) (reserrf (list :not-value-expression expr))) ((okf etype) (typecheck-expression expr env))) (expr-type->type etype))))
Theorem:
(defthm type-resultp-of-check-input-expression (b* ((type (check-input-expression inexpr env))) (type-resultp type)) :rule-classes :rewrite)
Theorem:
(defthm check-input-expression-of-input-expression-fix-inexpr (equal (check-input-expression (input-expression-fix inexpr) env) (check-input-expression inexpr env)))
Theorem:
(defthm check-input-expression-input-expression-equiv-congruence-on-inexpr (implies (input-expression-equiv inexpr inexpr-equiv) (equal (check-input-expression inexpr env) (check-input-expression inexpr-equiv env))) :rule-classes :congruence)
Theorem:
(defthm check-input-expression-of-senv-fix-env (equal (check-input-expression inexpr (senv-fix env)) (check-input-expression inexpr env)))
Theorem:
(defthm check-input-expression-senv-equiv-congruence-on-env (implies (senv-equiv env env-equiv) (equal (check-input-expression inexpr env) (check-input-expression inexpr env-equiv))) :rule-classes :congruence)