• 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-2part

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

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

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

    Definitions and Theorems

    Function: atc-check-symbol-2part

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

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

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

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

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

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

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