• 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
        • Instructions
        • States
          • Stat
          • Stat-validp
          • Write-memory-unsigned64
          • Write-memory-unsigned32
          • Write-memory-unsigned8
          • Write-memory-unsigned16
          • Read-xreg-unsigned
          • Write-xreg-32
          • States64
          • Write-xreg
          • Read-memory-unsigned8
          • Read-memory-unsigned64
          • Read-memory-unsigned32
          • Read-memory-unsigned16
          • Read-xreg-signed
          • Read-xreg-unsigned32
          • States32
            • Write32-xreg
            • Xregfile32
            • Write32-mem-ubyte16-lendian
            • State32
            • Memory32
            • Write32-mem-ubyte32-lendian
            • Write32-pc
            • Write32-mem-ubyte8
            • Read32-mem-ubyte16-lendian
            • Read32-xreg-unsigned
            • Read32-mem-ubyte8
            • Read32-mem-ubyte32-lendian
            • Read32-xreg-signed
            • Inc32-pc
              • Read32-pc
              • Error32p
              • Error32
              • *mem32-size*
            • Write-pc
            • Read-xreg-signed32
            • Read-pc
            • Inc4-pc
          • Decoding
          • Encoding
          • Features
          • Semantics
          • Execution
        • Des
        • Ethereum
        • X86isa
        • Sha-2
        • Yul
        • 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
    • States32

    Inc32-pc

    Increment the program counter.

    Signature
    (inc32-pc stat) → new-stat
    Arguments
    stat — Guard (state32p stat).
    Returns
    new-stat — Type (state32p new-stat).

    The increment is by 4, which is motivated by the fact that, at least in the normal encoding, instructions take 32 bits each. We may generalize this function, or add an alternative one, if and when we extend our model to support compressed encodings in the C extension [ISA:26].

    We read the program counter, we add 4, and we write the result. Recall that write32-pc wraps around if needed [ISA:1.4].

    Definitions and Theorems

    Function: inc32-pc

    (defun inc32-pc (stat)
      (declare (xargs :guard (state32p stat)))
      (let ((__function__ 'inc32-pc))
        (declare (ignorable __function__))
        (write32-pc (+ (read32-pc stat) 4)
                    stat)))

    Theorem: state32p-of-inc32-pc

    (defthm state32p-of-inc32-pc
      (b* ((new-stat (inc32-pc stat)))
        (state32p new-stat))
      :rule-classes :rewrite)

    Theorem: inc32-pc-of-state32-fix-stat

    (defthm inc32-pc-of-state32-fix-stat
      (equal (inc32-pc (state32-fix stat))
             (inc32-pc stat)))

    Theorem: inc32-pc-state32-equiv-congruence-on-stat

    (defthm inc32-pc-state32-equiv-congruence-on-stat
      (implies (state32-equiv stat stat-equiv)
               (equal (inc32-pc stat)
                      (inc32-pc stat-equiv)))
      :rule-classes :congruence)