• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
    • Math
      • 100-theorems
      • Arithmetic
      • Bit-vectors
        • Sparseint
        • Bitops
          • Bitops/merge
            • Merge-64-u8s
            • Merge-64-bits
            • Merge-32-u8s
            • Merge-32-u4s
            • Merge-32-u2s
            • Merge-32-u16s
            • Merge-32-bits
            • Merge-16-bits
            • Merge-16-u32s
            • Merge-16-u16s
            • Merge-16-u8s
            • Merge-16-u4s
            • Merge-16-u2s
            • Merge-8-bits
            • Merge-8-u2s
            • Merge-8-u64s
              • Merge-8-u4s
              • Merge-8-u32s
              • Merge-8-u16s
              • Merge-8-u8s
              • Merge-4-bits
              • Merge-4-u8s
              • Merge-4-u4s
              • Merge-4-u16s
              • Merge-4-u2s
              • Merge-4-u64s
              • Merge-4-u32s
              • Merge-4-u128s
              • Merge-2-u64s
              • Merge-2-u256s
              • Merge-2-u16s
              • Merge-2-u128s
              • Merge-2-bits
              • Merge-2-u8s
              • Merge-2-u4s
              • Merge-2-u32s
              • Merge-2-u2s
              • Merge-unsigneds
              • Merge-unsigneds-aux
              • Indexed-subst-templates
            • Bitops-compatibility
            • Bitops-books
            • Logbitp-reasoning
            • Bitops/signed-byte-p
            • Fast-part-select
            • Bitops/integer-length
            • Bitops/extra-defs
            • Install-bit
            • Trailing-0-count
            • Bitops/defaults
            • Logbitp-mismatch
            • Trailing-1-count
            • Bitops/rotate
            • Bitops/equal-by-logbitp
            • Bitops/ash-bounds
            • Bitops/fast-logrev
            • Limited-shifts
            • Bitops/part-select
            • Bitops/parity
            • Bitops/saturate
            • Bitops/part-install
            • Bitops/logbitp-bounds
            • Bitops/ihsext-basics
            • Bitops/fast-rotate
            • Bitops/fast-logext
            • Bitops/ihs-extensions
          • Bv
          • Ihs
          • Rtl
        • Algebra
      • Testing-utilities
    • Bitops/merge

    Merge-8-u64s

    Concatenate 8 64-bit numbers together to form an 512-bit result.

    Signature
    (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0) → result
    Returns
    result — Type (natp result).

    Definitions and Theorems

    Function: merge-8-u64s

    (defun merge-8-u64s (a7 a6 a5 a4 a3 a2 a1 a0)
      (declare (type (unsigned-byte 64)
                     a7 a6 a5 a4 a3 a2 a1 a0))
      (declare (xargs :guard t))
      (let ((__function__ 'merge-8-u64s))
        (declare (ignorable __function__))
        (mbe :logic (logapp* 64 (nfix a0)
                             (nfix a1)
                             (nfix a2)
                             (nfix a3)
                             (nfix a4)
                             (nfix a5)
                             (nfix a6)
                             (nfix a7)
                             0)
             :exec (merge-2-u256s (the (unsigned-byte 256)
                                       (merge-4-u64s a7 a6 a5 a4))
                                  (the (unsigned-byte 256)
                                       (merge-4-u64s a3 a2 a1 a0))))))

    Theorem: natp-of-merge-8-u64s

    (defthm acl2::natp-of-merge-8-u64s
      (b* ((result (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)))
        (natp result))
      :rule-classes :type-prescription)

    Theorem: unsigned-byte-p-512-of-merge-8-u64s

    (defthm unsigned-byte-p-512-of-merge-8-u64s
     (unsigned-byte-p 512
                      (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0))
     :rule-classes
     ((:rewrite
          :corollary
          (implies
               (>= (nfix n) 512)
               (unsigned-byte-p n
                                (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)))
          :hints (("Goal" :in-theory (disable unsigned-byte-p))))))

    Theorem: merge-8-u64s-is-merge-unsigneds

    (defthm merge-8-u64s-is-merge-unsigneds
      (equal (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)
             (merge-unsigneds 64
                              (list (nfix a7)
                                    (nfix a6)
                                    (nfix a5)
                                    (nfix a4)
                                    (nfix a3)
                                    (nfix a2)
                                    (nfix a1)
                                    (nfix a0)))))
    Basic nat-equiv congruences.

    Theorem: nat-equiv-implies-equal-merge-8-u64s-8

    (defthm nat-equiv-implies-equal-merge-8-u64s-8
      (implies (nat-equiv a0 a0-equiv)
               (equal (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)
                      (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0-equiv)))
      :rule-classes (:congruence))

    Theorem: nat-equiv-implies-equal-merge-8-u64s-7

    (defthm nat-equiv-implies-equal-merge-8-u64s-7
      (implies (nat-equiv a1 a1-equiv)
               (equal (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)
                      (merge-8-u64s a7 a6 a5 a4 a3 a2 a1-equiv a0)))
      :rule-classes (:congruence))

    Theorem: nat-equiv-implies-equal-merge-8-u64s-6

    (defthm nat-equiv-implies-equal-merge-8-u64s-6
      (implies (nat-equiv a2 a2-equiv)
               (equal (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)
                      (merge-8-u64s a7 a6 a5 a4 a3 a2-equiv a1 a0)))
      :rule-classes (:congruence))

    Theorem: nat-equiv-implies-equal-merge-8-u64s-5

    (defthm nat-equiv-implies-equal-merge-8-u64s-5
      (implies (nat-equiv a3 a3-equiv)
               (equal (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)
                      (merge-8-u64s a7 a6 a5 a4 a3-equiv a2 a1 a0)))
      :rule-classes (:congruence))

    Theorem: nat-equiv-implies-equal-merge-8-u64s-4

    (defthm nat-equiv-implies-equal-merge-8-u64s-4
      (implies (nat-equiv a4 a4-equiv)
               (equal (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)
                      (merge-8-u64s a7 a6 a5 a4-equiv a3 a2 a1 a0)))
      :rule-classes (:congruence))

    Theorem: nat-equiv-implies-equal-merge-8-u64s-3

    (defthm nat-equiv-implies-equal-merge-8-u64s-3
      (implies (nat-equiv a5 a5-equiv)
               (equal (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)
                      (merge-8-u64s a7 a6 a5-equiv a4 a3 a2 a1 a0)))
      :rule-classes (:congruence))

    Theorem: nat-equiv-implies-equal-merge-8-u64s-2

    (defthm nat-equiv-implies-equal-merge-8-u64s-2
      (implies (nat-equiv a6 a6-equiv)
               (equal (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)
                      (merge-8-u64s a7 a6-equiv a5 a4 a3 a2 a1 a0)))
      :rule-classes (:congruence))

    Theorem: nat-equiv-implies-equal-merge-8-u64s-1

    (defthm nat-equiv-implies-equal-merge-8-u64s-1
      (implies (nat-equiv a7 a7-equiv)
               (equal (merge-8-u64s a7 a6 a5 a4 a3 a2 a1 a0)
                      (merge-8-u64s a7-equiv a6 a5 a4 a3 a2 a1 a0)))
      :rule-classes (:congruence))