• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • ACL2
    • Macro-libraries
    • 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
          • Language
            • Abstract-syntax
              • Tyspecseq
              • Expr
              • Binop
              • Fileset
              • Obj-declor
              • Ident
              • Iconst
              • Obj-adeclor
              • Abstract-syntax-operations
                • Stmts/blocks-nocallsp
                • Tyspec+declor-to-ident+params+tyname
                • Fundef-list-to-fun-declon-list
                • Fundef-list->name-list
                • Ident+tyname-to-tyspec+declor
                • Tyspec+declor-to-ident+tyname
                  • Obj-declon-to-ident+scspec+tyname+init
                  • Ident+adeclor-to-obj-declor
                  • Ident+adeclor-to-fun-declor
                  • Fun-adeclor-to-params+declor
                  • Param-declon-list-to-ident+tyname-lists
                  • Obj-declor-to-ident+adeclor
                  • Fun-declor-to-ident+adeclor
                  • Expr-constp
                  • Fundef-to-fun-declon
                  • Param-declon-to-ident+tyname
                  • Ext-declon-list->fundef-list
                  • Struct-declon-to-ident+tyname
                  • Unop-nonpointerp
                  • Expr-nocallsp
                  • Expr-list-nocallsp
                  • Binop-strictp
                  • Initer-option-nocallsp
                  • Expr-list-constp
                  • Obj-declon-nocallsp
                  • Expr-option-nocallsp
                  • Binop-purep
                  • Initer-nocallsp
                  • Label-nocallsp
                  • Fundef->name
                  • Block-item-nocallsp
                  • Block-item-list-nocallsp
                  • Stmt-nocallsp
                • Const
                • Fundef
                • Unop
                • File
                • Tag-declon
                • Fun-declor
                • Obj-declon
                • Iconst-length
                • Label
                • Struct-declon
                • Initer
                • Ext-declon
                • Fun-adeclor
                • Expr-option
                • Iconst-base
                • Initer-option
                • Iconst-option
                • Tyspecseq-option
                • Stmt-option
                • Scspecseq
                • Param-declon
                • Obj-declon-option
                • File-option
                • Tyname
                • Transunit
                • Fun-declon
                • Transunit-result
                • Param-declon-list
                • Struct-declon-list
                • Expr-list
                • Tyspecseq-list
                • Ident-set
                • Ident-list
                • Ext-declon-list
                • Unop-list
                • Tyname-list
                • Fundef-list
                • Fun-declon-list
                • Binop-list
                • Stmt-fixtypes
                • Expr-fixtypes
              • Integer-ranges
              • Implementation-environments
              • Dynamic-semantics
              • Static-semantics
              • Grammar
              • Integer-formats
              • Types
              • Portable-ascii-identifiers
              • Values
              • Integer-operations
              • Computation-states
              • Object-designators
              • Operations
              • Errors
              • Tag-environments
              • Function-environments
              • Character-sets
              • Flexible-array-member-removal
              • Arithmetic-operations
              • Pointer-operations
              • Bytes
              • Keywords
              • Real-operations
              • Array-operations
              • Scalar-operations
              • Structure-operations
            • 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
    • Abstract-syntax-operations

    Tyspec+declor-to-ident+tyname

    Turn a type specifier sequence and an object declarator into an identifier and a type name.

    Signature
    (tyspec+declor-to-ident+tyname tyspec declor) → (mv id tyname)
    Arguments
    tyspec — Guard (tyspecseqp tyspec).
    declor — Guard (obj-declorp declor).
    Returns
    id — Type (identp id).
    tyname — Type (tynamep tyname).

    We decompose the declarator into an identifier and an abstract declarator, and we form a type name with the latter and the type specifier sequence.

    The name of this ACL2 function does not mention obj explicitly, but the fact that it deals with object declarators is implicit in the fact that it returns an identifier and a type name.

    In essence, we turn (the constituents of) an object declaration into its name and type, which are somewhat mixed in the C syntax.

    Definitions and Theorems

    Function: tyspec+declor-to-ident+tyname

    (defun tyspec+declor-to-ident+tyname (tyspec declor)
      (declare (xargs :guard (and (tyspecseqp tyspec)
                                  (obj-declorp declor))))
      (let ((__function__ 'tyspec+declor-to-ident+tyname))
        (declare (ignorable __function__))
        (b* (((mv id adeclor)
              (obj-declor-to-ident+adeclor declor)))
          (mv id
              (make-tyname :tyspec tyspec
                           :declor adeclor)))))

    Theorem: identp-of-tyspec+declor-to-ident+tyname.id

    (defthm identp-of-tyspec+declor-to-ident+tyname.id
      (b* (((mv acl2::?id ?tyname)
            (tyspec+declor-to-ident+tyname tyspec declor)))
        (identp id))
      :rule-classes :rewrite)

    Theorem: tynamep-of-tyspec+declor-to-ident+tyname.tyname

    (defthm tynamep-of-tyspec+declor-to-ident+tyname.tyname
      (b* (((mv acl2::?id ?tyname)
            (tyspec+declor-to-ident+tyname tyspec declor)))
        (tynamep tyname))
      :rule-classes :rewrite)

    Theorem: tyspec+declor-to-ident+tyname-of-tyspecseq-fix-tyspec

    (defthm tyspec+declor-to-ident+tyname-of-tyspecseq-fix-tyspec
      (equal (tyspec+declor-to-ident+tyname (tyspecseq-fix tyspec)
                                            declor)
             (tyspec+declor-to-ident+tyname tyspec declor)))

    Theorem: tyspec+declor-to-ident+tyname-tyspecseq-equiv-congruence-on-tyspec

    (defthm
     tyspec+declor-to-ident+tyname-tyspecseq-equiv-congruence-on-tyspec
     (implies
          (tyspecseq-equiv tyspec tyspec-equiv)
          (equal (tyspec+declor-to-ident+tyname tyspec declor)
                 (tyspec+declor-to-ident+tyname tyspec-equiv declor)))
     :rule-classes :congruence)

    Theorem: tyspec+declor-to-ident+tyname-of-obj-declor-fix-declor

    (defthm tyspec+declor-to-ident+tyname-of-obj-declor-fix-declor
     (equal
          (tyspec+declor-to-ident+tyname tyspec (obj-declor-fix declor))
          (tyspec+declor-to-ident+tyname tyspec declor)))

    Theorem: tyspec+declor-to-ident+tyname-obj-declor-equiv-congruence-on-declor

    (defthm
     tyspec+declor-to-ident+tyname-obj-declor-equiv-congruence-on-declor
     (implies
          (obj-declor-equiv declor declor-equiv)
          (equal (tyspec+declor-to-ident+tyname tyspec declor)
                 (tyspec+declor-to-ident+tyname tyspec declor-equiv)))
     :rule-classes :congruence)