• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
      • Legacy-defrstobj
      • C
      • Proof-checker-array
      • Soft
      • Farray
      • Rp-rewriter
      • Instant-runoff-voting
      • Imp-language
      • Sidekick
      • Ethereum
      • Leftist-trees
      • Java
      • Riscv
        • Specification
        • Executable
        • Specialized
          • Specialized-rv64im-le
          • Specialized-rv32im-le
            • Rv32im-le-semantics
            • Rv32im-le-states
              • Write32-xreg
              • Stat32
              • Write32-mem-ubyte16-lendian
              • Memory
              • Xregs
              • Write32-pc
              • Write32-mem-ubyte32-lendian
              • Read32-xreg-unsigned
              • Read32-mem-ubyte16-lendian
              • Read32-mem-ubyte8
              • Read32-mem-ubyte32-lendian
              • Write32-mem-ubyte8
              • Stat32-iso
              • Read32-xreg-unsigned{3}
              • Read32-xreg-signed
              • Inc32-pc
                • Read32-xreg-signed{3}
                • Stat-from-stat32
                • Read32-xreg-unsigned{2}
                • Read32-xreg-signed{2}
                • Stat-rv32im-le-p
                • Read32-xreg-signed{4}
                • Read32-xreg-unsigned{1}
                • Read32-xreg-signed{1}
                • Read32-pc
                • Read32-xreg-unsigned{0}
                • Error32p
                • Error32
                • Stat32-from-stat
                • Read32-xreg-signed{0}
                • Read-xreg-unsigned-to-read32-xreg-unsigned{3}
              • Rv32im-le-execution
              • Rv32im-le-features
          • Optimized
        • Taspi
        • Bitcoin
        • Zcash
        • Des
        • X86isa
        • Sha-2
        • Yul
        • Proof-checker-itp13
        • Regex
        • ACL2-programming-language
        • Json
        • Jfkr
        • Equational
        • Cryptography
        • Axe
        • Poseidon
        • Where-do-i-place-my-book
        • Aleo
        • Bigmems
        • Builtins
        • Execloader
        • Solidity
        • Paco
        • Concurrent-programs
        • Bls12-377-curves
      • Debugging
      • Community
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Rv32im-le-states

    Inc32-pc

    Increment the program counter.

    Signature
    (inc32-pc stat) → new-stat
    Arguments
    stat — Guard (stat32p stat).
    Returns
    new-stat — Type (stat32p 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:27].

    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 (stat32p stat)))
      (write32-pc (+ (read32-pc stat) 4)
                  stat))

    Theorem: stat32p-of-inc32-pc

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

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

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

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

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