• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • 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
        • Soft
        • C
        • Bv
        • Imp-language
        • Event-macros
        • Java
        • Bitcoin
        • Ethereum
        • 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
          • Zcash
          • ACL2-programming-language
          • Prime-fields
          • Json
          • Syntheto
          • File-io-light
          • Cryptography
          • Number-theory
          • Lists-light
          • Axe
          • Builtins
          • Solidity
          • Helpers
          • Htclient
          • Typed-lists-light
          • Arithmetic-light
        • X86isa
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Unique-variables

    Var-unique-vars

    Check that a variable is unique.

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

    Check that it does not occur in the set of all variables found so far, and add it to that set if successful.

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

    Definitions and Theorems

    Function: var-unique-vars

    (defun var-unique-vars (var allvars)
      (declare (xargs :guard (and (identifierp var)
                                  (identifier-setp allvars))))
      (let ((__function__ 'var-unique-vars))
        (declare (ignorable __function__))
        (if (in (identifier-fix var)
                (identifier-set-fix allvars))
            (reserrf (list :non-unique-var (identifier-fix var)))
          (insert (identifier-fix var)
                  (identifier-set-fix allvars)))))

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

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

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

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

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

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

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

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

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

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

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

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