• 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
        • Zcash
        • ACL2-programming-language
          • Primitive-functions
          • Translated-terms
          • Values
          • Evaluation
            • Step-from-trans
            • Call-primitive-function
            • Step-from-init
            • Put-leftmost-nonconst
            • Exec-outcome
            • Stepn
            • Step
            • Terminatingp
            • Get-leftmost-nonconst
            • Exec-call
            • Step*
            • Program-equivalence
            • Functions
            • Packages
            • Programs
            • Interpreter
            • Evaluation-states
          • 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
    • Evaluation

    Step*

    Attempt to exhaustively perform execution steps from a state.

    Signature
    (step* estate program) → outcome
    Arguments
    estate — Guard (eval-state-p estate).
    program — Guard (programp program).
    Returns
    outcome — Type (exec-outcome-p outcome).

    If the state is terminating, then we return either the final result or an error outcome. If the state is nonterminating, we return the nonterminating outcome.

    This function is not executable.

    Definitions and Theorems

    Function: step*

    (defun step* (estate program)
     (declare (xargs :guard (and (eval-state-p estate)
                                 (programp program))))
     (let ((__function__ 'step*))
       (declare (ignorable __function__))
       (if
         (terminatingp estate program)
         (b* ((end-estate (stepn estate
                                 (terminatingp-witness estate program)
                                 program)))
           (eval-state-case
                end-estate
                :init (prog2$ (impossible)
                              (ec-call (exec-outcome-fix :irrelevant)))
                :trans (prog2$ (impossible)
                               (ec-call (exec-outcome-fix :irrelevant)))
                :final (exec-outcome-terminating end-estate.result)
                :error (exec-outcome-error)))
         (exec-outcome-nonterminating))))

    Theorem: exec-outcome-p-of-step*

    (defthm exec-outcome-p-of-step*
      (b* ((outcome (step* estate program)))
        (exec-outcome-p outcome))
      :rule-classes :rewrite)