#|$ACL2s-Preamble$; (include-book "primitives") (begin-book t :ttags :all);$ACL2s-Preamble$|# (in-package "M5") ; Arithmetic (include-book "arithmetic-3/extra/top-ext" :dir :system) ; Basic List Processing (defthm put-nth-opener (and (equal (put-nth 0 v lst) (cons v (cdr lst))) (implies (natp n) (equal (put-nth (+ 1 n) v lst) (cons (car lst) (put-nth n v (cdr lst)))))) :hints (("Goal" :induct (put-nth n v lst)))) ; Stacks (defthm stacks (and (equal (top (push x s)) x) (equal (pop (push x s)) s) (equal (top (cons x s)) x) (equal (pop (cons x s)) s))) (in-theory (disable push top pop)) ; Instructions ; Binding Environments (defthm bind-bind-3 (implies (and (not (equal var1 var2)) (boundp var2 alist)) (equal (bind var1 val1 (bind var2 val2 alist)) (bind var2 val2 (bind var1 val1 alist)))) :rule-classes ((:rewrite :loop-stopper ((var1 var2))))) (defthm bind-bind-2 (implies (and (not (equal var1 var2)) (boundp var1 alist)) (equal (bind var1 val1 (bind var2 val2 alist)) (bind var2 val2 (bind var1 val1 alist)))) :rule-classes ((:rewrite :loop-stopper ((var1 var2))))) (defthm bind-bind-1 (equal (bind var val1 (bind var val2 alist)) (bind var val1 alist))) (defthm binding-bind (equal (binding var1 (bind var2 val2 alist)) (if (equal var1 var2) val2 (binding var1 alist))))#|ACL2s-ToDo-Line|#