• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
        • Error-checking
        • Fty-extensions
        • Isar
        • Kestrel-utilities
          • Directed-untranslate
          • Include-book-paths
          • Ubi
          • Numbered-names
          • Digits-any-base
            • Defdigits
            • Nat=>lendian*
            • Group-lendian
            • Defdigit-grouping
            • Ungroup-lendian
            • Lendian=>nat
            • Defthm-dab-return-types
            • Bendian=>nat
            • Nat=>bendian*
            • Trim-bendian*
            • Trim-lendian*
            • Nat=>lendian
            • Dab-digit-list-fix
            • Nat=>bendian
            • Ungroup-bendian
            • Group-bendian
            • Digits=>nat-injectivity-theorems
              • Dab-digit-listp
              • Nat=>lendian+
              • Dab-basep
              • Nat=>bendian+
              • Digits=>nat=>digits-inverses-theorems
              • Trim-lendian+
              • Trim-bendian+
              • Nat=>digits=>nat-inverses-theorems
              • Dab-digitp
              • Group/ungroup-inverses-theorems
              • Dab-digit-fix
              • Nat=>digits-injectivity-theorems
              • Dab-base
              • Digits-any-base-pow2
              • Dab-base-fix
            • Context-message-pair
            • With-auto-termination
            • Make-termination-theorem
            • Theorems-about-true-list-lists
            • Checkpoint-list
            • Sublis-expr+
            • Integers-from-to
            • Prove$
            • Defthm<w
            • System-utilities-non-built-in
            • Integer-range-fix
            • Minimize-ruler-extenders
            • Add-const-to-untranslate-preprocess
            • Unsigned-byte-fix
            • Signed-byte-fix
            • Defthmr
            • Paired-names
            • Unsigned-byte-list-fix
            • Signed-byte-list-fix
            • Show-books
            • Skip-in-book
            • Typed-tuplep
            • List-utilities
            • Checkpoint-list-pretty
            • 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
            • Defmacroq
            • Integer-range-listp
            • Apply-fn-if-known
            • Trans-eval-error-triple
            • Checkpoint-info-list
            • Previous-subsumer-hints
            • Fms!-lst
            • Zp-listp
            • Trans-eval-state
            • Injections
            • Doublets-to-alist
            • Theorems-about-osets
            • Typed-list-utilities
            • Message-utilities
            • Book-runes-alist
            • User-interface
            • Bits/ubyte11s-digit-grouping
            • Bits/bytes-digit-grouping
            • Subsetp-eq-linear
            • Oset-utilities
            • Strict-merge-sort-<
            • Miscellaneous-enumerations
            • Maybe-unquote
            • Thm<w
            • Defthmd<w
            • Io-utilities
          • Set
          • C
          • Soft
          • Bv
          • Imp-language
          • Ethereum
          • Event-macros
          • Java
          • Riscv
          • Bitcoin
          • Zcash
          • Yul
          • ACL2-programming-language
          • Prime-fields
          • Json
          • Syntheto
          • File-io-light
          • Cryptography
          • Number-theory
          • Axe
          • Lists-light
          • Builtins
          • Solidity
          • Helpers
          • Htclient
          • Typed-lists-light
          • Arithmetic-light
        • X86isa
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Digits-any-base

    Digits=>nat-injectivity-theorems

    Theorems about the injectivity of the conversions from digits to natural numbers.

    The conversions from digits to natural numbers are injective over digits without superfluous zeros in the most significant positions. These are simple consequences of the theorems about converting digits to natural numbers and back. The absence of suprfluous digits can be expressed by saying that the digits, fixed with dab-digit-list-fix, are invariant under trim-lendian* or trim-lendian+.

    Another formulation of the inejctivity theorems is that the conversions from digits to natural numbers are injective over lists of digits of the same length.

    Note that each formulation of the injectivity theorem is proved via a ``corresponding'' inversion theorem.

    Definitions and Theorems

    Theorem: lendian=>nat-injectivity*

    (defthm lendian=>nat-injectivity*
      (implies
           (and (equal (trim-lendian* (dab-digit-list-fix base digits1))
                       digits1)
                (equal (trim-lendian* (dab-digit-list-fix base digits2))
                       digits2))
           (equal (equal (lendian=>nat base digits1)
                         (lendian=>nat base digits2))
                  (equal digits1 digits2))))

    Theorem: lendian=>nat-injectivity+

    (defthm lendian=>nat-injectivity+
      (implies
           (and (equal (trim-lendian+ (dab-digit-list-fix base digits1))
                       digits1)
                (equal (trim-lendian+ (dab-digit-list-fix base digits2))
                       digits2))
           (equal (equal (lendian=>nat base digits1)
                         (lendian=>nat base digits2))
                  (equal digits1 digits2))))

    Theorem: lendian=>nat-injectivity

    (defthm lendian=>nat-injectivity
      (implies (equal (len digits1) (len digits2))
               (equal (equal (lendian=>nat base digits1)
                             (lendian=>nat base digits2))
                      (equal (dab-digit-list-fix base digits1)
                             (dab-digit-list-fix base digits2)))))

    Theorem: bendian=>nat-injectivity*

    (defthm bendian=>nat-injectivity*
      (implies
           (and (equal (trim-bendian* (dab-digit-list-fix base digits1))
                       digits1)
                (equal (trim-bendian* (dab-digit-list-fix base digits2))
                       digits2))
           (equal (equal (bendian=>nat base digits1)
                         (bendian=>nat base digits2))
                  (equal digits1 digits2))))

    Theorem: bendian=>nat-injectivity+

    (defthm bendian=>nat-injectivity+
      (implies
           (and (equal (trim-bendian+ (dab-digit-list-fix base digits1))
                       digits1)
                (equal (trim-bendian+ (dab-digit-list-fix base digits2))
                       digits2))
           (equal (equal (bendian=>nat base digits1)
                         (bendian=>nat base digits2))
                  (equal digits1 digits2))))

    Theorem: bendian=>nat-injectivity

    (defthm bendian=>nat-injectivity
      (implies (equal (len digits1) (len digits2))
               (equal (equal (bendian=>nat base digits1)
                             (bendian=>nat base digits2))
                      (equal (dab-digit-list-fix base digits1)
                             (dab-digit-list-fix base digits2)))))