Recognizer for a list of physical addresses that can accommodate a quadword
(mult-8-qword-paddr-listp xs) → *
Function:
(defun mult-8-qword-paddr-listp (xs) (declare (xargs :guard t)) (let ((__function__ 'mult-8-qword-paddr-listp)) (declare (ignorable __function__)) (if (consp xs) (and (physical-address-p (car xs)) (physical-address-p (+ 7 (car xs))) (equal (loghead 3 (car xs)) 0) (mult-8-qword-paddr-listp (cdr xs))) (equal xs nil))))
Theorem:
(defthm mult-8-qword-paddr-listp-implies-true-listp (implies (mult-8-qword-paddr-listp xs) (true-listp xs)) :rule-classes :forward-chaining)
Theorem:
(defthm mult-8-qword-paddr-listp-and-append (implies (and (mult-8-qword-paddr-listp a) (mult-8-qword-paddr-listp b)) (mult-8-qword-paddr-listp (append a b))))
Theorem:
(defthm mult-8-qword-paddr-listp-remove-duplicates-equal (implies (mult-8-qword-paddr-listp addrs) (mult-8-qword-paddr-listp (remove-duplicates-equal addrs))))
Theorem:
(defthm qword-paddrp-element-of-mult-8-qword-paddr-listp (implies (and (mult-8-qword-paddr-listp xs) (natp m) (< m (len xs))) (unsigned-byte-p 52 (nth m xs))) :rule-classes (:rewrite (:type-prescription :corollary (implies (and (mult-8-qword-paddr-listp xs) (natp m) (< m (len xs))) (natp (nth m xs))) :hints (("Goal" :in-theory '(unsigned-byte-p integer-range-p natp)))) (:linear :corollary (implies (and (mult-8-qword-paddr-listp xs) (natp m) (< m (len xs))) (and (<= 0 (nth m xs)) (< (nth m xs) 4503599627370496))) :hints (("Goal" :in-theory '(unsigned-byte-p integer-range-p (:e expt)))))))
Theorem:
(defthm nthcdr-mult-8-qword-paddr-listp (implies (mult-8-qword-paddr-listp xs) (mult-8-qword-paddr-listp (nthcdr n xs))) :rule-classes (:rewrite :type-prescription))
Theorem:
(defthm member-p-and-mult-8-qword-paddr-listp (implies (and (member-p index addrs) (mult-8-qword-paddr-listp addrs)) (and (physical-address-p index) (equal (loghead 3 index) 0))) :rule-classes (:rewrite :forward-chaining))