• 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
              • Validation-information
                • Abstract-syntax-annop
                • Types
                  • Type-compatiblep
                  • Type-uaconvert-signed-unsigned
                  • Type-uaconvert
                  • Type-integer-promote
                  • Type-params-compatiblep
                  • Type-option
                  • Type-formalp
                  • Ldm-type
                  • Make-pointers-to
                    • Type-list-default-arg-promote
                    • Type-uaconvert-unsigned
                    • Type-uaconvert-signed
                    • Type-default-arg-promote
                    • Type-default-arg-promotedp
                    • Type-params-composite
                    • Type-integer-promotedp
                    • Ldm-type-option-set
                    • Type-unsigned-integerp
                    • Type-standard-unsigned-integerp
                    • Type-signed-integerp
                    • Type-to-value-kind
                    • Type-standard-signed-integerp
                    • Ildm-type
                    • Type-arithmeticp
                    • Ldm-type-set
                    • Ldm-type-option
                    • Type-standard-integerp
                    • Type-option-set-formalp
                    • Type-real-floatingp
                    • Type-option-formalp
                    • Type-integerp
                    • Type-characterp
                    • Type-basicp
                    • Type-aggregatep
                    • Type-scalarp
                    • Type-realp
                    • Type-fpconvert
                    • Type-floatingp
                    • Type-complexp
                    • Type-set-formalp
                    • Type-apconvert
                    • Type-composite
                    • Ident-type-map
                    • Type-set
                    • Type-option-type-alist
                    • Type-option-set
                    • Type-list-compatiblep
                    • Irr-type-params
                    • Irr-type
                    • Type-list-composite
                    • Type/type-params/type-list
                  • Abstract-syntax-anno-additional-theroems
                  • Valid-ext-info
                  • Valid-table
                  • Valid-ord-info
                  • Uid
                  • Stmts-types
                  • Lifetime
                  • Initdeclor-info
                  • Fundef-types
                  • Expr-type
                  • Valid-defstatus
                  • Var-info
                  • Valid-ord-info-option
                  • Valid-ext-info-option
                  • Uid-option
                  • Linkage-option
                  • Linkage
                  • Lifetime-option
                  • Valid-table-option
                  • Iconst-info
                  • Param-declor-nonabstract-info
                  • Fundef-info
                  • Expr-null-pointer-constp
                  • Valid-scope
                  • Const-expr-null-pointer-constp
                  • Expr-string-info
                  • Expr-funcall-info
                  • Expr-arrsub-info
                  • Tyname-info
                  • Transunit-info
                  • Expr-unary-info
                  • Expr-const-info
                  • Expr-binary-info
                  • Stmt-types
                  • Block-item-list-types
                  • Initer-type
                  • Valid-ord-scope
                  • Uid-increment
                  • Uid-equal
                  • Coerce-var-info
                  • Valid-externals
                  • Irr-var-info
                  • Valid-scope-list
                  • Irr-valid-table
                  • Irr-lifetime
                  • Irr-uid
                  • Irr-linkage
                  • Block-item-types
                  • Comp-stmt-types
              • 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
    • Types

    Make-pointers-to

    Derive a pointer type for each type qualifier and attribute specifier list.

    Signature
    (make-pointers-to pointers type) → new-type
    Arguments
    pointers — Guard (typequal/attribspec-list-listp pointers).
    type — Guard (typep type).
    Returns
    new-type — Type (typep new-type).

    This takes the list of lists of type qualifiers and attribute specifiers from a declarator or abstract declarator, and creates the corresponding (possibly pointer) type.

    Since our approximate type system does not incorporate type qualifiers, each cons of the pointers list is used only to derive a pointer from the type.

    Definitions and Theorems

    Function: make-pointers-to

    (defun make-pointers-to (pointers type)
      (declare
           (xargs :guard (and (typequal/attribspec-list-listp pointers)
                              (typep type))))
      (if (endp pointers)
          (type-fix type)
        (make-type-pointer :to (make-pointers-to (rest pointers)
                                                 type))))

    Theorem: typep-of-make-pointers-to

    (defthm typep-of-make-pointers-to
      (b* ((new-type (make-pointers-to pointers type)))
        (typep new-type))
      :rule-classes :rewrite)

    Theorem: make-pointers-to-of-typequal/attribspec-list-list-fix-pointers

    (defthm
         make-pointers-to-of-typequal/attribspec-list-list-fix-pointers
     (equal
          (make-pointers-to (typequal/attribspec-list-list-fix pointers)
                            type)
          (make-pointers-to pointers type)))

    Theorem: make-pointers-to-typequal/attribspec-list-list-equiv-congruence-on-pointers

    (defthm
     make-pointers-to-typequal/attribspec-list-list-equiv-congruence-on-pointers
     (implies
          (typequal/attribspec-list-list-equiv pointers pointers-equiv)
          (equal (make-pointers-to pointers type)
                 (make-pointers-to pointers-equiv type)))
     :rule-classes :congruence)

    Theorem: make-pointers-to-of-type-fix-type

    (defthm make-pointers-to-of-type-fix-type
      (equal (make-pointers-to pointers (type-fix type))
             (make-pointers-to pointers type)))

    Theorem: make-pointers-to-type-equiv-congruence-on-type

    (defthm make-pointers-to-type-equiv-congruence-on-type
      (implies (type-equiv type type-equiv)
               (equal (make-pointers-to pointers type)
                      (make-pointers-to pointers type-equiv)))
      :rule-classes :congruence)