• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
        • Error-checking
        • Fty-extensions
        • Isar
        • Kestrel-utilities
        • Set
        • Soft
        • C
          • Syntax-for-tools
          • Atc
            • Atc-implementation
              • Atc-abstract-syntax
              • Atc-pretty-printer
              • Atc-event-and-code-generation
                • Atc-symbolic-computation-states
                • Atc-symbolic-execution-rules
                • Atc-gen-ext-declon-lists
                • Atc-function-and-loop-generation
                • Atc-statement-generation
                • Atc-gen-fileset
                • Atc-gen-everything
                • Atc-gen-obj-declon
                • Atc-gen-fileset-event
                • Atc-tag-tables
                • Atc-expression-generation
                • Atc-generation-contexts
                • Atc-gen-wf-thm
                • Term-checkers-atc
                • Atc-variable-tables
                • Term-checkers-common
                  • Atc-check-binop
                  • Atc-check-iconst
                  • Atc-check-unop
                  • Atc-check-conv
                  • Atc-check-symbol-5part
                  • Atc-check-symbol-4part
                  • Atc-check-symbol-3part
                    • Atc-check-symbol-2part
                  • Atc-gen-init-fun-env-thm
                  • Atc-gen-appconds
                  • Read-write-variables
                  • Atc-gen-thm-assert-events
                  • Test*
                  • Atc-gen-prog-const
                  • Atc-gen-expr-bool
                  • Atc-theorem-generation
                  • Atc-tag-generation
                  • Atc-gen-expr-pure
                  • Atc-function-tables
                  • Atc-object-tables
                • Fty-pseudo-term-utilities
                • Atc-term-recognizers
                • Atc-input-processing
                • Atc-shallow-embedding
                • Atc-process-inputs-and-gen-everything
                • Atc-table
                • Atc-fn
                • Atc-pretty-printing-options
                • Atc-types
                • Atc-macro-definition
              • Atc-tutorial
            • Language
            • Representation
            • Transformation-tools
            • Insertion-sort
            • Pack
          • Bv
          • Imp-language
          • Event-macros
          • Java
          • Bitcoin
          • Ethereum
          • Yul
          • Zcash
          • ACL2-programming-language
          • Prime-fields
          • Json
          • Syntheto
          • File-io-light
          • Cryptography
          • Number-theory
          • Lists-light
          • Axe
          • Builtins
          • Solidity
          • Helpers
          • Htclient
          • Typed-lists-light
          • Arithmetic-light
        • X86isa
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Term-checkers-common

    Atc-check-symbol-3part

    Check if a symbol consists of three parts separated by dash.

    Signature
    (atc-check-symbol-3part sym) → (mv yes/no part1 part2 part3)
    Arguments
    sym — Guard (symbolp sym).
    Returns
    yes/no — Type (booleanp yes/no).
    part1 — Type (symbolp part1).
    part2 — Type (symbolp part2).
    part3 — Type (symbolp part3).

    If the symbol has the form <part1>-<part2>-<part3>, with <part1> and <part2> and <part3> non-empty and without dashes, we return an indication of success and the three parts. Otherwise, we return an indication of failure and nil as the parts. The three returned symbols, when the function is successful, are interned in the same package as the input symbol.

    Definitions and Theorems

    Function: atc-check-symbol-3part

    (defun atc-check-symbol-3part (sym)
      (declare (xargs :guard (symbolp sym)))
      (let ((__function__ 'atc-check-symbol-3part))
        (declare (ignorable __function__))
        (b* ((parts (str::strtok! (symbol-name sym)
                                  (list #\-)))
             ((unless (= (len parts) 3))
              (mv nil nil nil nil))
             (part1 (intern-in-package-of-symbol (first parts)
                                                 sym))
             (part2 (intern-in-package-of-symbol (second parts)
                                                 sym))
             (part3 (intern-in-package-of-symbol (third parts)
                                                 sym)))
          (mv t part1 part2 part3))))

    Theorem: booleanp-of-atc-check-symbol-3part.yes/no

    (defthm booleanp-of-atc-check-symbol-3part.yes/no
      (b* (((mv ?yes/no ?part1 ?part2 ?part3)
            (atc-check-symbol-3part sym)))
        (booleanp yes/no))
      :rule-classes :rewrite)

    Theorem: symbolp-of-atc-check-symbol-3part.part1

    (defthm symbolp-of-atc-check-symbol-3part.part1
      (b* (((mv ?yes/no ?part1 ?part2 ?part3)
            (atc-check-symbol-3part sym)))
        (symbolp part1))
      :rule-classes :rewrite)

    Theorem: symbolp-of-atc-check-symbol-3part.part2

    (defthm symbolp-of-atc-check-symbol-3part.part2
      (b* (((mv ?yes/no ?part1 ?part2 ?part3)
            (atc-check-symbol-3part sym)))
        (symbolp part2))
      :rule-classes :rewrite)

    Theorem: symbolp-of-atc-check-symbol-3part.part3

    (defthm symbolp-of-atc-check-symbol-3part.part3
      (b* (((mv ?yes/no ?part1 ?part2 ?part3)
            (atc-check-symbol-3part sym)))
        (symbolp part3))
      :rule-classes :rewrite)