• 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
          • Atc
          • Transformation-tools
          • 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
                • Wellformed
                • Preprocess
                • Check-tyspecseq
                • Check-param-declon-list
                • Check-iconst
                • Check-expr-pure-list
                • Var-sinfo-option
                • Fun-sinfo-option
                • Funtab+vartab+tagenv
                • Var-scope-all-definedp
                • Var-sinfo
                • Var-table-lookup
                • Apconvert-type
                • Var-table
                • Check-tyname
                • Types+vartab-result
                • Funtab+vartab+tagenv-result
                • Wellformed-result
                • Fun-table-lookup
                • Var-table-scope
                • Var-table-result
                • Var-table-add-block
                • 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
              • Types
              • Integer-formats-definitions
              • Computation-states
              • Portable-ascii-identifiers
              • Values
              • Integer-operations
              • Object-designators
              • Operations
              • Errors
              • Tag-environments
              • Function-environments
              • Character-sets
              • Flexible-array-member-removal
              • Arithmetic-operations
              • Pointer-operations
              • Real-operations
              • Array-operations
              • Scalar-operations
              • Structure-operations
            • 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
    • Static-semantics

    Check-expr-call-or-asg

    Check an expression that must be a function call or an assignment.

    Signature
    (check-expr-call-or-asg e funtab vartab tagenv) → wf?
    Arguments
    e — Guard (exprp e).
    funtab — Guard (fun-tablep funtab).
    vartab — Guard (var-tablep vartab).
    tagenv — Guard (tag-envp tagenv).
    Returns
    wf? — Type (wellformed-resultp wf?).

    If the expression is a function call, we check it as such. We also ensure that it returns void, because we apply these checks to expressions that form expression statements: while [C17] allows function calls that discard values, we are more restrictive here for now.

    If the expression is not a function call, it must be an assignment expression, which we resort to check as such.

    We retun no type here, because we apply these checks to expressions that form expression statements.

    Definitions and Theorems

    Function: check-expr-call-or-asg

    (defun check-expr-call-or-asg (e funtab vartab tagenv)
     (declare (xargs :guard (and (exprp e)
                                 (fun-tablep funtab)
                                 (var-tablep vartab)
                                 (tag-envp tagenv))))
     (let ((__function__ 'check-expr-call-or-asg))
      (declare (ignorable __function__))
      (if
       (expr-case e :call)
       (b*
        (((okf type)
          (check-expr-call (expr-call->fun e)
                           (expr-call->args e)
                           funtab vartab tagenv))
         ((unless (type-case type :void))
          (reserrf
               (list :nonvoid-function-result-discarded (expr-fix e)))))
        :wellformed)
       (check-expr-asg e funtab vartab tagenv))))

    Theorem: wellformed-resultp-of-check-expr-call-or-asg

    (defthm wellformed-resultp-of-check-expr-call-or-asg
      (b* ((wf? (check-expr-call-or-asg e funtab vartab tagenv)))
        (wellformed-resultp wf?))
      :rule-classes :rewrite)

    Theorem: check-expr-call-or-asg-of-expr-fix-e

    (defthm check-expr-call-or-asg-of-expr-fix-e
      (equal (check-expr-call-or-asg (expr-fix e)
                                     funtab vartab tagenv)
             (check-expr-call-or-asg e funtab vartab tagenv)))

    Theorem: check-expr-call-or-asg-expr-equiv-congruence-on-e

    (defthm check-expr-call-or-asg-expr-equiv-congruence-on-e
     (implies
          (expr-equiv e e-equiv)
          (equal (check-expr-call-or-asg e funtab vartab tagenv)
                 (check-expr-call-or-asg e-equiv funtab vartab tagenv)))
     :rule-classes :congruence)

    Theorem: check-expr-call-or-asg-of-fun-table-fix-funtab

    (defthm check-expr-call-or-asg-of-fun-table-fix-funtab
      (equal (check-expr-call-or-asg e (fun-table-fix funtab)
                                     vartab tagenv)
             (check-expr-call-or-asg e funtab vartab tagenv)))

    Theorem: check-expr-call-or-asg-fun-table-equiv-congruence-on-funtab

    (defthm check-expr-call-or-asg-fun-table-equiv-congruence-on-funtab
     (implies
          (fun-table-equiv funtab funtab-equiv)
          (equal (check-expr-call-or-asg e funtab vartab tagenv)
                 (check-expr-call-or-asg e funtab-equiv vartab tagenv)))
     :rule-classes :congruence)

    Theorem: check-expr-call-or-asg-of-var-table-fix-vartab

    (defthm check-expr-call-or-asg-of-var-table-fix-vartab
      (equal (check-expr-call-or-asg e funtab (var-table-fix vartab)
                                     tagenv)
             (check-expr-call-or-asg e funtab vartab tagenv)))

    Theorem: check-expr-call-or-asg-var-table-equiv-congruence-on-vartab

    (defthm check-expr-call-or-asg-var-table-equiv-congruence-on-vartab
     (implies
          (var-table-equiv vartab vartab-equiv)
          (equal (check-expr-call-or-asg e funtab vartab tagenv)
                 (check-expr-call-or-asg e funtab vartab-equiv tagenv)))
     :rule-classes :congruence)

    Theorem: check-expr-call-or-asg-of-tag-env-fix-tagenv

    (defthm check-expr-call-or-asg-of-tag-env-fix-tagenv
      (equal
           (check-expr-call-or-asg e funtab vartab (tag-env-fix tagenv))
           (check-expr-call-or-asg e funtab vartab tagenv)))

    Theorem: check-expr-call-or-asg-tag-env-equiv-congruence-on-tagenv

    (defthm check-expr-call-or-asg-tag-env-equiv-congruence-on-tagenv
     (implies
          (tag-env-equiv tagenv tagenv-equiv)
          (equal (check-expr-call-or-asg e funtab vartab tagenv)
                 (check-expr-call-or-asg e funtab vartab tagenv-equiv)))
     :rule-classes :congruence)