• 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
              • Expr-priority
              • Expr-priority-<=
              • Combine-dirabsdeclor-into-dirabsdeclor
                • Declor/dirdeclor-rename
                • Check-decl-spec-list-all-typespec/stoclass
                • Binop-expected-priorities
                • Expr->priority
                • Transunit-at-path
                • Declor/dirdeclor->ident
                • Declor/dirdeclor-has-params-p
                • Check-expr-binary
                • Apply-post-inc/dec-ops
                • Check-spec/qual-list-all-typespec
                • Apply-pre-inc/dec-ops
                • Check-decl-spec-list-all-typespec
                • Expr-to-asg-expr-list
                • Check-expr-mul
                • Expr-unary/postfix/primary-p
                • Transunit-ensemble-paths
                • Check-struni-spec-no-members
                • Expr-postfix/primary-p
                • Dirabsdeclor-declor?-nil-p
                • Check-enum-spec-no-list
                • Expr-zerop
                • Expr-priority->=
                • Decl-spec-list-to-stor-spec-list
                • Spec/qual-list-to-type-spec-list
                • Expr-priority->
                • Expr-priority-<
                • Declor-spec-list-filter-out-linkage-specs
                • Decl-spec-list-to-type-spec-list
                • Ident-list-map-expr-ident
                • Binop->priority
                • Stringlit-list->prefix?-list
                • Declor-spec-list-make-static
                • Binop-strictp
                • Check-expr-iconst
                • Init-declor->ident
                • Check-expr-ident
                • Dirabsdeclor-to-dirdeclor
                • Dirabsdeclor-option-to-dirdeclor
                • Dirdeclor-has-params-p
                • Absdeclor-to-declor
                • Dirdeclor-rename
                • Declor-rename
                • Declor-has-params-p
                • Dirdeclor->ident
                • Declor->ident
              • Implementation-environments
              • Abstract-syntax
              • Concrete-syntax
              • Disambiguation
              • Validation
              • 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
    • Abstract-syntax-operations

    Combine-dirabsdeclor-into-dirabsdeclor

    Combine a direct abstract declarator into another.

    Signature
    (combine-dirabsdeclor-into-dirabsdeclor dirabsdeclor1 dirabsdeclor2) 
      → 
    dirabsdeclor
    Arguments
    dirabsdeclor1 — Guard (dirabsdeclorp dirabsdeclor1).
    dirabsdeclor2 — Guard (dirabsdeclorp dirabsdeclor2).
    Returns
    dirabsdeclor — Type (dirabsdeclorp dirabsdeclor).

    A direct abstract declarator has, except for the base case(s), a slot declor? for another optional direct abstract declarator; this follows the structure of the grammar. The real base case is just one, a parenthesized abstract declarator; the other base case is a dummy one (see dirabsdeclor).

    This function stores dirabsdeclor1 into the declor? slot of dirabsdeclor2, obtaining a new combined direct abstract declarator, provided that dirabsdeclor2 has that slot and contains nil, as required by the guard.

    Definitions and Theorems

    Function: combine-dirabsdeclor-into-dirabsdeclor

    (defun combine-dirabsdeclor-into-dirabsdeclor
           (dirabsdeclor1 dirabsdeclor2)
     (declare (xargs :guard (and (dirabsdeclorp dirabsdeclor1)
                                 (dirabsdeclorp dirabsdeclor2))))
     (declare (xargs :guard (dirabsdeclor-declor?-nil-p dirabsdeclor2)))
     (b* ((dirabsdeclor1 (dirabsdeclor-fix dirabsdeclor1)))
       (dirabsdeclor-case
            dirabsdeclor2
            :dummy-base (prog2$ (impossible) (irr-dirabsdeclor))
            :paren (prog2$ (impossible) (irr-dirabsdeclor))
            :array (change-dirabsdeclor-array dirabsdeclor2
                                              :declor? dirabsdeclor1)
            :array-static1
            (change-dirabsdeclor-array-static1 dirabsdeclor2
                                               :declor? dirabsdeclor1)
            :array-static2
            (change-dirabsdeclor-array-static2 dirabsdeclor2
                                               :declor? dirabsdeclor1)
            :array-star
            (change-dirabsdeclor-array-star dirabsdeclor2
                                            :declor? dirabsdeclor1)
            :function
            (change-dirabsdeclor-function dirabsdeclor2
                                          :declor? dirabsdeclor1))))

    Theorem: dirabsdeclorp-of-combine-dirabsdeclor-into-dirabsdeclor

    (defthm dirabsdeclorp-of-combine-dirabsdeclor-into-dirabsdeclor
      (b* ((dirabsdeclor (combine-dirabsdeclor-into-dirabsdeclor
                              dirabsdeclor1 dirabsdeclor2)))
        (dirabsdeclorp dirabsdeclor))
      :rule-classes :rewrite)

    Theorem: combine-dirabsdeclor-into-dirabsdeclor-of-dirabsdeclor-fix-dirabsdeclor1

    (defthm
     combine-dirabsdeclor-into-dirabsdeclor-of-dirabsdeclor-fix-dirabsdeclor1
     (equal (combine-dirabsdeclor-into-dirabsdeclor
                 (dirabsdeclor-fix dirabsdeclor1)
                 dirabsdeclor2)
            (combine-dirabsdeclor-into-dirabsdeclor
                 dirabsdeclor1 dirabsdeclor2)))

    Theorem: combine-dirabsdeclor-into-dirabsdeclor-dirabsdeclor-equiv-congruence-on-dirabsdeclor1

    (defthm
     combine-dirabsdeclor-into-dirabsdeclor-dirabsdeclor-equiv-congruence-on-dirabsdeclor1
     (implies (dirabsdeclor-equiv dirabsdeclor1 dirabsdeclor1-equiv)
              (equal (combine-dirabsdeclor-into-dirabsdeclor
                          dirabsdeclor1 dirabsdeclor2)
                     (combine-dirabsdeclor-into-dirabsdeclor
                          dirabsdeclor1-equiv dirabsdeclor2)))
     :rule-classes :congruence)

    Theorem: combine-dirabsdeclor-into-dirabsdeclor-of-dirabsdeclor-fix-dirabsdeclor2

    (defthm
     combine-dirabsdeclor-into-dirabsdeclor-of-dirabsdeclor-fix-dirabsdeclor2
     (equal (combine-dirabsdeclor-into-dirabsdeclor
                 dirabsdeclor1
                 (dirabsdeclor-fix dirabsdeclor2))
            (combine-dirabsdeclor-into-dirabsdeclor
                 dirabsdeclor1 dirabsdeclor2)))

    Theorem: combine-dirabsdeclor-into-dirabsdeclor-dirabsdeclor-equiv-congruence-on-dirabsdeclor2

    (defthm
     combine-dirabsdeclor-into-dirabsdeclor-dirabsdeclor-equiv-congruence-on-dirabsdeclor2
     (implies (dirabsdeclor-equiv dirabsdeclor2 dirabsdeclor2-equiv)
              (equal (combine-dirabsdeclor-into-dirabsdeclor
                          dirabsdeclor1 dirabsdeclor2)
                     (combine-dirabsdeclor-into-dirabsdeclor
                          dirabsdeclor1 dirabsdeclor2-equiv)))
     :rule-classes :congruence)