Filtering...

find-matching

books/clause-processors/find-matching

Included Books

other
(in-package "ACL2")
include-book
(include-book "unify-subst")
find-matchmutual-recursion
(mutual-recursion (defun find-match
    (pat x initial-alist)
    (declare (xargs :guard (and (pseudo-termp pat)
          (pseudo-termp x)
          (alistp initial-alist))))
    (b* (((mv match ?alist) (simple-one-way-unify pat x initial-alist)) ((when match) (mv t x))
        ((when (or (variablep x) (fquotep x))) (mv nil nil)))
      (find-match-list pat (cdr x) initial-alist)))
  (defun find-match-list
    (pat x initial-alist)
    (declare (xargs :guard (and (pseudo-termp pat)
          (pseudo-term-listp x)
          (alistp initial-alist))))
    (b* (((when (atom x)) (mv nil nil)) ((mv ok subterm) (find-match pat (car x) initial-alist))
        ((when ok) (mv ok subterm)))
      (find-match-list pat (cdr x) initial-alist))))
find-matching-literal-in-clausefunction
(defun find-matching-literal-in-clause
  (pat clause initial-alist)
  (declare (xargs :guard (and (pseudo-termp pat)
        (pseudo-term-listp clause)
        (alistp initial-alist))))
  (b* (((when (atom clause)) (mv nil nil)) ((mv match ?alist) (simple-one-way-unify pat (car clause) initial-alist))
      ((when match) (mv t (car clause))))
    (find-matching-literal-in-clause pat
      (cdr clause)
      initial-alist)))
find-matchesmutual-recursion
(mutual-recursion (defun find-matches
    (pat x initial-alist)
    (declare (xargs :guard (and (pseudo-termp pat)
          (pseudo-termp x)
          (alistp initial-alist))))
    (b* (((mv match ?alist) (simple-one-way-unify pat x initial-alist)) ((when (or (variablep x) (fquotep x))) (and match (list x)))
        (rest (find-matches-list pat (cdr x) initial-alist)))
      (if match
        (cons x rest)
        rest)))
  (defun find-matches-list
    (pat x initial-alist)
    (declare (xargs :guard (and (pseudo-termp pat)
          (pseudo-term-listp x)
          (alistp initial-alist))))
    (if (atom x)
      nil
      (append (find-matches pat (car x) initial-alist)
        (find-matches-list pat (cdr x) initial-alist)))))
other
(make-flag find-matches-flg find-matches)
other
(defthm-find-matches-flg (defthm pseudo-termp-find-match
    (implies (pseudo-termp x)
      (pseudo-termp (mv-nth 1 (find-match pat x initial-alist))))
    :flag find-matches)
  (defthm pseudo-termp-find-match-list
    (implies (pseudo-term-listp x)
      (pseudo-termp (mv-nth 1 (find-match-list pat x initial-alist))))
    :flag find-matches-list))
other
(defthm-find-matches-flg (defthm pseudo-term-listp-find-matches
    (implies (pseudo-termp x)
      (pseudo-term-listp (find-matches pat x initial-alist)))
    :flag find-matches)
  (defthm pseudo-term-listp-find-matches-list
    (implies (pseudo-term-listp x)
      (pseudo-term-listp (find-matches-list pat x initial-alist)))
    :flag find-matches-list))