• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
      • Legacy-defrstobj
      • Proof-checker-array
      • Soft
      • C
      • Farray
      • Rp-rewriter
      • Instant-runoff-voting
      • Imp-language
      • Sidekick
      • Leftist-trees
      • Java
      • Taspi
      • Bitcoin
      • Riscv
      • Des
      • Ethereum
      • X86isa
      • Sha-2
      • 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
        • Proof-checker-itp13
        • Regex
        • ACL2-programming-language
        • Json
        • Jfkr
        • Equational
        • Cryptography
        • Poseidon
        • Where-do-i-place-my-book
        • Axe
        • Bigmems
        • Builtins
        • Execloader
        • Aleo
        • Solidity
        • Paco
        • Concurrent-programs
        • Bls12-377-curves
      • Debugging
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • 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)