• 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
            • Write64-xreg
            • Write64-xreg-32
            • Write64-mem-ubyte64-lendian
            • Write64-mem-ubyte16-lendian
            • Xregfile64
            • State64
            • Memory64
            • Write64-mem-ubyte32-lendian
            • Write64-pc
            • Write64-mem-ubyte8
            • Read64-mem-ubyte64-lendian
            • Read64-mem-ubyte16-lendian
            • Read64-mem-ubyte32-lendian
            • Read64-xreg-unsigned
            • Read64-mem-ubyte8
            • Read64-xreg-unsigned32
            • Read64-xreg-signed32
            • Read64-xreg-signed
            • Inc64-pc
              • Read64-pc
              • Error64p
              • Error64
              • *mem64-size*
            • Write-xreg
            • Read-memory-unsigned8
            • Read-memory-unsigned64
            • Read-memory-unsigned32
            • Read-memory-unsigned16
            • Read-xreg-signed
            • Read-xreg-unsigned32
            • States32
            • 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
    • States64

    Inc64-pc

    Increment the program counter.

    Signature
    (inc64-pc stat) → new-stat
    Arguments
    stat — Guard (state64p stat).
    Returns
    new-stat — Type (state64p 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 write64-pc wraps around if needed [ISA:1.4].

    Definitions and Theorems

    Function: inc64-pc

    (defun inc64-pc (stat)
      (declare (xargs :guard (state64p stat)))
      (let ((__function__ 'inc64-pc))
        (declare (ignorable __function__))
        (write64-pc (+ (read64-pc stat) 4)
                    stat)))

    Theorem: state64p-of-inc64-pc

    (defthm state64p-of-inc64-pc
      (b* ((new-stat (inc64-pc stat)))
        (state64p new-stat))
      :rule-classes :rewrite)

    Theorem: inc64-pc-of-state64-fix-stat

    (defthm inc64-pc-of-state64-fix-stat
      (equal (inc64-pc (state64-fix stat))
             (inc64-pc stat)))

    Theorem: inc64-pc-state64-equiv-congruence-on-stat

    (defthm inc64-pc-state64-equiv-congruence-on-stat
      (implies (state64-equiv stat stat-equiv)
               (equal (inc64-pc stat)
                      (inc64-pc stat-equiv)))
      :rule-classes :congruence)