• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Recursion-and-induction
      • Hons-and-memoization
      • Events
      • Parallelism
      • History
      • Programming
        • Defun
        • Declare
        • System-utilities
        • Stobj
        • State
        • Mutual-recursion
        • Memoize
        • Mbe
        • Io
        • Defpkg
        • Apply$
        • Loop$
        • Programming-with-state
        • Arrays
        • Characters
        • Time$
        • Defconst
        • Fast-alists
        • Defmacro
        • Loop$-primer
        • Evaluation
        • Guard
        • Equality-variants
        • Compilation
        • Hons
        • ACL2-built-ins
        • Developers-guide
        • System-attachments
        • Advanced-features
        • Set-check-invariant-risk
        • Numbers
        • Efficiency
        • Irrelevant-formals
        • Introduction-to-programming-in-ACL2-for-those-who-know-lisp
        • Redefining-programs
        • Lists
        • Invariant-risk
        • Errors
        • Defabbrev
        • Conses
        • Alists
        • Set-register-invariant-risk
        • Strings
          • Std/strings
            • Pretty-printing
            • Printtree
            • Base64
            • Charset-p
            • Strtok!
            • Cases
            • Concatenation
            • Character-kinds
            • Html-encoding
            • Substrings
            • Strtok
            • Equivalences
            • Url-encoding
            • Lines
            • Explode-implode-equalities
            • Ordering
            • Numbers
              • Decimal
              • Hex
              • Octal
              • Binary
                • Parse-bits-from-string
                • Parse-bits-from-charlist
                • Nat-to-bin-chars
                  • Basic-nat-to-bin-chars
                  • Nat-to-bin-chars-aux
                • Bin-digit-chars-value
                • Take-leading-bin-digit-chars
                • Bin-digit-char-listp
                • Skip-leading-bit-digits
                • Bin-digit-char-list*p
                • Bin-digit-string-p
                • Bin-digit-char-value
                • Strval2
                • Nat-to-bin-string
                • Bin-digit-char-p
                • Nat-to-bin-string-list
                • Nat-to-bin-string-size
                • Revappend-nat-to-bin-chars
                • Binify-width
                • Binify
            • Pad-trim
            • Coercion
            • Std/strings/digit-to-char
            • Substitution
            • Symbols
          • String-listp
          • Stringp
          • Length
          • Search
          • Remove-duplicates
          • Position
          • Coerce
          • Concatenate
          • Reverse
          • String
          • Subseq
          • Substitute
          • String-upcase
          • String-downcase
          • Count
          • Char
          • String<
          • String-equal
          • String-utilities
          • String-append
          • String>=
          • String<=
          • String>
          • Hex-digit-char-theorems
          • String-downcase-gen
          • String-upcase-gen
        • Program-wrapper
        • Get-internal-time
        • Basics
        • Packages
        • Oracle-eval
        • Defmacro-untouchable
        • <<
        • Primitive
        • Revert-world
        • Unmemoize
        • Set-duplicate-keys-action
        • Symbols
        • Def-list-constructor
        • Easy-simplify-term
        • Defiteration
        • Fake-oracle-eval
        • Defopen
        • Sleep
      • Operational-semantics
      • Real
      • Start-here
      • Miscellaneous
      • Output-controls
      • Bdd
      • Macros
      • Installation
      • Mailing-lists
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
    • Math
    • Testing-utilities
  • Binary

Nat-to-bin-chars

Convert a natural number into a list of bits.

Signature
(nat-to-bin-chars n) → chars
Arguments
n — Guard (natp n).
Returns
chars — Type (bin-digit-char-list*p chars).

For instance, (nat-to-dec-chars 8) is (#\1 #\0 #\0 #\0).

This is like ACL2's built-in function explode-nonnegative-integer, except that it doesn't deal with accumulators and is limited to base 2 numbers. These simplifications lead to particularly nice rules, e.g., about bin-digit-chars-value, and somewhat better performance:

;; Times reported by an AMD FX-8350, Linux, 64-bit CCL:

;; .204 seconds, 303 MB allocated
(progn (gc$)
       (time (loop for i fixnum from 1 to 1000000 do
                   (str::nat-to-bin-chars i))))

;; 1.04 seconds, 303 MB allocated
(progn (gc$)
       (time (loop for i fixnum from 1 to 1000000 do
          (explode-nonnegative-integer i 2 nil))))

Definitions and Theorems

Function: nat-to-bin-chars$inline

(defun nat-to-bin-chars$inline (n)
  (declare (xargs :guard (natp n)))
  (let ((acl2::__function__ 'nat-to-bin-chars))
    (declare (ignorable acl2::__function__))
    (or (nat-to-bin-chars-aux n nil)
        '(#\0))))

Theorem: bin-digit-char-list*p-of-nat-to-bin-chars

(defthm bin-digit-char-list*p-of-nat-to-bin-chars
  (b* ((chars (nat-to-bin-chars$inline n)))
    (bin-digit-char-list*p chars))
  :rule-classes :rewrite)

Theorem: true-listp-of-nat-to-bin-chars

(defthm true-listp-of-nat-to-bin-chars
  (and (true-listp (nat-to-bin-chars n))
       (consp (nat-to-bin-chars n)))
  :rule-classes :type-prescription)

Theorem: character-listp-of-nat-to-bin-chars

(defthm character-listp-of-nat-to-bin-chars
  (character-listp (nat-to-bin-chars n)))

Theorem: nat-to-bin-chars-one-to-one

(defthm nat-to-bin-chars-one-to-one
  (equal (equal (nat-to-bin-chars n)
                (nat-to-bin-chars m))
         (equal (nfix n) (nfix m))))

Theorem: bin-digit-chars-value-of-nat-to-bin-chars

(defthm bin-digit-chars-value-of-nat-to-bin-chars
  (equal (bin-digit-chars-value (nat-to-bin-chars n))
         (nfix n)))

Subtopics

Basic-nat-to-bin-chars
Logically simple definition that is similar to nat-to-bin-chars.
Nat-to-bin-chars-aux