• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
      • Legacy-defrstobj
      • Proof-checker-array
      • Soft
      • C
        • Syntax-for-tools
        • Atc
        • Language
          • Abstract-syntax
          • Integer-ranges
          • Implementation-environments
          • Dynamic-semantics
          • Static-semantics
            • Check-stmt
            • Check-cond
            • Check-binary-pure
            • Var-table-add-var
            • Check-unary
            • Check-obj-declon
            • Fun-table-add-fun
            • Check-fundef
            • Fun-sinfo
            • Check-expr-asg
            • Check-expr-call
            • Check-arrsub
            • Uaconvert-types
            • Apconvert-type-list
            • Check-initer
            • Adjust-type-list
            • Types+vartab
            • Promote-type
            • Check-tag-declon
            • Check-expr-call-or-asg
            • Check-ext-declon
            • Check-param-declon
            • Check-member
            • Check-expr-pure
            • Init-type-matchp
            • Check-obj-adeclor
            • Check-memberp
            • Check-expr-call-or-pure
            • Check-cast
            • Check-struct-declon-list
            • Check-fun-declor
            • Expr-type
            • Check-ext-declon-list
            • Check-transunit
            • Check-fun-declon
            • Var-defstatus
            • Struct-member-lookup
            • Preprocess
            • Wellformed
            • Check-tyspecseq
              • Check-param-declon-list
              • Check-iconst
              • Check-expr-pure-list
              • Var-sinfo-option
              • Fun-sinfo-option
              • Var-scope-all-definedp
              • Funtab+vartab+tagenv
              • Var-sinfo
              • Var-table-lookup
              • Apconvert-type
              • Var-table
              • Check-tyname
              • Types+vartab-result
              • Funtab+vartab+tagenv-result
              • Fun-table-lookup
              • Wellformed-result
              • Var-table-add-block
              • Var-table-scope
              • Var-table-result
              • Fun-table-result
              • Expr-type-result
              • Adjust-type
              • Check-fileset
              • Var-table-all-definedp
              • Check-const
              • Fun-table-all-definedp
              • Check-ident
              • Fun-table
              • Var-table-init
              • Fun-table-init
            • 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
        • Farray
        • Rp-rewriter
        • Instant-runoff-voting
        • Imp-language
        • Sidekick
        • Leftist-trees
        • Java
        • Taspi
        • Bitcoin
        • Riscv
        • Des
        • Ethereum
        • X86isa
        • Sha-2
        • Yul
        • Zcash
        • Proof-checker-itp13
        • Regex
        • ACL2-programming-language
        • Json
        • Jfkr
        • Equational
        • Cryptography
        • Poseidon
        • Where-do-i-place-my-book
        • Axe
        • Bigmems
        • Builtins
        • Execloader
        • Aleo
        • Solidity
        • Paco
        • Concurrent-programs
        • Bls12-377-curves
      • Debugging
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Static-semantics

    Check-tyspecseq

    Check a type specifier sequence.

    Signature
    (check-tyspecseq tyspec tagenv) → type
    Arguments
    tyspec — Guard (tyspecseqp tyspec).
    tagenv — Guard (tag-envp tagenv).
    Returns
    type — Type (type-resultp type).

    If successful, return the type denoted by the type specifier sequence.

    We only accept certain type specifier sequences for now, namely the ones that have corresponding types in our model. The tag of a structure type specifier sequence must be in the tag environment. All the other (supported) type specifier sequences are always well-formed.

    Definitions and Theorems

    Function: check-tyspecseq

    (defun check-tyspecseq (tyspec tagenv)
     (declare (xargs :guard (and (tyspecseqp tyspec)
                                 (tag-envp tagenv))))
     (let ((__function__ 'check-tyspecseq))
      (declare (ignorable __function__))
      (tyspecseq-case
         tyspec :void (type-void)
         :char (type-char)
         :schar (type-schar)
         :uchar (type-uchar)
         :sshort (type-sshort)
         :ushort (type-ushort)
         :sint (type-sint)
         :uint (type-uint)
         :slong (type-slong)
         :ulong (type-ulong)
         :sllong (type-sllong)
         :ullong (type-ullong)
         :bool
         (reserrf (list :not-supported-bool))
         :float
         (reserrf (list :not-supported-float))
         :double
         (reserrf (list :not-supported-double))
         :ldouble
         (reserrf (list :not-supported-ldouble))
         :struct
         (b* ((info (tag-env-lookup tyspec.tag tagenv)))
           (tag-info-option-case
                info :some
                (if (tag-info-case info.val :struct)
                    (type-struct tyspec.tag)
                  (reserrf (list :struct-tag-mismatch
                                 tyspec.tag info.val)))
                :none (reserrf (list :no-tag-found tyspec.tag))))
         :union (reserrf (list :not-supported-union tyspec.tag))
         :enum (reserrf (list :not-supported-enum tyspec.tag))
         :typedef (reserrf (list :not-supported-typedef tyspec.name)))))

    Theorem: type-resultp-of-check-tyspecseq

    (defthm type-resultp-of-check-tyspecseq
      (b* ((type (check-tyspecseq tyspec tagenv)))
        (type-resultp type))
      :rule-classes :rewrite)

    Theorem: check-tyspecseq-of-tyspecseq-fix-tyspec

    (defthm check-tyspecseq-of-tyspecseq-fix-tyspec
      (equal (check-tyspecseq (tyspecseq-fix tyspec)
                              tagenv)
             (check-tyspecseq tyspec tagenv)))

    Theorem: check-tyspecseq-tyspecseq-equiv-congruence-on-tyspec

    (defthm check-tyspecseq-tyspecseq-equiv-congruence-on-tyspec
      (implies (tyspecseq-equiv tyspec tyspec-equiv)
               (equal (check-tyspecseq tyspec tagenv)
                      (check-tyspecseq tyspec-equiv tagenv)))
      :rule-classes :congruence)

    Theorem: check-tyspecseq-of-tag-env-fix-tagenv

    (defthm check-tyspecseq-of-tag-env-fix-tagenv
      (equal (check-tyspecseq tyspec (tag-env-fix tagenv))
             (check-tyspecseq tyspec tagenv)))

    Theorem: check-tyspecseq-tag-env-equiv-congruence-on-tagenv

    (defthm check-tyspecseq-tag-env-equiv-congruence-on-tagenv
      (implies (tag-env-equiv tagenv tagenv-equiv)
               (equal (check-tyspecseq tyspec tagenv)
                      (check-tyspecseq tyspec tagenv-equiv)))
      :rule-classes :congruence)