• 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
        • Decoding
        • Encoding
        • Features
        • Semantics
          • Semantics64
          • Semantics32
            • Exec32-bgeu
            • Exec32-bltu
            • Exec32-blt
            • Exec32-bge
            • Exec32-bne
            • Exec32-beq
            • Exec32-jalr
            • Exec32-branch
            • Exec32-jal
            • Exec32-op
            • Exec32-store
            • Exec32-op-imm
            • Exec32-load
            • Exec32-sra
            • Exec32-sltiu
            • Exec32-op-imms
            • Exec32-srl
            • Exec32-slti
            • Exec32-remu
            • Exec32-rem
            • Exec32-auipc
            • Exec32-xori
            • Exec32-srli
            • Exec32-srai
            • Exec32-ori
            • Exec32-divu
            • Exec32-andi
            • Exec32-addi
            • Exec32-sltu
            • Exec32-slt
              • Exec32-sll
              • Exec32-mulhsu
              • Exec32-lhu
              • Exec32-div
              • Exec32-xor
              • Exec32-slli
              • Exec32-sh
              • Exec32-mulhu
              • Exec32-mulh
              • Exec32-lh
              • Exec32-lbu
              • Exec32-sw
              • Exec32-sub
              • Exec32-sb
              • Exec32-or
              • Exec32-lw
              • Exec32-lb
              • Exec32-and
              • Exec32-mul
              • Exec32-add
              • Exec32-instr
              • Eff32-addr
              • Exec32-lui
          • 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
    • Semantics32

    Exec32-slt

    Semantics of the SLT instruction [ISA:2.4.2].

    Signature
    (exec32-slt rd rs1 rs2 stat) → new-stat
    Arguments
    rd — Guard (ubyte5p rd).
    rs1 — Guard (ubyte5p rs1).
    rs2 — Guard (ubyte5p rs2).
    stat — Guard (state32p stat).
    Returns
    new-stat — Type (state32p new-stat).

    We read two signed 32-bit integers from rs1 and rs2. We compare the two signed integers: if the first one is less than the second, the result is 1, otherwise it is 0. We write the result to rd. We increment the program counter.

    Definitions and Theorems

    Function: exec32-slt

    (defun exec32-slt (rd rs1 rs2 stat)
      (declare (xargs :guard (and (ubyte5p rd)
                                  (ubyte5p rs1)
                                  (ubyte5p rs2)
                                  (state32p stat))))
      (let ((__function__ 'exec32-slt))
        (declare (ignorable __function__))
        (b* ((rs1-operand (read32-xreg-signed rs1 stat))
             (rs2-operand (read32-xreg-signed rs2 stat))
             (result (if (< rs1-operand rs2-operand) 1 0))
             (stat (write32-xreg rd result stat))
             (stat (inc32-pc stat)))
          stat)))

    Theorem: state32p-of-exec32-slt

    (defthm state32p-of-exec32-slt
      (b* ((new-stat (exec32-slt rd rs1 rs2 stat)))
        (state32p new-stat))
      :rule-classes :rewrite)

    Theorem: exec32-slt-of-ubyte5-fix-rd

    (defthm exec32-slt-of-ubyte5-fix-rd
      (equal (exec32-slt (ubyte5-fix rd)
                         rs1 rs2 stat)
             (exec32-slt rd rs1 rs2 stat)))

    Theorem: exec32-slt-ubyte5-equiv-congruence-on-rd

    (defthm exec32-slt-ubyte5-equiv-congruence-on-rd
      (implies (ubyte5-equiv rd rd-equiv)
               (equal (exec32-slt rd rs1 rs2 stat)
                      (exec32-slt rd-equiv rs1 rs2 stat)))
      :rule-classes :congruence)

    Theorem: exec32-slt-of-ubyte5-fix-rs1

    (defthm exec32-slt-of-ubyte5-fix-rs1
      (equal (exec32-slt rd (ubyte5-fix rs1)
                         rs2 stat)
             (exec32-slt rd rs1 rs2 stat)))

    Theorem: exec32-slt-ubyte5-equiv-congruence-on-rs1

    (defthm exec32-slt-ubyte5-equiv-congruence-on-rs1
      (implies (ubyte5-equiv rs1 rs1-equiv)
               (equal (exec32-slt rd rs1 rs2 stat)
                      (exec32-slt rd rs1-equiv rs2 stat)))
      :rule-classes :congruence)

    Theorem: exec32-slt-of-ubyte5-fix-rs2

    (defthm exec32-slt-of-ubyte5-fix-rs2
      (equal (exec32-slt rd rs1 (ubyte5-fix rs2)
                         stat)
             (exec32-slt rd rs1 rs2 stat)))

    Theorem: exec32-slt-ubyte5-equiv-congruence-on-rs2

    (defthm exec32-slt-ubyte5-equiv-congruence-on-rs2
      (implies (ubyte5-equiv rs2 rs2-equiv)
               (equal (exec32-slt rd rs1 rs2 stat)
                      (exec32-slt rd rs1 rs2-equiv stat)))
      :rule-classes :congruence)

    Theorem: exec32-slt-of-state32-fix-stat

    (defthm exec32-slt-of-state32-fix-stat
      (equal (exec32-slt rd rs1 rs2 (state32-fix stat))
             (exec32-slt rd rs1 rs2 stat)))

    Theorem: exec32-slt-state32-equiv-congruence-on-stat

    (defthm exec32-slt-state32-equiv-congruence-on-stat
      (implies (state32-equiv stat stat-equiv)
               (equal (exec32-slt rd rs1 rs2 stat)
                      (exec32-slt rd rs1 rs2 stat-equiv)))
      :rule-classes :congruence)