Included Books
other
(in-package "ACL2")
include-book
(include-book "alist-defuns")
put-assoc-equal-identitytheorem
(defthm put-assoc-equal-identity (implies (and (assoc-equal k x) (alistp x) (equal v (cdr (assoc-equal k x)))) (equal (put-assoc-equal k v x) x)) :hints (("Goal" :in-theory (enable assoc-equal put-assoc-equal))))
hons-assoc-equal-of-put-assoc-equaltheorem
(defthm hons-assoc-equal-of-put-assoc-equal (equal (hons-assoc-equal k (put-assoc-equal k1 v x)) (if (equal k k1) (cons k v) (hons-assoc-equal k x))) :hints (("Goal" :in-theory (enable hons-assoc-equal put-assoc-equal))))
local
(local (defthm fal-extract-of-acons-non-mem (implies (not (member-equal k keys)) (equal (fal-extract keys (cons (cons k v) x)) (fal-extract keys x))) :hints (("Goal" :in-theory (enable fal-extract)))))
local
(local (defthm car-hons-assoc-equal (equal (car (hons-assoc-equal k x)) (and (hons-assoc-equal k x) k))))
fal-extract-of-put-assoc-equaltheorem
(defthm fal-extract-of-put-assoc-equal (implies (and (no-duplicatesp-equal keys) (hons-assoc-equal k x)) (equal (fal-extract keys (put-assoc-equal k v x)) (if (member-equal k keys) (put-assoc-equal k v (fal-extract keys x)) (fal-extract keys x)))) :hints (("Goal" :in-theory (enable fal-extract put-assoc-equal))))
local
(local (defthm member-alist-keys (iff (member-equal k (alist-keys x)) (hons-assoc-equal k x)) :hints (("Goal" :in-theory (enable alist-keys)))))
no-duplicate-keys-of-put-assoc-equaltheorem
(defthm no-duplicate-keys-of-put-assoc-equal (implies (and (no-duplicatesp-equal (alist-keys x)) (alistp x)) (no-duplicatesp-equal (alist-keys (put-assoc-equal k v x)))) :hints (("Goal" :in-theory (enable alist-keys no-duplicatesp-equal put-assoc-equal))))
put-assoc-equal-alternatetheorem
(defthm put-assoc-equal-alternate (implies (hons-assoc-equal k1 x) (equal (put-assoc-equal k1 v1 (put-assoc-equal k2 v2 (put-assoc-equal k1 v3 x))) (put-assoc-equal k1 v1 (put-assoc-equal k2 v2 x)))) :hints (("Goal" :in-theory (enable put-assoc-equal))))
put-assoc-equal-redundanttheorem
(defthm put-assoc-equal-redundant (equal (put-assoc-equal k1 v1 (put-assoc-equal k1 v2 x)) (put-assoc-equal k1 v1 x)) :hints (("Goal" :in-theory (enable put-assoc-equal))))
alist-keys-of-put-assoc-equaltheorem
(defthm alist-keys-of-put-assoc-equal (implies (or (alistp x) k) (equal (alist-keys (put-assoc-equal k v x)) (if (hons-assoc-equal k x) (alist-keys x) (append (alist-keys x) (list k))))) :hints (("Goal" :in-theory (enable alist-keys put-assoc-equal))))
remove-assoc-equal-of-put-assoc-equaltheorem
(defthm remove-assoc-equal-of-put-assoc-equal (equal (remove-assoc-equal name (put-assoc-equal name val x)) (remove-assoc-equal name x)) :hints (("Goal" :in-theory (enable remove-assoc-equal put-assoc-equal))))
alistp-of-put-assoc-equaltheorem
(defthm alistp-of-put-assoc-equal (implies (alistp x) (alistp (put-assoc-equal k v x))))