• 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
        • C
          • Syntax-for-tools
            • Formalized-subset
            • Mapping-to-language-definition
            • Input-files
            • Compilation-database
            • Printer
            • Output-files
            • Abstract-syntax-operations
            • Implementation-environments
            • Abstract-syntax
            • Concrete-syntax
            • Disambiguation
            • Validation
              • Validator
                • Valid-exprs/decls/stmts
                • Valid-stmt
                • Valid-expr
                • Valid-dirdeclor
                • Valid-binary
                • Valid-type-spec
                • Valid-transunit
                • Valid-stor-spec-list
                • Valid-prototype-args
                • Valid-fundef
                • Valid-unary
                • Valid-init-declor
                • Valid-stringlit-list
                • Valid-type-spec-list-residual
                • Valid-transunit-ensemble
                • Valid-cond
                • Valid-lookup-ord
                • Valid-c-char
                • Valid-funcall
                • Valid-iconst
                • Valid-add-ord-objfuns-file-scope
                • Valid-initer
                • Valid-declor
                • Valid-add-ord
                • Valid-arrsub
                • Valid-update-ext
                • Valid-ext-declon-list
                • Valid-ext-declon
                • Valid-univ-char-name
                • Valid-memberp
                • Valid-add-ord-file-scope
                • Valid-var
                • Valid-s-char
                • Valid-decl-spec
                • Valid-cconst
                • Valid-cast
                • Valid-sizeof/alignof
                • Valid-stringlit
                • Valid-spec/qual
                • Valid-oct-escape
                • Valid-get-fresh-uid
                • Valid-param-declon
                • Valid-struct-declon
                • Valid-struct-declor
                • Valid-has-internalp
                • Valid-escape
                • Valid-enum-const
                • Valid-gensel
                • Valid-const
                • Valid-desiniter-list
                • Valid-designor
                • Valid-param-declor
                • Valid-dec/oct/hex-const
                • Valid-s-char-list
                • Valid-decl-spec-list
                  • Valid-c-char-list
                  • Valid-member
                  • Valid-init-table
                  • Valid-lookup-ord-file-scope
                  • Valid-comp-stmt
                  • Valid-spec/qual-list
                  • Valid-lookup-ext
                  • Valid-designor-list
                  • Valid-fconst
                  • Valid-block-item
                  • Valid-struct-declor-list
                  • Valid-genassoc-list
                  • Valid-align-spec
                  • Valid-enumer
                  • Valid-declon
                  • Valid-simple-escape
                  • Valid-enum-spec
                  • Valid-dirabsdeclor
                  • Valid-declor-option
                  • Valid-pop-scope
                  • Valid-initer-option
                  • Valid-expr-list
                  • Valid-block-item-list
                  • Valid-absdeclor
                  • Valid-struct-declon-list
                  • Valid-push-scope
                  • Valid-label
                  • Valid-genassoc
                  • Valid-tyname
                  • Valid-struni-spec
                  • Valid-dirabsdeclor-option
                  • Valid-const-expr
                  • Valid-init-declor-list
                  • Valid-absdeclor-option
                  • Valid-param-declon-list
                  • Valid-desiniter
                  • Valid-const-expr-option
                  • Valid-table-num-scopes
                  • Valid-expr-option
                  • Valid-statassert
                  • Valid-enumer-list
                  • Valid-member-designor
                  • Valid-declon-list
                  • Valid-empty-scope
                • Validation-information
              • Gcc-builtins
              • Preprocessing
              • Parsing
            • Atc
            • Transformation-tools
            • Language
            • Representation
            • Insertion-sort
            • Pack
          • Soft
          • Bv
          • Imp-language
          • Ethereum
          • Event-macros
          • Java
          • Riscv
          • Bitcoin
          • Zcash
          • Yul
          • ACL2-programming-language
          • Prime-fields
          • Json
          • Syntheto
          • File-io-light
          • Cryptography
          • Number-theory
          • Axe
          • Lists-light
          • Builtins
          • Solidity
          • Helpers
          • Htclient
          • Typed-lists-light
          • Arithmetic-light
        • X86isa
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Validator
    • Valid-exprs/decls/stmts

    Valid-decl-spec-list

    Validate a list of declaration specifiers.

    Signature
    (valid-decl-spec-list declspecs type? tyspecs storspecs table ienv) 
      → 
    (mv erp new-declspecs type all-storspecs return-types new-table)
    Arguments
    declspecs — Guard (decl-spec-listp declspecs).
    type? — Guard (type-optionp type?).
    tyspecs — Guard (type-spec-listp tyspecs).
    storspecs — Guard (stor-spec-listp storspecs).
    table — Guard (valid-tablep table).
    ienv — Guard (ienvp ienv).
    Returns
    erp — Type (maybe-msgp erp).
    new-declspecs — Type (decl-spec-listp new-declspecs).
    type — Type (typep type).
    all-storspecs — Type (stor-spec-listp all-storspecs).
    return-types — Type (type-setp return-types).
    new-table — Type (valid-tablep new-table).

    If validation is successful, we return the type determined by the type specifiers, and the list of storage class specifiers extracted from the declaration specifiers.

    We go through each element of the list, threading the partial results through. When we reach the end of the list, if a type has been determined, we return it. Otherwise, we use a separate function to attempt to determine it from the collected type specifiers.

    Definitions and Theorems

    Theorem: valid-decl-spec-list.all-storspecs-type-prescription

    (defthm valid-decl-spec-list.all-storspecs-type-prescription
      (b* (((mv acl2::?erp ?new-declspecs ?type
                ?all-storspecs ?return-types ?new-table)
            (valid-decl-spec-list declspecs
                                  type? tyspecs storspecs table ienv)))
        (true-listp all-storspecs))
      :rule-classes :type-prescription)