• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
      • Legacy-defrstobj
      • Proof-checker-array
      • Soft
      • C
      • Farray
      • Rp-rewriter
      • Instant-runoff-voting
      • Imp-language
      • Sidekick
      • Leftist-trees
      • Java
      • Riscv
      • Taspi
      • Bitcoin
      • Des
      • Ethereum
      • X86isa
      • Sha-2
      • Yul
      • Zcash
      • Proof-checker-itp13
      • Regex
      • ACL2-programming-language
      • Json
      • Jfkr
      • Equational
      • Cryptography
      • Poseidon
      • Where-do-i-place-my-book
      • Axe
      • 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-numeric-literal

    Lex an atomic-literal that is a numeric literal.

    Signature
    (lex-numeric-literal input) → (mv tree rest-input)
    Arguments
    input — Guard (nat-listp input).
    Returns
    tree — Type (abnf::tree-resultp tree).
    rest-input — Type (nat-listp rest-input).

    More precisely, lex an integer-literal, field-literal, product-group-literal, or scalar-literal. Return a numeric-literal tree that wraps that tree if successful.

    It is convenient to have this lexing function, called when lexing a token, since numeric literals all start with a decimal digit, and also share some structure that may enable future optimizations. Currently this lexing function is not very optimized, as it tries each kind of literal independently.

    Definitions and Theorems

    Function: lex-numeric-literal

    (defun lex-numeric-literal (input)
      (declare (xargs :guard (nat-listp input)))
      (let ((__function__ 'lex-numeric-literal))
        (declare (ignorable __function__))
        (b* (((mv tree input)
              (b* (((mv tree input1)
                    (lex-integer-literal input))
                   ((when (not (reserrp tree)))
                    (mv tree input1))
                   ((mv tree input1)
                    (lex-field-literal input))
                   ((when (not (reserrp tree)))
                    (mv tree input1))
                   ((mv tree input1)
                    (lex-product-group-literal input))
                   ((when (not (reserrp tree)))
                    (mv tree input1))
                   ((mv tree input1)
                    (lex-scalar-literal input))
                   ((when (not (reserrp tree)))
                    (mv tree input1)))
                (mv (reserrf :no-numeric-literal)
                    (nat-list-fix input))))
             ((when (reserrp tree)) (mv tree input)))
          (mv (abnf-tree-wrap tree "numeric-literal")
              input))))

    Theorem: tree-resultp-of-lex-numeric-literal.tree

    (defthm tree-resultp-of-lex-numeric-literal.tree
      (b* (((mv ?tree ?rest-input)
            (lex-numeric-literal input)))
        (abnf::tree-resultp tree))
      :rule-classes :rewrite)

    Theorem: nat-listp-of-lex-numeric-literal.rest-input

    (defthm nat-listp-of-lex-numeric-literal.rest-input
      (b* (((mv ?tree ?rest-input)
            (lex-numeric-literal input)))
        (nat-listp rest-input))
      :rule-classes :rewrite)

    Theorem: len-of-lex-numeric-literal-<=

    (defthm len-of-lex-numeric-literal-<=
      (b* (((mv ?tree ?rest-input)
            (lex-numeric-literal input)))
        (<= (len rest-input) (len input)))
      :rule-classes :linear)

    Theorem: len-of-lex-numeric-literal-<

    (defthm len-of-lex-numeric-literal-<
      (b* (((mv ?tree ?rest-input)
            (lex-numeric-literal input)))
        (implies (not (reserrp tree))
                 (< (len rest-input) (len input))))
      :rule-classes :linear)

    Theorem: lex-numeric-literal-of-nat-list-fix-input

    (defthm lex-numeric-literal-of-nat-list-fix-input
      (equal (lex-numeric-literal (nat-list-fix input))
             (lex-numeric-literal input)))

    Theorem: lex-numeric-literal-nat-list-equiv-congruence-on-input

    (defthm lex-numeric-literal-nat-list-equiv-congruence-on-input
      (implies (acl2::nat-list-equiv input input-equiv)
               (equal (lex-numeric-literal input)
                      (lex-numeric-literal input-equiv)))
      :rule-classes :congruence)