• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Recursion-and-induction
      • Hons-and-memoization
        • Memoize
        • Fast-alists
          • Slow-alist-warning
          • Hons-acons
          • Fast-alist-fork
          • Hons-acons!
          • With-fast-alist
          • Fast-alist-clean
          • Fast-alist-pop
          • Hons-get
          • Fast-alist-free
          • Fast-alist-pop*
          • Hons-assoc-equal
            • Std/alists/hons-assoc-equal
          • Make-fast-alist
          • Make-fal
          • Fast-alist-free-on-exit
          • With-stolen-alist
          • Fast-alist-fork!
          • Fast-alist-summary
          • Fast-alist-clean!
          • Fast-alist-len
          • With-stolen-alists
          • Fast-alists-free-on-exit
          • Cons-subtrees
          • With-fast-alists
          • Hons-dups-p1
          • Ansfl
          • Hons-revappend
          • Hons-member-equal
          • Hons-make-list
          • Hons-reverse
          • Hons-list*
          • Hons-list
          • Hons-append
        • Hons
        • Set-max-mem
        • Hons-enabled
        • Unmemoize
        • Number-subtrees
      • Events
      • Parallelism
      • History
      • Programming
      • Operational-semantics
      • Real
      • Start-here
      • Miscellaneous
      • Output-controls
      • Bdd
      • Macros
      • Installation
      • Mailing-lists
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
    • Math
    • Testing-utilities
  • Fast-alists
  • ACL2-built-ins

Hons-assoc-equal

(hons-assoc-equal key alist) is not fast; it serves as the logical definition for hons-get.

The definition of hons-assoc-equal is similar to that of assoc-equal, except that (1) it does not require alistp as a guard, and (2) it "skips over" any non-conses when its alist argument is malformed.

We typically leave hons-get enabled and reason about hons-assoc-equal instead. One benefit of this approach is that it avoids certain "false" discipline warnings that might arise from execution during theorem proving.

Function: hons-assoc-equal

(defun hons-assoc-equal (key alist)
  (declare (xargs :guard t))
  (cond ((atom alist) nil)
        ((and (consp (car alist))
              (hons-equal key (caar alist)))
         (car alist))
        (t (hons-assoc-equal key (cdr alist)))))

Subtopics

Std/alists/hons-assoc-equal
Lemmas about hons-assoc-equal available in the std/alists library.