/usr/share/acl2-7.1/books/meta/pseudo-termp-lemmas.lisp is in acl2-books-source 7.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | ; By John Cowles, modified by Matt Kaufmann and Sol Swords
(in-package "ACL2")
(defthm pseudo-term-listp-cdr
(implies (and (pseudo-termp x)
(not (equal (car x) 'quote)))
(pseudo-term-listp (cdr x))))
(defthm pseudo-termp-opener
(implies (and (consp x)
(symbolp (car x))
(not (equal (car x) 'quote)))
(equal (pseudo-termp x)
(pseudo-term-listp (cdr x)))))
(defthm pseudo-term-listp-of-atom
(implies (not (consp x))
(equal (pseudo-term-listp x)
(equal x nil)))
:rule-classes ((:rewrite :backchain-limit-lst 0)))
(defthm pseudo-term-listp-of-cons
(equal (pseudo-term-listp (cons a x))
(and (pseudo-termp a)
(pseudo-term-listp x))))
(defthm pseudo-termp-list-cdr
(implies (pseudo-term-listp x)
(pseudo-term-listp (cdr x))))
(defthm pseudo-termp-car
(implies (pseudo-term-listp x)
(pseudo-termp (car x))))
(defthm pseudo-termp-cadr-from-pseudo-term-listp
(implies (pseudo-term-listp x)
(pseudo-termp (cadr x))))
(defthm pseudo-term-listp-append
(implies (and (pseudo-term-listp x)
(pseudo-term-listp y))
(pseudo-term-listp (append x y))))
(defund pseudo-term-substp (x)
(declare (xargs :guard t))
(if (atom x)
(eq x nil)
(and (consp (car x))
(symbolp (caar x))
(pseudo-termp (cdar x))
(pseudo-term-substp (cdr x)))))
(local (in-theory (enable pseudo-term-substp)))
(defthm pseudo-termp-of-lookup-in-subst
(implies (pseudo-term-substp x)
(pseudo-termp (cdr (assoc k x)))))
(defthm pseudo-term-substp-of-acons
(equal (pseudo-term-substp (cons (cons k v) x))
(and (symbolp k)
(pseudo-termp v)
(pseudo-term-substp x))))
(defthm pseudo-term-substp-of-atom
(implies (not (consp x))
(equal (pseudo-term-substp x)
(equal x nil)))
:rule-classes ((:rewrite :backchain-limit-lst 0)))
(defthm pseudo-term-substp-of-pairlis
(implies (and (symbol-listp x)
(pseudo-term-listp y))
(pseudo-term-substp (pairlis$ x y))))
(defthm pseudo-term-substp-of-append
(implies (and (pseudo-term-substp a)
(pseudo-term-substp b))
(pseudo-term-substp (append a b))))
(defund pseudo-term-val-alistp (x)
(declare (xargs :guard t))
(if (atom x)
(eq x nil)
(and (consp (car x))
(pseudo-termp (cdar x))
(pseudo-term-val-alistp (cdr x)))))
(local (in-theory (enable pseudo-term-val-alistp)))
(defthm pseudo-termp-of-lookup-in-pseudo-term-val-alistp
(implies (pseudo-term-val-alistp x)
(pseudo-termp (cdr (assoc k x)))))
(defthm pseudo-term-val-alistp-of-acons
(equal (pseudo-term-val-alistp (cons (cons k v) x))
(and (pseudo-termp v)
(pseudo-term-val-alistp x))))
(defthm pseudo-term-val-alistp-of-atom
(implies (not (consp x))
(equal (pseudo-term-val-alistp x)
(equal x nil)))
:rule-classes ((:rewrite :backchain-limit-lst 0)))
(defthm pseudo-term-val-alistp-of-pairlis
(implies (pseudo-term-listp y)
(pseudo-term-val-alistp (pairlis$ x y))))
(defthm pseudo-term-val-alistp-of-append
(implies (and (pseudo-term-val-alistp a)
(pseudo-term-val-alistp b))
(pseudo-term-val-alistp (append a b))))
|