• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
        • Error-checking
        • Fty-extensions
        • Isar
        • Kestrel-utilities
        • Set
        • C
        • Soft
        • Bv
        • Imp-language
        • Ethereum
        • Event-macros
        • Java
        • Riscv
        • Bitcoin
        • Zcash
        • Yul
          • Transformations
            • Renaming-variables
            • Dead-code-eliminator
            • Renamings
            • Disambiguator
            • Unique-variables
              • Statements/blocks/cases/fundefs-unique-vars
              • Var-unique-vars
              • Var-list-unique-vars
                • Statements/blocks/cases/fundefs-unique-vars-extend
              • Dead-code-eliminator-static-safety
              • No-function-definitions
              • Unique-functions
              • Renaming-functions
              • Dead-code-eliminator-no-loop-initializers
              • Dead-code-eliminator-no-function-definitions
              • No-loop-initializers
              • For-loop-init-rewriter
            • Language
            • Yul-json
          • ACL2-programming-language
          • Prime-fields
          • Json
          • Syntheto
          • File-io-light
          • Cryptography
          • Number-theory
          • Axe
          • Lists-light
          • Builtins
          • Solidity
          • Helpers
          • Htclient
          • Typed-lists-light
          • Arithmetic-light
        • X86isa
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Unique-variables

    Var-list-unique-vars

    Check that all the variables in a list are unique.

    Signature
    (var-list-unique-vars vars allvars) → new-allvars
    Arguments
    vars — Guard (identifier-listp vars).
    allvars — Guard (identifier-setp allvars).
    Returns
    new-allvars — Type (identifier-set-resultp new-allvars).

    This lifts var-unique-vars to lists.

    This is very similar to add-vars, but it has a different purpose.

    Definitions and Theorems

    Function: var-list-unique-vars

    (defun var-list-unique-vars (vars allvars)
      (declare (xargs :guard (and (identifier-listp vars)
                                  (identifier-setp allvars))))
      (let ((__function__ 'var-list-unique-vars))
        (declare (ignorable __function__))
        (b* (((when (endp vars))
              (identifier-set-fix allvars))
             ((okf allvars)
              (var-unique-vars (car vars) allvars)))
          (var-list-unique-vars (cdr vars)
                                allvars))))

    Theorem: identifier-set-resultp-of-var-list-unique-vars

    (defthm identifier-set-resultp-of-var-list-unique-vars
      (b* ((new-allvars (var-list-unique-vars vars allvars)))
        (identifier-set-resultp new-allvars))
      :rule-classes :rewrite)

    Theorem: var-list-unique-vars-to-set-list-insert

    (defthm var-list-unique-vars-to-set-list-insert
      (b* ((allvars1 (var-list-unique-vars vars allvars)))
        (implies
             (not (reserrp allvars1))
             (equal allvars1
                    (set::list-insert (identifier-list-fix vars)
                                      (identifier-set-fix allvars))))))

    Theorem: var-list-unique-vars-of-identifier-list-fix-vars

    (defthm var-list-unique-vars-of-identifier-list-fix-vars
      (equal (var-list-unique-vars (identifier-list-fix vars)
                                   allvars)
             (var-list-unique-vars vars allvars)))

    Theorem: var-list-unique-vars-identifier-list-equiv-congruence-on-vars

    (defthm
          var-list-unique-vars-identifier-list-equiv-congruence-on-vars
      (implies (identifier-list-equiv vars vars-equiv)
               (equal (var-list-unique-vars vars allvars)
                      (var-list-unique-vars vars-equiv allvars)))
      :rule-classes :congruence)

    Theorem: var-list-unique-vars-of-identifier-set-fix-allvars

    (defthm var-list-unique-vars-of-identifier-set-fix-allvars
      (equal (var-list-unique-vars vars (identifier-set-fix allvars))
             (var-list-unique-vars vars allvars)))

    Theorem: var-list-unique-vars-identifier-set-equiv-congruence-on-allvars

    (defthm
        var-list-unique-vars-identifier-set-equiv-congruence-on-allvars
      (implies (identifier-set-equiv allvars allvars-equiv)
               (equal (var-list-unique-vars vars allvars)
                      (var-list-unique-vars vars allvars-equiv)))
      :rule-classes :congruence)