Check if a parameter declaration has formal dynamic semantics.
(param-declon-formalp param) → yes/no
The declaration specifiers must be all type specifiers, and must form a supported type. The parameter declarator must be a supported one. There must be no ending attribute specifiers.
Function:
(defun param-declon-formalp (param) (declare (xargs :guard (param-declonp param))) (declare (xargs :guard (param-declon-unambp param))) (let ((__function__ 'param-declon-formalp)) (declare (ignorable __function__)) (b* (((param-declon param) param) ((mv okp tyspecs) (check-decl-spec-list-all-typespec param.specs))) (and okp (type-spec-list-formalp tyspecs) (param-declor-formalp param.declor) (endp param.attribs)))))
Theorem:
(defthm booleanp-of-param-declon-formalp (b* ((yes/no (param-declon-formalp param))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm param-declon-formalp-of-param-declon-fix-param (equal (param-declon-formalp (param-declon-fix param)) (param-declon-formalp param)))
Theorem:
(defthm param-declon-formalp-param-declon-equiv-congruence-on-param (implies (param-declon-equiv param param-equiv) (equal (param-declon-formalp param) (param-declon-formalp param-equiv))) :rule-classes :congruence)