Check if a list of roles of unsigned integer bits is well-formed.
(uinteger-bit-roles-wfp roles) → yes/no
According to [C17:6.2.6.2/1],
there must be exactly one value bit for each exponent
in a range from 0 to
Function:
(defun uinteger-bit-roles-wfp (roles) (declare (xargs :guard (uinteger-bit-role-listp roles))) (let ((__function__ 'uinteger-bit-roles-wfp)) (declare (ignorable __function__)) (b* ((exponents (uinteger-bit-roles-exponents roles)) (n (len exponents)) ((when (= n 0)) nil) (sorted-exponents (insertion-sort exponents)) ((unless (equal sorted-exponents (acl2::integers-from-to 0 (1- n)))) nil)) t)))
Theorem:
(defthm booleanp-of-uinteger-bit-roles-wfp (b* ((yes/no (uinteger-bit-roles-wfp roles))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm uinteger-bit-roles-wfp-of-uinteger-bit-role-list-fix-roles (equal (uinteger-bit-roles-wfp (uinteger-bit-role-list-fix roles)) (uinteger-bit-roles-wfp roles)))
Theorem:
(defthm uinteger-bit-roles-wfp-uinteger-bit-role-list-equiv-congruence-on-roles (implies (uinteger-bit-role-list-equiv roles roles-equiv) (equal (uinteger-bit-roles-wfp roles) (uinteger-bit-roles-wfp roles-equiv))) :rule-classes :congruence)