Check if a structure or union specifier has no members, returning the name if the check passes.
(check-struni-spec-no-members struni-spec) → ident?
If the specifier is empty (i.e. has no members or name), we throw a hard error, because the specifier does not conform to the concrete syntax.
Function:
(defun check-struni-spec-no-members (struni-spec) (declare (xargs :guard (struni-specp struni-spec))) (let ((__function__ 'check-struni-spec-no-members)) (declare (ignorable __function__)) (b* (((struni-spec struni-spec) struni-spec) ((when struni-spec.members) nil) ((unless struni-spec.name?) (raise "Misusage error: empty structure or union specifier."))) struni-spec.name?)))
Theorem:
(defthm ident-optionp-of-check-struni-spec-no-members (b* ((ident? (check-struni-spec-no-members struni-spec))) (ident-optionp ident?)) :rule-classes :rewrite)
Theorem:
(defthm check-struni-spec-no-members-of-struni-spec-fix-struni-spec (equal (check-struni-spec-no-members (struni-spec-fix struni-spec)) (check-struni-spec-no-members struni-spec)))
Theorem:
(defthm check-struni-spec-no-members-struni-spec-equiv-congruence-on-struni-spec (implies (struni-spec-equiv struni-spec struni-spec-equiv) (equal (check-struni-spec-no-members struni-spec) (check-struni-spec-no-members struni-spec-equiv))) :rule-classes :congruence)