• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • 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
            • Disambiguator
            • Abstract-syntax
            • Parser
            • Validator
              • Valid-exprs/decls/stmts
              • Valid-stmt
              • Valid-expr
              • Valid-dirdeclor
              • Valid-type-spec
              • Valid-transunit
              • Valid-stor-spec-list
              • Valid-binary
              • Valid-unary
              • Valid-initdeclor
              • Valid-fundef
              • Valid-type-spec-list-residual
              • Valid-cond
              • Valid-lookup-ord
              • Valid-transunit-ensemble
              • Valid-declor
              • Valid-iconst
              • Valid-initer
              • Valid-c-char
              • Valid-stringlit-list
              • Valid-funcall
              • Valid-add-ord
              • Valid-arrsub
              • Valid-univ-char-name
              • Valid-extdecl
              • Valid-extdecl-list
              • Valid-cast
              • Valid-add-ord-file-scope
              • Valid-spec/qual
              • Valid-sizeof/alignof
              • Valid-memberp
              • Valid-decl-spec
              • Valid-var
              • Valid-param-declon
              • Valid-oct-escape
              • Valid-structdeclor
              • Valid-structdecl
              • Valid-designor
              • Valid-escape
              • Valid-enum-const
              • Valid-cconst
              • Valid-s-char
              • Valid-dec/oct/hex-const
              • Valid-const
              • Valid-gensel
              • Valid-decl-spec-list
              • Valid-lookup-ord-file-scope
              • Valid-member
              • Valid-param-declor
              • Valid-spec/qual-list
              • Valid-fconst
              • Valid-stringlit
                • Valid-s-char-list
                • Valid-c-char-list
                • Valid-block-item
                • Valid-structdeclor-list
                • Valid-simple-escape
                • Valid-align-spec
                • Valid-enumer
                • Valid-dirabsdeclor
                • Valid-decl
                • Valid-pop-scope
                • Valid-enumspec
                • Valid-declor-option
                • Valid-push-scope
                • Valid-initer-option
                • Valid-block-item-list
                • Valid-absdeclor
                • Valid-label
                • Valid-genassoc
                • Valid-tyname
                • Valid-strunispec
                • Valid-structdecl-list
                • Valid-genassoc-list
                • Valid-dirabsdeclor-option
                • Valid-designor-list
                • Valid-const-expr
                • Valid-initdeclor-list
                • Valid-desiniter-list
                • Valid-absdeclor-option
                • Valid-table-num-scopes
                • Valid-expr-list
                • Valid-param-declon-list
                • Valid-desiniter
                • Valid-const-expr-option
                • Valid-expr-option
                • Valid-statassert
                • Valid-enumer-list
                • Valid-init-table
                • Valid-empty-scope
                • Valid-member-designor
                • Valid-decl-list
              • Printer
              • Formalized-subset
              • Mapping-to-language-definition
              • Input-files
              • Defpred
              • Output-files
              • Abstract-syntax-operations
              • Validation-information
              • Implementation-environments
              • Concrete-syntax
              • Unambiguity
              • Ascii-identifiers
              • Preprocessing
              • Abstraction-mapping
            • Atc
            • 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
    • Validator

    Valid-stringlit

    Validate a string literal.

    Signature
    (valid-stringlit strlit) → (mv erp type)
    Arguments
    strlit — Guard (stringlitp strlit).
    Returns
    type — Type (typep type).

    We check the characters that form the string literal, with respect to the prefix (if any). If validation is successful, we return the type of the string literal, which according to [C17:6.4.5/6], is an array type of char or wchar_t or char16_t or char32_t. In our current approximate type system, we just have a single type for arrays, so we return that.

    Definitions and Theorems

    Function: valid-stringlit

    (defun valid-stringlit (strlit)
      (declare (xargs :guard (stringlitp strlit)))
      (let ((__function__ 'valid-stringlit))
        (declare (ignorable __function__))
        (b* (((reterr) (irr-type))
             ((stringlit strlit) strlit)
             ((erp &)
              (valid-s-char-list strlit.schars strlit.prefix?)))
          (retok (type-array)))))

    Theorem: typep-of-valid-stringlit.type

    (defthm typep-of-valid-stringlit.type
      (b* (((mv acl2::?erp ?type)
            (valid-stringlit strlit)))
        (typep type))
      :rule-classes :rewrite)

    Theorem: valid-stringlit-of-stringlit-fix-strlit

    (defthm valid-stringlit-of-stringlit-fix-strlit
      (equal (valid-stringlit (stringlit-fix strlit))
             (valid-stringlit strlit)))

    Theorem: valid-stringlit-stringlit-equiv-congruence-on-strlit

    (defthm valid-stringlit-stringlit-equiv-congruence-on-strlit
      (implies (stringlit-equiv strlit strlit-equiv)
               (equal (valid-stringlit strlit)
                      (valid-stringlit strlit-equiv)))
      :rule-classes :congruence)