Validate a
(valid-sizeof/alignof expr type) → (mv erp type1)
The
Function:
(defun valid-sizeof/alignof (expr type) (declare (xargs :guard (and (exprp expr) (typep type)))) (declare (xargs :guard (or (expr-case expr :sizeof) (expr-case expr :alignof)))) (b* (((reterr) (irr-type)) ((when (type-case type :function)) (retmsg$ "In the ~s0 type expression ~x1, ~ the argument ~x2 is a function type." (case (expr-kind expr) (:sizeof "sizeof") (:alignof "_Alignof") (t (impossible))) (expr-fix expr) (type-fix type)))) (retok (type-unknown))))
Theorem:
(defthm maybe-msgp-of-valid-sizeof/alignof.erp (b* (((mv acl2::?erp ?type1) (valid-sizeof/alignof expr type))) (maybe-msgp erp)) :rule-classes :rewrite)
Theorem:
(defthm typep-of-valid-sizeof/alignof.type1 (b* (((mv acl2::?erp ?type1) (valid-sizeof/alignof expr type))) (typep type1)) :rule-classes :rewrite)
Theorem:
(defthm valid-sizeof/alignof-of-expr-fix-expr (equal (valid-sizeof/alignof (expr-fix expr) type) (valid-sizeof/alignof expr type)))
Theorem:
(defthm valid-sizeof/alignof-expr-equiv-congruence-on-expr (implies (expr-equiv expr expr-equiv) (equal (valid-sizeof/alignof expr type) (valid-sizeof/alignof expr-equiv type))) :rule-classes :congruence)
Theorem:
(defthm valid-sizeof/alignof-of-type-fix-type (equal (valid-sizeof/alignof expr (type-fix type)) (valid-sizeof/alignof expr type)))
Theorem:
(defthm valid-sizeof/alignof-type-equiv-congruence-on-type (implies (type-equiv type type-equiv) (equal (valid-sizeof/alignof expr type) (valid-sizeof/alignof expr type-equiv))) :rule-classes :congruence)