• 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

    Nat=>digits-injectivity-theorems

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

    The conversions from natural numbers to digits are injective over natural numbers. These are simple consequences of the theorems about converting natural numbers to digits and back.

    Definitions and Theorems

    Theorem: nat=>lendian*-injectivity

    (defthm nat=>lendian*-injectivity
      (equal (equal (nat=>lendian* base nat1)
                    (nat=>lendian* base nat2))
             (equal (nfix nat1) (nfix nat2))))

    Theorem: nat=>lendian+-injectivity

    (defthm nat=>lendian+-injectivity
      (equal (equal (nat=>lendian+ base nat1)
                    (nat=>lendian+ base nat2))
             (equal (nfix nat1) (nfix nat2))))

    Theorem: nat=>lendian-injectivity

    (defthm nat=>lendian-injectivity
      (implies (and (< (nfix nat1)
                       (expt (dab-base-fix base) (nfix width)))
                    (< (nfix nat2)
                       (expt (dab-base-fix base)
                             (nfix width))))
               (equal (equal (nat=>lendian base width nat1)
                             (nat=>lendian base width nat2))
                      (equal (nfix nat1) (nfix nat2)))))

    Theorem: nat=>bendian*-injectivity

    (defthm nat=>bendian*-injectivity
      (equal (equal (nat=>bendian* base nat1)
                    (nat=>bendian* base nat2))
             (equal (nfix nat1) (nfix nat2))))

    Theorem: nat=>bendian+-injectivity

    (defthm nat=>bendian+-injectivity
      (equal (equal (nat=>bendian+ base nat1)
                    (nat=>bendian+ base nat2))
             (equal (nfix nat1) (nfix nat2))))

    Theorem: nat=>bendian-injectivity

    (defthm nat=>bendian-injectivity
      (implies (and (< (nfix nat1)
                       (expt (dab-base-fix base) (nfix width)))
                    (< (nfix nat2)
                       (expt (dab-base-fix base)
                             (nfix width))))
               (equal (equal (nat=>bendian base width nat1)
                             (nat=>bendian base width nat2))
                      (equal (nfix nat1) (nfix nat2)))))