• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
      • Std/lists
        • Std/lists/abstract
        • Rev
        • Defsort
        • List-fix
        • Std/lists/nth
        • Hons-remove-duplicates
        • Std/lists/update-nth
        • Set-equiv
        • Duplicity
          • Duplicity-badguy
            • Duplicity-badguy1
          • No-duplicatesp-equal-same-by-duplicity
        • Prefixp
        • Std/lists/take
        • Std/lists/intersection$
        • Nats-equiv
        • Repeat
        • Index-of
        • All-equalp
        • Sublistp
        • Std/lists/nthcdr
        • Listpos
        • List-equiv
        • Final-cdr
        • Std/lists/append
        • Std/lists/remove
        • Subseq-list
        • Rcons
        • Std/lists/revappend
        • Std/lists/remove-duplicates-equal
        • Std/lists/reverse
        • Std/lists/last
        • Std/lists/resize-list
        • Flatten
        • Suffixp
        • Std/lists/butlast
        • Std/lists/set-difference
        • Std/lists/len
        • Std/lists/intersectp
        • Std/lists/true-listp
        • Intersectp-witness
        • Subsetp-witness
        • Std/lists/remove1-equal
        • Rest-n
        • First-n
        • Std/lists/union
        • Std/lists/add-to-set
        • Append-without-guard
        • Std/lists/subsetp
        • Std/lists/member
      • Std/alists
      • Obags
      • Std/util
      • Std/strings
      • Std/osets
      • Std/io
      • Std/basic
      • Std/system
      • Std/typed-lists
      • Std/bitsets
      • Std/testing
      • Std/typed-alists
      • Std/stobjs
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
    • Math
    • Testing-utilities
  • Duplicity
  • No-duplicatesp-equal-same-by-duplicity

Duplicity-badguy

(duplicity-badguy x) finds an element that occurs multiple times in the list x, if one exists.

This function is central to our proof of no-duplicatesp-equal-same-by-duplicity, a pick-a-point style strategy for proving that no-duplicatesp holds of a list by reasoning about duplicity of an arbitrary element.

Definitions and Theorems

Function: duplicity-badguy

(defun duplicity-badguy (x)
  (declare (xargs :guard t))
  (duplicity-badguy1 x x))

Theorem: duplicity-badguy-exists

(defthm duplicity-badguy-exists
  (implies (duplicity-badguy x)
           (member-equal (car (duplicity-badguy x))
                         x)))

Theorem: duplicity-badguy-has-high-duplicity

(defthm duplicity-badguy-has-high-duplicity
  (implies (duplicity-badguy x)
           (< 1
              (duplicity (car (duplicity-badguy x))
                         x))))

Theorem: duplicity-badguy-is-complete

(defthm duplicity-badguy-is-complete
  (implies (< 1 (duplicity a x))
           (duplicity-badguy x)))

Theorem: duplicity-badguy-under-iff

(defthm duplicity-badguy-under-iff
  (iff (duplicity-badguy x)
       (not (no-duplicatesp-equal x))))

Subtopics

Duplicity-badguy1
(duplicity-badguy1 dom x) finds the first element of dom whose duplicity in x exceeds 1, if such a member exists.