• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
    • Debugging
    • Projects
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Error-checking
        • Apt
        • Abnf
        • Fty-extensions
        • Isar
        • Kestrel-utilities
          • Omaps
          • Directed-untranslate
          • Include-book-paths
          • Ubi
          • Checkpoint-list
          • Digits-any-base
          • Context-message-pair
          • Numbered-names
          • With-auto-termination
          • Theorems-about-true-list-lists
          • Make-termination-theorem
          • Sublis-expr+
          • Prove$
          • Defthm<w
          • System-utilities-non-built-in
          • Integer-range-fix
          • Add-const-to-untranslate-preprocess
          • Integers-from-to
          • Minimize-ruler-extenders
          • Unsigned-byte-fix
            • Unsigned-byte-list-fix
          • Signed-byte-fix
          • Defthmr
          • Paired-names
          • Unsigned-byte-list-fix
          • Signed-byte-list-fix
          • Show-books
          • Checkpoint-list-pretty
          • List-utilities
          • Skip-in-book
          • Typed-tuplep
          • Defunt
          • Keyword-value-list-to-alist
          • Magic-macroexpand
          • Top-command-number-fn
          • Bits-as-digits-in-base-2
          • Show-checkpoint-list
          • Ubyte11s-as-digits-in-base-2048
          • Named-formulas
          • Bytes-as-digits-in-base-256
          • String-utilities
          • Make-keyword-value-list-from-keys-and-value
          • Integer-range-listp
          • Defmacroq
          • Apply-fn-if-known
          • Trans-eval-error-triple
          • Checkpoint-info-list
          • Previous-subsumer-hints
          • Fms!-lst
          • Zp-listp
          • Doublets-to-alist
          • Trans-eval-state
          • Injections
          • Theorems-about-osets
          • Typed-list-utilities
          • Book-runes-alist
          • User-interface
          • Bits/ubyte11s-digit-grouping
          • Bits/bytes-digit-grouping
          • Message-utilities
          • Subsetp-eq-linear
          • Strict-merge-sort-<
          • Miscellaneous-enumerations
          • Maybe-unquote
          • Oset-utilities
          • Thm<w
          • Defthmd<w
        • Prime-field-constraint-systems
        • Soft
        • Bv
        • Imp-language
        • Event-macros
        • Bitcoin
        • Ethereum
        • Yul
        • Zcash
        • ACL2-programming-language
        • Prime-fields
        • Java
        • C
        • Syntheto
        • Number-theory
        • Cryptography
        • Lists-light
        • File-io-light
        • Json
        • Built-ins
        • Solidity
        • Axe
        • Std-extensions
        • Htclient
        • Typed-lists-light
        • Arithmetic-light
      • X86isa
      • Execloader
      • Axe
    • Testing-utilities
    • Math
  • Kestrel-utilities
  • Unsigned-byte-p

Unsigned-byte-fix

Fixing function for unsigned-byte-p.

Signature
(unsigned-byte-fix bits x) → fixed-x
Arguments
bits — Guard (natp bits).
x — Guard (unsigned-byte-p bits x).
Returns
fixed-x — Type (unsigned-byte-p bits fixed-x), given (natp bits).

Since the set denoted by unsigned-byte-p is empty for some values of bits (namely, when bits is not a natural number), this fixing function cannot always return a value satisfying the predicate. Even though unsigned-byte-p does not fix its bits to natp, this fixing function does, i.e. it treats bits as a natural number. Thus, the set denoted by unsigned-byte-p is never empty. If x is not in the range of unsigned-byte-p, we return 0; another option is to return loghead (or its equivalent with built-in functions, to avoid a dependency on the IHS library).

Since unsigned-byte-p is enabled by default, this fixing function is also enabled by default. When these functions are enabled, they are meant as abbreviations, and theorems triggered by them may not fire during proofs.

Definitions and Theorems

Function: unsigned-byte-fix

(defun unsigned-byte-fix (bits x)
       (declare (xargs :guard (and (natp bits)
                                   (unsigned-byte-p bits x))))
       (let ((__function__ 'unsigned-byte-fix))
            (declare (ignorable __function__))
            (mbe :logic (b* ((bits (nfix bits)))
                            (if (unsigned-byte-p bits x) x 0))
                 :exec x)))

Theorem: return-type-of-unsigned-byte-fix

(defthm return-type-of-unsigned-byte-fix
        (implies (natp bits)
                 (b* ((fixed-x (unsigned-byte-fix bits x)))
                     (unsigned-byte-p bits fixed-x)))
        :rule-classes :rewrite)

Theorem: unsigned-byte-fix-when-unsigned-byte-p

(defthm unsigned-byte-fix-when-unsigned-byte-p
        (implies (unsigned-byte-p (nfix bits) x)
                 (equal (unsigned-byte-fix bits x) x)))

Theorem: unsigned-byte-fix-of-nfix-bits

(defthm unsigned-byte-fix-of-nfix-bits
        (equal (unsigned-byte-fix (nfix bits) x)
               (unsigned-byte-fix bits x)))

Theorem: unsigned-byte-fix-of-nfix-bits-normalize-const

(defthm unsigned-byte-fix-of-nfix-bits-normalize-const
        (implies (syntaxp (and (quotep bits)
                               (not (natp (cadr bits)))))
                 (equal (unsigned-byte-fix bits x)
                        (unsigned-byte-fix (nfix bits) x))))

Subtopics

Unsigned-byte-list-fix
Fixing function for unsigned-byte-listp.