• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
        • Error-checking
        • Fty-extensions
        • Isar
        • Kestrel-utilities
        • Set
        • Soft
        • C
          • Syntax-for-tools
            • Disambiguator
            • Abstract-syntax
            • Parser
            • Validator
            • Printer
            • Formalized-subset
            • Mapping-to-language-definition
            • Input-files
            • Defpred
            • Output-files
            • Abstract-syntax-operations
            • Validation-information
              • Abstract-syntax-annop
              • Types
              • Valid-ord-info
              • Lifetime
              • Valid-defstatus
              • Expr-type
              • Valid-table
              • Valid-ord-info-option
              • Linkage-option
              • Linkage
              • Lifetime-option
              • Iconst-info
              • Var-info
              • Valid-scope
              • Stmt-type
              • Expr-null-pointer-constp
                • Transunit-info
                • Const-expr-null-pointer-constp
                • Unary-info
                • Binary-info
                • Block-item-list-type
                • Block-item-type
                • Valid-ord-scope
                • Coerce-transunit-info
                • Coerce-var-info
                • Coerce-unary-info
                • Coerce-iconst-info
                • Coerce-binary-info
                • Irr-transunit-info
                • Irr-iconst-info
                • Irr-binary-info
                • Irr-var-info
                • Irr-valid-table
                • Irr-unary-info
                • Valid-scope-list
                • Irr-linkage
                • Irr-lifetime
              • Implementation-environments
              • Concrete-syntax
              • Ascii-identifiers
              • Unambiguity
              • Preprocessing
              • Abstraction-mapping
            • Atc
            • Language
            • 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
    • Validation-information

    Expr-null-pointer-constp

    Check whether an expression of a given type is potentially a null pointer constant [C17:6.3.2.3/3].

    Signature
    (expr-null-pointer-constp expr type) → yes/no
    Arguments
    expr — Guard (exprp expr).
    type — Guard (typep type).
    Returns
    yes/no — Type (booleanp yes/no).

    Due to the approximate representation of types and our lack of constant expression evaluation, this recognizer is highly overappoximating. It will recognize any pointer or integer type.

    Definitions and Theorems

    Function: expr-null-pointer-constp

    (defun expr-null-pointer-constp (expr type)
      (declare (xargs :guard (and (exprp expr) (typep type))))
      (declare (ignore expr))
      (let ((__function__ 'expr-null-pointer-constp))
        (declare (ignorable __function__))
        (or (type-case type :pointer)
            (type-integerp type))))

    Theorem: booleanp-of-expr-null-pointer-constp

    (defthm booleanp-of-expr-null-pointer-constp
      (b* ((yes/no (expr-null-pointer-constp expr type)))
        (booleanp yes/no))
      :rule-classes :rewrite)

    Theorem: expr-null-pointer-constp-of-expr-fix-expr

    (defthm expr-null-pointer-constp-of-expr-fix-expr
      (equal (expr-null-pointer-constp (expr-fix expr)
                                       type)
             (expr-null-pointer-constp expr type)))

    Theorem: expr-null-pointer-constp-expr-equiv-congruence-on-expr

    (defthm expr-null-pointer-constp-expr-equiv-congruence-on-expr
      (implies (expr-equiv expr expr-equiv)
               (equal (expr-null-pointer-constp expr type)
                      (expr-null-pointer-constp expr-equiv type)))
      :rule-classes :congruence)

    Theorem: expr-null-pointer-constp-of-type-fix-type

    (defthm expr-null-pointer-constp-of-type-fix-type
      (equal (expr-null-pointer-constp expr (type-fix type))
             (expr-null-pointer-constp expr type)))

    Theorem: expr-null-pointer-constp-type-equiv-congruence-on-type

    (defthm expr-null-pointer-constp-type-equiv-congruence-on-type
      (implies (type-equiv type type-equiv)
               (equal (expr-null-pointer-constp expr type)
                      (expr-null-pointer-constp expr type-equiv)))
      :rule-classes :congruence)