Validate an external declaration.
(valid-ext-declon edecl table ienv) → (mv erp new-edecl new-table)
For now we do not do anything with assembler statements. The empty external declaration is always valid. We check that declarations contain no return statements.
Function:
(defun valid-ext-declon (edecl table ienv) (declare (xargs :guard (and (ext-declonp edecl) (valid-tablep table) (ienvp ienv)))) (declare (xargs :guard (ext-declon-unambp edecl))) (b* (((reterr) (irr-ext-declon) (irr-valid-table))) (ext-declon-case edecl :fundef (b* (((erp new-fundef table) (valid-fundef edecl.fundef table ienv))) (retok (ext-declon-fundef new-fundef) table)) :declon (b* (((erp new-decl types table) (valid-declon edecl.declon table ienv)) ((unless (emptyp types)) (retmsg$ "The top-level declaration ~x0 ~ contains return statements." edecl.declon))) (retok (ext-declon-declon new-decl) table)) :empty (retok (ext-declon-empty) (valid-table-fix table)) :asm (retok (ext-declon-fix edecl) (valid-table-fix table)))))
Theorem:
(defthm maybe-msgp-of-valid-ext-declon.erp (b* (((mv acl2::?erp ?new-edecl ?new-table) (valid-ext-declon edecl table ienv))) (maybe-msgp erp)) :rule-classes :rewrite)
Theorem:
(defthm ext-declonp-of-valid-ext-declon.new-edecl (b* (((mv acl2::?erp ?new-edecl ?new-table) (valid-ext-declon edecl table ienv))) (ext-declonp new-edecl)) :rule-classes :rewrite)
Theorem:
(defthm valid-tablep-of-valid-ext-declon.new-table (b* (((mv acl2::?erp ?new-edecl ?new-table) (valid-ext-declon edecl table ienv))) (valid-tablep new-table)) :rule-classes :rewrite)
Theorem:
(defthm ext-declon-unambp-of-valid-ext-declon (implies (ext-declon-unambp edecl) (b* (((mv acl2::?erp ?new-edecl ?new-table) (valid-ext-declon edecl table ienv))) (implies (not erp) (ext-declon-unambp new-edecl)))))
Theorem:
(defthm valid-ext-declon-of-ext-declon-fix-edecl (equal (valid-ext-declon (ext-declon-fix edecl) table ienv) (valid-ext-declon edecl table ienv)))
Theorem:
(defthm valid-ext-declon-ext-declon-equiv-congruence-on-edecl (implies (ext-declon-equiv edecl edecl-equiv) (equal (valid-ext-declon edecl table ienv) (valid-ext-declon edecl-equiv table ienv))) :rule-classes :congruence)
Theorem:
(defthm valid-ext-declon-of-valid-table-fix-table (equal (valid-ext-declon edecl (valid-table-fix table) ienv) (valid-ext-declon edecl table ienv)))
Theorem:
(defthm valid-ext-declon-valid-table-equiv-congruence-on-table (implies (valid-table-equiv table table-equiv) (equal (valid-ext-declon edecl table ienv) (valid-ext-declon edecl table-equiv ienv))) :rule-classes :congruence)
Theorem:
(defthm valid-ext-declon-of-ienv-fix-ienv (equal (valid-ext-declon edecl table (ienv-fix ienv)) (valid-ext-declon edecl table ienv)))
Theorem:
(defthm valid-ext-declon-ienv-equiv-congruence-on-ienv (implies (ienv-equiv ienv ienv-equiv) (equal (valid-ext-declon edecl table ienv) (valid-ext-declon edecl table ienv-equiv))) :rule-classes :congruence)