Filtering...

sublis-var

books/system/sublis-var
other
(in-package "ACL2")
other
(verify-termination quote-listp)
character-listp-make-character-listtheorem
(defthm character-listp-make-character-list
  (character-listp (make-character-list x)))
other
(verify-termination cons-term1)
other
(verify-termination cons-term)
other
(verify-termination cons-term1-mv2)
other
(verify-termination sublis-var1
  (declare (xargs :verify-guards nil)))
local
(local (defun sublis-var1-flg
    (flg alist x)
    (cond (flg (cond ((endp x) (mv nil x))
          (t (mv-let (changedp1 term)
              (sublis-var1-flg nil alist (car x))
              (mv-let (changedp2 lst)
                (sublis-var1-flg t alist (cdr x))
                (cond ((or changedp1 changedp2) (mv t (cons term lst)))
                  (t (mv nil x))))))))
      (t (cond ((variablep x) (let ((a (assoc-eq x alist)))
              (cond (a (mv (not (eq x (cdr a))) (cdr a))) (t (mv nil x)))))
          ((fquotep x) (mv nil x))
          (t (mv-let (changedp lst)
              (sublis-var1-flg t alist (fargs x))
              (let ((fn (ffn-symb x)))
                (cond (changedp (mv t (cons-term fn lst)))
                  ((and (symbolp fn) (quote-listp lst)) (cons-term1-mv2 fn lst x))
                  (t (mv nil x)))))))))))
local
(local (defthmd sublis-var1-flg-property
    (equal (sublis-var1-flg flg alist x)
      (if flg
        (sublis-var1-lst alist x)
        (sublis-var1 alist x)))))
pseudo-termp-cdr-assoc-equaltheorem
(defthm pseudo-termp-cdr-assoc-equal
  (implies (pseudo-term-listp (strip-cdrs alist))
    (pseudo-termp (cdr (assoc-equal x alist)))))
local
(local (defthm sublis-var1-flg-preserves-len
    (implies flg
      (equal (len (mv-nth 1 (sublis-var1-flg flg alist x)))
        (len x)))))
local
(local (defthm pseudo-termp-sublis-var1-flg
    (implies (and (symbol-alistp alist)
        (pseudo-term-listp (strip-cdrs alist))
        (if flg
          (pseudo-term-listp x)
          (pseudo-termp x)))
      (if flg
        (pseudo-term-listp (mv-nth 1 (sublis-var1-flg flg alist x)))
        (pseudo-termp (mv-nth 1 (sublis-var1-flg flg alist x)))))
    :rule-classes nil))
pseudo-termp-sublis-var1theorem
(defthm pseudo-termp-sublis-var1
  (implies (and (symbol-alistp alist)
      (pseudo-term-listp (strip-cdrs alist))
      (pseudo-termp x))
    (pseudo-termp (mv-nth 1 (sublis-var1 alist x))))
  :hints (("Goal" :in-theory (enable sublis-var1-flg-property)
     :use ((:instance pseudo-termp-sublis-var1-flg (flg nil))))))
pseudo-termp-sublis-var1-lsttheorem
(defthm pseudo-termp-sublis-var1-lst
  (implies (and (symbol-alistp alist)
      (pseudo-term-listp (strip-cdrs alist))
      (pseudo-term-listp x))
    (pseudo-term-listp (mv-nth 1 (sublis-var1-lst alist x))))
  :hints (("Goal" :in-theory (enable sublis-var1-flg-property)
     :use ((:instance pseudo-termp-sublis-var1-flg (flg t))))))
local
(local (defthm pseudo-termp-implies-pseudo-term-listp-cdr
    (implies (and (pseudo-termp x)
        (consp x)
        (not (equal (car x) 'quote)))
      (pseudo-term-listp (cdr x)))))
local
(local (defthm pseudo-term-listp-implies-true-listp
    (implies (pseudo-term-listp x) (true-listp x))))
other
(verify-guards sublis-var1)
other
(verify-termination sublis-var)
other
(verify-termination sublis-var-lst)