• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • 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
            • Parser
            • Validator
              • Valid-exprs/decls/stmts
              • Valid-stmt
              • Valid-dirdeclor
              • Valid-expr
              • Valid-type-spec
              • Valid-stor-spec-list
              • Valid-binary
              • Valid-unary
              • Valid-initdeclor
              • Valid-fundef
              • Valid-type-spec-list-residual
              • Valid-stringlit-list
              • Valid-cond
              • Valid-lookup-ord
              • Valid-transunit
              • Valid-declor
              • Valid-c-char
              • Valid-transunit-ensemble
              • Valid-iconst
              • Valid-initer
              • Valid-funcall
              • Valid-arrsub
              • Valid-add-ord
              • Valid-univ-char-name
              • Valid-extdecl
              • Valid-extdecl-list
              • Valid-s-char
              • Valid-cconst
              • Valid-sizeof/alignof
              • Valid-memberp
              • Valid-cast
              • Valid-var
              • Valid-add-ord-file-scope
              • Valid-spec/qual
              • Valid-oct-escape
              • Valid-decl-spec
              • Valid-param-declon
              • Valid-enum-const
              • Valid-structdeclor
              • Valid-structdecl
              • Valid-gensel
              • Valid-escape
              • Valid-designor
              • Valid-const
              • Valid-add-ords-file-scope
              • Valid-s-char-list
              • Valid-dec/oct/hex-const
              • Valid-c-char-list
              • Valid-stringlit
                • Valid-member
                • Valid-decl-spec-list
                • Valid-lookup-ord-file-scope
                • Valid-param-declor
                • Valid-spec/qual-list
                • Valid-fconst
                • Valid-block-item
                • Valid-structdeclor-list
                • Valid-align-spec
                • Valid-simple-escape
                • Valid-enumer
                • Valid-decl
                • Valid-enumspec
                • Valid-dirabsdeclor
                • Valid-declor-option
                • Valid-pop-scope
                • Valid-initer-option
                • Valid-block-item-list
                • Valid-absdeclor
                • Valid-push-scope
                • Valid-label
                • Valid-genassoc
                • Valid-tyname
                • Valid-struni-spec
                • Valid-structdecl-list
                • Valid-genassoc-list
                • Valid-dirabsdeclor-option
                • Valid-designor-list
                • Valid-const-expr
                • Valid-initdeclor-list
                • Valid-absdeclor-option
                • Valid-expr-list
                • Valid-desiniter-list
                • Valid-table-num-scopes
                • Valid-param-declon-list
                • Valid-desiniter
                • Valid-const-expr-option
                • Valid-expr-option
                • Valid-statassert
                • Valid-enumer-list
                • Valid-member-designor
                • Valid-init-table
                • Valid-empty-scope
                • Valid-decl-list
              • Printer
              • Formalized-subset
              • Mapping-to-language-definition
              • Input-files
              • Defpred
              • Output-files
              • Abstract-syntax-operations
              • Validation-information
              • Concrete-syntax
              • Ascii-identifiers
              • Unambiguity
              • Preprocessing
              • Abstract-syntax
              • Implementation-environments
              • Standard
              • Gcc-builtins
              • Purity
            • Atc
            • Language
            • Transformation-tools
            • Representation
            • Insertion-sort
            • Pack
          • Bv
          • Imp-language
          • Event-macros
          • Java
          • Riscv
          • 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 ienv) → (mv erp type)
    Arguments
    strlit — Guard (stringlitp strlit).
    ienv — Guard (ienvp ienv).
    Returns
    erp — Type (maybe-msgp erp).
    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 ienv)
      (declare (xargs :guard (and (stringlitp strlit) (ienvp ienv))))
      (let ((__function__ 'valid-stringlit))
        (declare (ignorable __function__))
        (b* (((reterr) (irr-type))
             ((stringlit strlit) strlit)
             ((erp &)
              (valid-s-char-list strlit.schars strlit.prefix? ienv)))
          (retok (type-array)))))

    Theorem: maybe-msgp-of-valid-stringlit.erp

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

    Theorem: typep-of-valid-stringlit.type

    (defthm typep-of-valid-stringlit.type
      (b* (((mv acl2::?erp ?type)
            (valid-stringlit strlit ienv)))
        (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)
                              ienv)
             (valid-stringlit strlit ienv)))

    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 ienv)
                      (valid-stringlit strlit-equiv ienv)))
      :rule-classes :congruence)

    Theorem: valid-stringlit-of-ienv-fix-ienv

    (defthm valid-stringlit-of-ienv-fix-ienv
      (equal (valid-stringlit strlit (c::ienv-fix ienv))
             (valid-stringlit strlit ienv)))

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

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