• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
      • Legacy-defrstobj
      • C
      • Proof-checker-array
      • Soft
      • Farray
      • Rp-rewriter
      • Instant-runoff-voting
      • Imp-language
      • Sidekick
      • Ethereum
      • Leftist-trees
      • Java
      • Riscv
      • Taspi
      • Bitcoin
      • Zcash
      • Des
      • X86isa
      • Sha-2
      • Yul
      • Proof-checker-itp13
      • Regex
      • ACL2-programming-language
      • Json
      • Jfkr
      • Equational
      • Cryptography
      • Axe
      • Poseidon
      • Where-do-i-place-my-book
      • Aleo
        • Aleobft
        • Aleovm
        • Leo
          • Grammar
          • Early-version
            • Json2ast
            • Testing
            • Definition
              • Flattening
              • Abstract-syntax
              • Dynamic-semantics
              • Compilation
              • Static-semantics
              • Concrete-syntax
                • Pretty-printer
                • Grammar
                • Lexing-and-parsing
                  • Lexer
                    • Lex-symbol
                    • Lex-rest-of-block-comment-+-lex-rest-of-block-comment-after-star
                    • Lex-not-double-quote-or-backslash-or-line-feed-or-carriage-return
                    • Lex-not-star-or-slash-or-line-feed-or-carriage-return
                    • Lex-identifier/keyword/boolean/address
                    • Lex-simple-character-escape
                    • Lex-hexadecimal-digit
                    • Lex-token
                    • Lex-not-star-or-line-feed-or-carriage-return
                    • Lex-u8/16/32/64/128
                    • Lex-not-line-feed-or-carriage-return
                    • Lex-i8/16/32/64/128
                    • Lex-string-literal-element
                    • Lex-safe-ascii
                    • Lex-numeric-literal
                    • Lex-safe-nonascii
                    • Lex-letter/decdigit/underscore
                    • Lex-line-terminator
                    • Lex-unicode-character-escape
                    • Lex-ascii-character-escape
                    • Lex-1*6-hexadecimal-digit
                      • Lex-whitespace
                      • Lex-unsigned-literal
                      • Lex-lcletter/decdigit
                      • Lex-string-literal
                      • Lex-signed-literal
                      • Lex-product-group-literal
                      • Lex-lexeme
                      • Lex-single-quote-escape
                      • Lex-integer-literal
                      • Lex-double-quote-escape
                      • Lex-address-literal
                      • Lex-scalar-literal
                      • Lex-null-character-escape
                      • Lex-identifier
                      • Lex-horizontal-tab-escape
                      • Lex-carriage-return-escape
                      • Lex-line-comment
                      • Lex-letter
                      • Lex-field-literal
                      • Lex-comment
                      • Lex-block-comment
                      • Lex-uppercase-letter
                      • Lex-lowercase-letter
                      • Lex-line-feed-escape
                      • Lex-horizontal-tab
                      • Lex-carriage-return
                      • Lex-backslash-escape
                      • Lex-annotation
                      • Lex-visible-ascii
                      • Lex-single-quote
                      • Lex-octal-digit
                      • Lex-double-quote
                      • Lex-decimal-digit
                      • Lex-*-not-line-feed-or-carriage-return
                      • Lex-line-feed
                      • Lex-space
                      • Lex-numeral
                      • Lex-*-letter/decdigit/underscore
                      • Lex-*-string-literal-element
                      • Lex-58-lcletter/decdigit
                      • Lexemize-leo-from-string
                      • Lex-*-lcletter/decdigit
                      • Lex-*-hexadecimal-digit
                      • Lex-1*-decimal-digit
                      • Lex-*-decimal-digit
                      • Lex-*-lexeme
                      • Lexemize-leo-from-bytes
                      • Lexemize-leo
                      • *defparse-leo-repetition-table*
                      • *defparse-leo-group-table*
                      • Lex-generation-macros
                      • Lex-generation-tables
                      • *defparse-leo-option-table*
                    • Parser
                    • Token-fringe
                    • Longest-lexp
                    • Parser-interface
                    • Grammar-lexp
                    • Identifier-lexp
                    • Output-file-parsep
                    • Input-file-parsep
                    • File-lex-parse-p
                    • Filter-tokens
                    • Lexp
                    • File-parsep
                    • Input-parser
                    • Output-file-lex-parse-p
                    • Input-file-lex-parse-p
                    • Parser-abstractor-interface
                    • Identifier-abnf-stringp
                    • Symbol-abnf-stringp
                    • Keyword-abnf-stringp
                    • Output-parser
                    • Tokenizer
                  • Input-pretty-printer
                  • Output-pretty-printer
                  • Unicode-characters
                  • Concrete-syntax-trees
                  • Symbols
                  • Keywords
        • Bigmems
        • Builtins
        • Execloader
        • Solidity
        • Paco
        • Concurrent-programs
        • Bls12-377-curves
      • Debugging
      • Community
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Lexer

    Lex-1*6-hexadecimal-digit

    Lex a 1*6hexadecimal-digit.

    Signature
    (lex-1*6-hexadecimal-digit input) → (mv trees rest-input)
    Arguments
    input — Guard (nat-listp input).
    Returns
    trees — Type (abnf::tree-list-resultp trees).
    rest-input — Type (nat-listp rest-input).

    This is used to lex Unicode escape sequences. We just lex any number of hexadecimal digits, and we ensure that we find between one and six. If we read none, it is clearly a failure. If we read more than six, there is no point in just considering the first six and continuing the lexing, because the six hexadecimal digits must be followed by a closing brace: so, if instead there is a seventh hexadecimal digit, this cannot be part of a valid Unicode character escape.

    Definitions and Theorems

    Function: lex-1*6-hexadecimal-digit

    (defun lex-1*6-hexadecimal-digit (input)
      (declare (xargs :guard (nat-listp input)))
      (let ((__function__ 'lex-1*6-hexadecimal-digit))
        (declare (ignorable __function__))
        (b* (((mv trees input1)
              (lex-*-hexadecimal-digit input))
             ((unless (and (<= 1 (len trees))
                           (<= (len trees) 6)))
              (mv (reserrf (list :found trees))
                  (nat-list-fix input))))
          (mv trees input1))))

    Theorem: tree-list-resultp-of-lex-1*6-hexadecimal-digit.trees

    (defthm tree-list-resultp-of-lex-1*6-hexadecimal-digit.trees
      (b* (((mv ?trees ?rest-input)
            (lex-1*6-hexadecimal-digit input)))
        (abnf::tree-list-resultp trees))
      :rule-classes :rewrite)

    Theorem: nat-listp-of-lex-1*6-hexadecimal-digit.rest-input

    (defthm nat-listp-of-lex-1*6-hexadecimal-digit.rest-input
      (b* (((mv ?trees ?rest-input)
            (lex-1*6-hexadecimal-digit input)))
        (nat-listp rest-input))
      :rule-classes :rewrite)

    Theorem: len-of-lex-1*6-hexadecimal-digit-<=

    (defthm len-of-lex-1*6-hexadecimal-digit-<=
      (b* (((mv ?trees ?rest-input)
            (lex-1*6-hexadecimal-digit input)))
        (<= (len rest-input) (len input)))
      :rule-classes :linear)

    Theorem: lex-1*6-hexadecimal-digit-of-nat-list-fix-input

    (defthm lex-1*6-hexadecimal-digit-of-nat-list-fix-input
      (equal (lex-1*6-hexadecimal-digit (nat-list-fix input))
             (lex-1*6-hexadecimal-digit input)))

    Theorem: lex-1*6-hexadecimal-digit-nat-list-equiv-congruence-on-input

    (defthm lex-1*6-hexadecimal-digit-nat-list-equiv-congruence-on-input
      (implies (acl2::nat-list-equiv input input-equiv)
               (equal (lex-1*6-hexadecimal-digit input)
                      (lex-1*6-hexadecimal-digit input-equiv)))
      :rule-classes :congruence)