• 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
          • 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-gen-cfun-correct-thm
                  • Atc-typed-formals
                  • Atc-gen-outer-bindings-and-hyps
                  • Atc-gen-fundef
                  • Atc-gen-exec-stmt-while-for-loop
                  • Atc-gen-context-preamble
                  • Atc-gen-pop-frame-thm
                  • Atc-gen-loop-correct-thm
                  • Atc-gen-loop-body-correct-thm
                  • Atc-gen-init-scope-thms
                  • Atc-gen-fun-correct-thm
                  • Atc-gen-fn-result-thm
                  • Atc-gen-loop
                  • Atc-gen-loop-test-correct-thm
                  • Atc-check-guard-conjunct
                  • Atc-find-affected
                  • Atc-gen-cfun-final-compustate
                  • Atc-gen-init-inscope-auto
                  • Atc-gen-init-inscope-static
                  • Atc-gen-push-init-thm
                  • Atc-gen-loop-measure-fn
                  • Atc-gen-fun-endstate
                  • Atc-gen-loop-termination-thm
                  • Atc-gen-formal-thm
                  • Atc-gen-loop-final-compustate
                    • Atc-gen-loop-measure-thm
                    • Atc-gen-object-disjoint-hyps
                    • Atc-loop-body-term-subst
                    • Atc-gen-omap-update-formals
                    • Atc-gen-loop-tthm-formula
                    • Atc-gen-init-inscope
                    • Atc-gen-fn-def*
                    • Atc-gen-param-declon-list
                    • Atc-formal-affectablep
                    • Atc-gen-cfun-fun-env-thm
                    • Atc-gen-add-var-formals
                    • Atc-gen-cfun-fun-env-thm-name
                    • Atc-gen-fn-guard
                    • Atc-filter-exec-fun-args
                    • Atc-gen-context-preamble-aux-aux
                    • Atc-typed-formals-to-extobjs
                    • Atc-formal-affectable-listp
                  • 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
                  • 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
              • Pure-expression-execution
            • Transformation-tools
            • Language
            • Representation
            • Insertion-sort
            • Pack
          • Soft
          • Bv
          • Imp-language
          • Ethereum
          • Event-macros
          • Java
          • Riscv
          • Bitcoin
          • Zcash
          • Yul
          • 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
    • Atc-function-and-loop-generation

    Atc-gen-loop-final-compustate

    Generate a term representing the final computation state after the execution of a C loop.

    Signature
    (atc-gen-loop-final-compustate mod-vars typed-formals 
                                   subst compst-var prec-objs) 
     
      → 
    term
    Arguments
    mod-vars — Guard (symbol-listp mod-vars).
    typed-formals — Guard (atc-symbol-varinfo-alistp typed-formals).
    subst — Guard (symbol-symbol-alistp subst).
    compst-var — Guard (symbolp compst-var).
    prec-objs — Guard (atc-string-objinfo-alistp prec-objs).
    Returns
    term — An untranslated term.

    The correctness theorem of a C loop says that executing the loop on a generic computation state (satisfying conditions in the hypotheses of the theorem) yields a computation state obtained by modifying one or more variables and zero or more arrays in the computation state. These are the variables and arrays affected by the loop, which the correctness theorem binds to the results of the loop function, and which have corresponding named variables and heap arrays in the computation state. The modified computation state is expressed as a nest of write-var, write-static-var, and write-object calls. This ACL2 code here generates that nest.

    Note that, in the correctness theorem, the new array variables are bound to the possibly modified arrays returned by the ACL2 function: these new array variables are obtained by adding -NEW to the corresponding formals of the ACL2 function; these new names should not cause any conflicts, because the names of the formals must be portable C identifiers.

    Definitions and Theorems

    Function: atc-gen-loop-final-compustate

    (defun atc-gen-loop-final-compustate
           (mod-vars typed-formals
                     subst compst-var prec-objs)
     (declare
          (xargs :guard (and (symbol-listp mod-vars)
                             (atc-symbol-varinfo-alistp typed-formals)
                             (symbol-symbol-alistp subst)
                             (symbolp compst-var)
                             (atc-string-objinfo-alistp prec-objs))))
     (let ((__function__ 'atc-gen-loop-final-compustate))
      (declare (ignorable __function__))
      (b* (((when (endp mod-vars)) compst-var)
           (mod-var (car mod-vars))
           (info (cdr (assoc-eq mod-var typed-formals)))
           ((when (not info))
            (raise "Internal error: formal ~x0 not found."
                   mod-var))
           (type (atc-var-info->type info))
           (ptrp (or (type-case type :pointer)
                     (type-case type :array)))
           (ptr (cdr (assoc-eq mod-var subst))))
       (if ptrp
        (if
         (consp (assoc-equal (symbol-name mod-var)
                             prec-objs))
         (cons
          'write-static-var
          (cons
           (cons 'ident
                 (cons (symbol-name mod-var) 'nil))
           (cons
            (add-suffix-to-fn mod-var "-NEW")
            (cons
              (atc-gen-loop-final-compustate (cdr mod-vars)
                                             typed-formals
                                             subst compst-var prec-objs)
              'nil))))
         (cons
          'write-object
          (cons
           (cons 'value-pointer->designator
                 (cons ptr 'nil))
           (cons
            (add-suffix-to-fn mod-var "-NEW")
            (cons
              (atc-gen-loop-final-compustate (cdr mod-vars)
                                             typed-formals
                                             subst compst-var prec-objs)
              'nil)))))
        (cons
         'write-var
         (cons
          (cons 'ident
                (cons (symbol-name (car mod-vars))
                      'nil))
          (cons
           (add-suffix-to-fn (car mod-vars) "-NEW")
           (cons
              (atc-gen-loop-final-compustate (cdr mod-vars)
                                             typed-formals
                                             subst compst-var prec-objs)
              'nil))))))))