• 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
          • Language
            • Abstract-syntax
            • Dynamic-semantics
            • Concrete-syntax
            • Static-soundness
            • Static-semantics
              • Static-safety-checking
                • Check-safe-statements/blocks/cases/fundefs
                • Check-safe-expressions
                • Check-safe-fundef-list
                • Check-safe-variable-multi
                • Check-safe-variable-single
                • Check-safe-assign-multi
                • Check-safe-assign-single
                • Check-safe-path
                • Check-safe-extends-varset
                • Vars+modes
                • Add-vars
                • Add-var
                  • Add-funtypes
                  • Check-safe-literal
                  • Funtype
                  • Get-funtype
                  • Check-var
                  • Check-safe-top-block
                  • Check-safe-path-list
                  • Vars+modes-result
                  • Funtype-result
                  • Funtable-result
                  • Funtable-for-fundefs
                  • Funtype-for-fundef
                  • Funtable
                • Static-shadowing-checking
                • Mode-set-result
                • Literal-evaluation
                • Static-identifier-checking
                • Static-safety-checking-evm
                • Mode-set
                • Modes
              • Errors
            • 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
    • Static-safety-checking

    Add-var

    Add a variable to a variable table.

    Signature
    (add-var var varset) → varset?
    Arguments
    var — Guard (identifierp var).
    varset — Guard (identifier-setp varset).
    Returns
    varset? — Type (identifier-set-resultp varset?).

    If a variable with the same name is already in the table, an error is returned.

    If this function does not return an error, it is equivalent to insert.

    Definitions and Theorems

    Function: add-var

    (defun add-var (var varset)
      (declare (xargs :guard (and (identifierp var)
                                  (identifier-setp varset))))
      (let ((__function__ 'add-var))
        (declare (ignorable __function__))
        (b* ((var (identifier-fix var))
             (varset (identifier-set-fix varset)))
          (if (in var varset)
              (reserrf (list :duplicate-variable var))
            (insert var varset)))))

    Theorem: identifier-set-resultp-of-add-var

    (defthm identifier-set-resultp-of-add-var
      (b* ((varset? (add-var var varset)))
        (identifier-set-resultp varset?))
      :rule-classes :rewrite)

    Theorem: add-var-to-set-insert

    (defthm add-var-to-set-insert
      (b* ((varset1 (add-var var varset)))
        (implies (not (reserrp varset1))
                 (equal varset1
                        (insert (identifier-fix var)
                                (identifier-set-fix varset))))))

    Theorem: add-var-of-identifier-fix-var

    (defthm add-var-of-identifier-fix-var
      (equal (add-var (identifier-fix var) varset)
             (add-var var varset)))

    Theorem: add-var-identifier-equiv-congruence-on-var

    (defthm add-var-identifier-equiv-congruence-on-var
      (implies (identifier-equiv var var-equiv)
               (equal (add-var var varset)
                      (add-var var-equiv varset)))
      :rule-classes :congruence)

    Theorem: add-var-of-identifier-set-fix-varset

    (defthm add-var-of-identifier-set-fix-varset
      (equal (add-var var (identifier-set-fix varset))
             (add-var var varset)))

    Theorem: add-var-identifier-set-equiv-congruence-on-varset

    (defthm add-var-identifier-set-equiv-congruence-on-varset
      (implies (identifier-set-equiv varset varset-equiv)
               (equal (add-var var varset)
                      (add-var var varset-equiv)))
      :rule-classes :congruence)