1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
; (include-book "m1")
; (certify-book "defsys-utilities" 1)
(in-package "M1")
(defthm about-make-state
(and (true-listp (make-state pc locs stk prog))
(equal (len (make-state pc locs stk prog)) 4))
:hints (("Goal" :in-theory (enable make-state))))
(defun name-locals (names locals i)
(cond ((endp names) t)
((equal (car names) (nth i locals))
(name-locals (cdr names) locals (+ i 1)))
(t nil)))
(defthm name-locals-opener
(and (equal (name-locals nil locals i) t)
(equal (name-locals (cons name names) locals i)
(and (equal name (nth i locals))
(name-locals names locals (+ 1 i))))))
(defun name-locals-locals-gen-hint (names junk)
(if (endp names)
junk
(name-locals-locals-gen-hint (cdr names)
(append junk (list (car names))))))
(defthm append-assoc
(equal (append (append a b) c) (append a (append b c))))
(defthm len-append
(equal (len (append a b)) (+ (len a) (len b))))
(defthm nth-len-append
(equal (nth (len a) (append a b))
(car b)))
(defthm name-locals-locals-gen
(equal (name-locals names (append junk names) (len junk))
t)
:hints (("Goal" :induct (name-locals-locals-gen-hint names junk)))
:rule-classes nil)
(defthm name-locals-locals
(equal (name-locals names names 0) t)
:hints (("Goal" :use (:instance name-locals-locals-gen
(junk nil)))))
(defun update-nth* (i lst locals)
(cond ((endp lst) locals)
(t (update-nth i (car lst)
(update-nth* (+ i 1) (cdr lst) locals)))))
(defthm update-nth*-opener
(and (equal (update-nth* i nil locals) locals)
(equal (update-nth* i (cons x lst) locals)
(update-nth i x (update-nth* (+ i 1) lst locals)))))
(defthm len-update-nth-nil
(implies (natp i)
(equal (len (update-nth i v nil))
(+ 1 i))))
(defthm len-update-nth-inequality
(<= (len x) (len (update-nth i v x)))
:rule-classes :linear)
; The :rewrite rule len-update-nth causes case splits that prevent us
; from establishing some of the READY-AT hypotheses. It seems to be sufficient
; to know just the weaker :linear result, just proved. So we disable the rewrite rule.
(in-theory (disable len-update-nth))
(defthm update-nth-noop
(implies (and (natp i)
(< i (len x)))
(equal (update-nth i (nth i x) x) x)))
(defun number-of-explicit-elements (x)
(cond ((atom x) 0)
((quotep x)
(cond ((true-listp (car (cdr x)))
(len (car (cdr x))))
((consp (car (cdr x)))
(+ 1 (number-of-explicit-elements
(kwote (cdr (car (cdr x)))))))
(t 0)))
((eq (acl2::ffn-symb x) 'cons)
(+ 1 (number-of-explicit-elements (acl2::fargn x 2))))
(t 0)))
(defthm nth-cons
(and (equal (nth 0 (cons e x)) e)
(implies (and (natp n)
(syntaxp
(and (quotep n)
(natp (car (cdr n)))
(<= (car (cdr n))
(number-of-explicit-elements x)))))
(equal (nth (+ 1 n) (cons e x))
(nth n x)))))
(defthm true-listp-m1-update-nth-nil
(true-listp (update-nth i v nil)))
(defthm true-listp-m1-update-nth
(implies (true-listp x)
(true-listp (update-nth i v x))))
(in-theory (disable nth-alt-def nth-add1! update-nth))
(defthm true-listp-locals-step
(implies (true-listp (locals s))
(true-listp (locals (step s))))
:hints (("Goal" :in-theory (enable step))))
(defthm true-listp-locals-m1
(implies (true-listp (locals s))
(true-listp (locals (m1 s n))))
:hints (("Goal" :in-theory (enable m1))))
(defthm len-locals-step
(<= (len (locals s))
(len (locals (step s))))
:hints (("Goal" :in-theory (enable step)))
:rule-classes :linear)
(defthm len-locals-m1
(<= (len (locals s))
(len (locals (m1 s n))))
:hints (("Goal" :in-theory (enable m1)))
:rule-classes :linear)
(defthm s-is-make-state-s
(implies (and (true-listp s)
(equal (len s) 4)
(equal (pc s) pc)
(equal (program s) program))
(equal (equal s (make-state pc (locals s) (stack s) program))
t))
:hints (("Goal" :in-theory (enable make-state))))
|