• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Recursion-and-induction
      • Hons-and-memoization
      • Events
      • Parallelism
      • History
      • Programming
      • Operational-semantics
      • Real
      • Start-here
      • Debugging
      • Miscellaneous
      • Output-controls
      • Macros
      • Mailing-lists
      • Interfacing-tools
        • Io
        • Defttag
        • Sys-call
        • Save-exec
        • Quicklisp
        • Std/io
          • Open-channel-lemmas
          • Std/io/read-char$
          • Std/io/read-object
          • Std/io/open-output-channel
          • Unsound-read
          • Read-string
          • Read-bytes$
            • Read-64ule
            • Read-64ube
            • Read-64sle
            • Read-64sbe
            • Read-32ule
            • Read-32sle
            • Read-32sbe
            • Read-32ube
            • Read-16sle
            • Read-16sbe
            • Read-16ule
            • Read-16ube
            • Read-8s
            • Combine-functions
              • Combine64u
              • Combine64s
              • Combine32u
                • Combine32s
                • Combine16u
                • Combine16s
            • File-measure
            • Read-bytes$-n
            • Std/io/read-byte$
            • Std/io/open-input-channel
            • Read-file-lines-no-newlines
            • Print-compressed
            • Nthcdr-bytes
            • Read-file-lines
            • Std/io/close-output-channel
            • Read-file-characters
            • Read-file-bytes
            • Print-legibly
            • Std/io/close-input-channel
            • Read-file-objects
            • Logical-story-of-io
            • Take-bytes
            • Std/io/peek-char$
            • Read-file-characters-rev
            • Read-file-as-string
            • Std/io/write-byte$
            • Std/io/set-serialize-character
            • Std/io/print-object$
            • Std/io/princ$
            • Std/io/read-file-into-string
            • *file-types*
          • Oslib
          • Bridge
          • Clex
          • Tshell
          • Unsound-eval
          • Hacker
          • ACL2s-interface
          • Startup-banner
          • Command-line
      • Macro-libraries
      • Interfacing-tools
        • Io
        • Defttag
        • Sys-call
        • Save-exec
        • Quicklisp
        • Std/io
          • Open-channel-lemmas
          • Std/io/read-char$
          • Std/io/read-object
          • Std/io/open-output-channel
          • Unsound-read
          • Read-string
          • Read-bytes$
            • Read-64ule
            • Read-64ube
            • Read-64sle
            • Read-64sbe
            • Read-32ule
            • Read-32sle
            • Read-32sbe
            • Read-32ube
            • Read-16sle
            • Read-16sbe
            • Read-16ule
            • Read-16ube
            • Read-8s
            • Combine-functions
              • Combine64u
              • Combine64s
              • Combine32u
                • Combine32s
                • Combine16u
                • Combine16s
            • File-measure
            • Read-bytes$-n
            • Std/io/read-byte$
            • Std/io/open-input-channel
            • Read-file-lines-no-newlines
            • Print-compressed
            • Nthcdr-bytes
            • Read-file-lines
            • Std/io/close-output-channel
            • Read-file-characters
            • Read-file-bytes
            • Print-legibly
            • Std/io/close-input-channel
            • Read-file-objects
            • Logical-story-of-io
            • Take-bytes
            • Std/io/peek-char$
            • Read-file-characters-rev
            • Read-file-as-string
            • Std/io/write-byte$
            • Std/io/set-serialize-character
            • Std/io/print-object$
            • Std/io/princ$
            • Std/io/read-file-into-string
            • *file-types*
          • Oslib
          • Bridge
          • Clex
          • Tshell
          • Unsound-eval
          • Hacker
          • ACL2s-interface
          • Startup-banner
          • Command-line
        • Hardware-verification
        • Software-verification
        • Math
        • Testing-utilities
      • Combine-functions

      Combine32u

      (combine32u a3 a2 a1 a0) merges unsigned bytes, producing the 32-bit unsigned interpretation of (a3 << 24) | (a2 << 16) | (a1 << 8) | a0.

      Definitions and Theorems

      Function: combine32u$inline

      (defun combine32u$inline (a3 a2 a1 a0)
        (declare (type (unsigned-byte 8) a3 a2 a1 a0))
        (mbe :logic
             (logior (ash (nfix a3) 24)
                     (ash (nfix a2) 16)
                     (ash (nfix a1) 8)
                     (nfix a0))
             :exec
             (b* ((a3 (the (unsigned-byte 32) (ash a3 24)))
                  (a2 (the (unsigned-byte 24) (ash a2 16)))
                  (a1 (the (unsigned-byte 16) (ash a1 8)))
                  (ans (the (unsigned-byte 16)
                            (logior (the (unsigned-byte 16) a1)
                                    (the (unsigned-byte 8) a0))))
                  (ans (the (unsigned-byte 24)
                            (logior (the (unsigned-byte 24) a2)
                                    (the (unsigned-byte 16) ans)))))
               (the (unsigned-byte 32)
                    (logior (the (unsigned-byte 32) a3)
                            (the (unsigned-byte 24) ans))))))

      Theorem: combine32u-unsigned-byte

      (defthm combine32u-unsigned-byte
        (implies (and (force (unsigned-byte-p 8 a3))
                      (force (unsigned-byte-p 8 a2))
                      (force (unsigned-byte-p 8 a1))
                      (force (unsigned-byte-p 8 a0)))
                 (unsigned-byte-p 32 (combine32u a3 a2 a1 a0))))

      Theorem: combine32u-loghead-logtail

      (defthm combine32u-loghead-logtail
        (implies (natp i)
                 (equal (combine32u (logtail 24 i)
                                    (loghead 8 (logtail 16 i))
                                    (loghead 8 (logtail 8 i))
                                    (loghead 8 i))
                        i)))