• 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
          • Syntax-for-tools
          • Atc
            • Atc-implementation
              • Atc-abstract-syntax
              • Atc-pretty-printer
              • Atc-event-and-code-generation
                • Atc-symbolic-computation-states
                • Atc-symbolic-execution-rules
                • Atc-gen-ext-declon-lists
                • Atc-function-and-loop-generation
                • Atc-statement-generation
                • Atc-gen-fileset
                • Atc-gen-everything
                • Atc-gen-obj-declon
                • Atc-gen-fileset-event
                • Atc-tag-tables
                • Atc-expression-generation
                • Atc-generation-contexts
                • Atc-gen-wf-thm
                • Term-checkers-atc
                • Atc-variable-tables
                • Term-checkers-common
                • Atc-gen-init-fun-env-thm
                • Atc-gen-appconds
                • Read-write-variables
                  • Write-auto-var
                  • Read-auto-var
                  • Write-static-var
                  • Write-var
                    • Read-var
                    • Read-static-var
                    • Objdesign-of-var-and-read/write-var-theorems
                    • Read-object-of-objdesign-of-var-to-read-var
                    • Write-object-of-objdesign-of-var-to-write-var
                  • Atc-gen-thm-assert-events
                  • Test*
                  • Atc-gen-prog-const
                  • Atc-gen-expr-bool
                  • Atc-theorem-generation
                  • Atc-tag-generation
                  • Atc-gen-expr-pure
                  • Atc-function-tables
                  • Atc-object-tables
                • Fty-pseudo-term-utilities
                • Atc-term-recognizers
                • Atc-input-processing
                • Atc-shallow-embedding
                • Atc-process-inputs-and-gen-everything
                • Atc-table
                • Atc-fn
                • Atc-pretty-printing-options
                • Atc-types
                • Atc-macro-definition
              • Atc-tutorial
            • Language
            • Representation
            • Transformation-tools
            • Insertion-sort
            • Pack
          • Bv
          • Imp-language
          • Event-macros
          • Java
          • Bitcoin
          • Ethereum
          • Yul
          • 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
    • Read-write-variables

    Write-var

    Write a variable in the computation state.

    Signature
    (write-var var val compst) → new-compst
    Arguments
    var — Guard (identp var).
    val — Guard (valuep val).
    compst — Guard (compustatep compst).
    Returns
    new-compst — Type (compustate-resultp new-compst).

    First we try automatic storage, if there are frames. If there is an error, we propagate it. If instead the variable was not found, we try static storage.

    Definitions and Theorems

    Function: write-var

    (defun write-var (var val compst)
      (declare (xargs :guard (and (identp var)
                                  (valuep val)
                                  (compustatep compst))))
      (let ((__function__ 'write-var))
        (declare (ignorable __function__))
        (if (> (compustate-frames-number compst) 0)
            (b* ((new-compst (write-auto-var var val compst))
                 ((when (errorp new-compst)) new-compst))
              (or new-compst
                  (write-static-var var val compst)))
          (write-static-var var val compst))))

    Theorem: compustate-resultp-of-write-var

    (defthm compustate-resultp-of-write-var
      (b* ((new-compst (write-var var val compst)))
        (compustate-resultp new-compst))
      :rule-classes :rewrite)

    Theorem: compustate-frames-number-of-write-var

    (defthm compustate-frames-number-of-write-var
      (b* ((?new-compst (write-var var val compst)))
        (implies (compustatep new-compst)
                 (equal (compustate-frames-number new-compst)
                        (compustate-frames-number compst)))))

    Theorem: compustate-scopes-numbers-of-write-var

    (defthm compustate-scopes-numbers-of-write-var
      (b* ((?new-compst (write-var var val compst)))
        (implies (compustatep new-compst)
                 (equal (compustate-scopes-numbers new-compst)
                        (compustate-scopes-numbers compst)))))

    Theorem: write-var-of-ident-fix-var

    (defthm write-var-of-ident-fix-var
      (equal (write-var (ident-fix var) val compst)
             (write-var var val compst)))

    Theorem: write-var-ident-equiv-congruence-on-var

    (defthm write-var-ident-equiv-congruence-on-var
      (implies (ident-equiv var var-equiv)
               (equal (write-var var val compst)
                      (write-var var-equiv val compst)))
      :rule-classes :congruence)

    Theorem: write-var-of-value-fix-val

    (defthm write-var-of-value-fix-val
      (equal (write-var var (value-fix val) compst)
             (write-var var val compst)))

    Theorem: write-var-value-equiv-congruence-on-val

    (defthm write-var-value-equiv-congruence-on-val
      (implies (value-equiv val val-equiv)
               (equal (write-var var val compst)
                      (write-var var val-equiv compst)))
      :rule-classes :congruence)

    Theorem: write-var-of-compustate-fix-compst

    (defthm write-var-of-compustate-fix-compst
      (equal (write-var var val (compustate-fix compst))
             (write-var var val compst)))

    Theorem: write-var-compustate-equiv-congruence-on-compst

    (defthm write-var-compustate-equiv-congruence-on-compst
      (implies (compustate-equiv compst compst-equiv)
               (equal (write-var var val compst)
                      (write-var var val compst-equiv)))
      :rule-classes :congruence)