Filtering...

magic-ev

books/clause-processors/magic-ev

Included Books

other
(in-package "ACL2")
include-book
(include-book "std/util/bstar" :dir :system)
magic-evmutual-recursion
(mutual-recursion (defun magic-ev
    (x alist state hard-errp aokp)
    (declare (xargs :guard (and (pseudo-termp x) (symbol-alistp alist))
        :verify-guards nil
        :stobjs state))
    (cond ((not x) (mv nil nil))
      ((atom x) (mv nil (cdr (assoc-eq x alist))))
      ((eq (car x) 'quote) (mv nil (cadr x)))
      ((consp (car x)) (b* (((mv err args) (magic-ev-lst (cdr x) alist state hard-errp aokp)) ((when err) (mv err args))
            (new-alist (pairlis$ (cadar x) args)))
          (magic-ev (caddar x) new-alist state hard-errp aokp)))
      ((eq (car x) 'if) (b* (((mv err test) (magic-ev (cadr x) alist state hard-errp aokp)) ((when err) (mv err test)))
          (if test
            (if (equal (cadr x) (caddr x))
              (mv nil test)
              (magic-ev (caddr x) alist state hard-errp aokp))
            (magic-ev (cadddr x) alist state hard-errp aokp))))
      (t (b* (((mv err args) (magic-ev-lst (cdr x) alist state hard-errp aokp)) ((when err) (mv err args))
            ((when (programp (car x) (w state))) (mv (msg "program mode: ~x0" (car x)) nil)))
          (magic-ev-fncall (car x) args state hard-errp aokp)))))
  (defun magic-ev-lst
    (x alist state hard-errp aokp)
    (declare (xargs :guard (and (pseudo-term-listp x) (symbol-alistp alist))
        :stobjs state))
    (if (endp x)
      (mv nil nil)
      (b* (((mv err first) (magic-ev (car x) alist state hard-errp aokp)) ((when err) (mv err first))
          ((mv err rest) (magic-ev-lst (cdr x) alist state hard-errp aokp))
          ((when err) (mv err rest)))
        (mv nil (cons first rest))))))
len-of-magic-ev-lsttheorem
(defthm len-of-magic-ev-lst
  (b* (((mv err val) (magic-ev-lst x alist state hard-errp aokp)))
    (implies (not err) (equal (len val) (len x)))))
true-listp-magic-ev-lsttheorem
(defthm true-listp-magic-ev-lst
  (b* (((mv err val) (magic-ev-lst x alist state hard-errp aokp)))
    (implies (not err) (true-listp val)))
  :hints (("goal" :induct (len x)
     :expand ((magic-ev-lst x alist state hard-errp aokp)))))
symbol-alistp-pairlistheorem
(defthm symbol-alistp-pairlis
  (implies (symbol-listp keys)
    (symbol-alistp (pairlis$ keys vals))))
other
(verify-guards magic-ev
  :hints ((and stable-under-simplificationp
     '(:expand ((pseudo-termp x))))))