• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
    • Debugging
    • Projects
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Error-checking
          • Def-error-checker
          • Ensure-function/macro/lambda
          • Ensure-symbol-is-fresh-event-name
          • Ensure-function/lambda/term-number-of-results
            • Ensure-function/lambda/term-number-of-results$
          • Ensure-function/lambda-no-stobjs
          • Ensure-function/lambda-arity
          • Ensure-function-name-or-numbered-wildcard
          • Ensure-function/lambda-guard-verified-fns
          • Ensure-function/lambda-logic-mode
          • Ensure-function/lambda-closed
          • Ensure-value-is-untranslated-term
          • Ensure-function-number-of-results
          • Ensure-boolean-or-auto-and-return-boolean
          • Ensure-term-if-call
          • Ensure-is-hints-specifier
          • Ensure-symbol-new-event-name
          • Ensure-symbol-different
          • Ensure-value-is-not-in-list
          • Ensure-term-free-vars-subset
          • Ensure-function/lambda-guard-verified-exec-fns
          • Ensure-value-is-in-list
          • Ensure-list-subset
          • Ensure-lambda-guard-verified-fns
          • Ensure-function-no-stobjs
          • Ensure-function-known-measure
          • Ensure-term-not-call-of
          • Ensure-lambda-arity
          • Ensure-function-arity
          • Ensure-term-no-stobjs
          • Ensure-term-guard-verified-fns
          • Ensure-term-does-not-call
          • Ensure-lambda-logic-mode
          • Ensure-function-singly-recursive
          • Ensure-function-is-guard-verified
          • Ensure-term-logic-mode
          • Ensure-term-ground
          • Ensure-symbol-function
          • Ensure-list-functions
          • Ensure-keyword-value-list
          • Ensure-function-program-mode
          • Ensure-function-non-recursive
          • Ensure-function-is-pure-if-raw
          • Ensure-function-is-logic-mode
          • Ensure-function-is-defined
          • Ensure-function-has-args
          • Ensure-value-is-legal-variable-name
          • Ensure-value-is-function-name
          • Ensure-value-is-constant-name
          • Ensure-symbol-truelist-alist
          • Ensure-symbol-not-stobj
          • Ensure-symbol-not-keyword
          • Ensure-list-has-no-duplicates
          • Ensure-lambda-closed
          • Ensure-function-recursive
          • Ensure-function-name-list
          • Ensure-value-is-true-list
          • Ensure-value-is-symbol-list
          • Ensure-value-is-boolean
          • Ensure-tuple
          • Ensure-symbol-alist
          • Ensure-defun-mode-or-auto
          • Ensure-constant-name
          • Ensure-boolean-or-auto
          • Ensure-value-is-symbol
          • Ensure-value-is-string
          • Ensure-value-is-nil
          • Ensure-string-or-nil
          • Ensure-doublet-list
          • Ensure-defun-mode
          • Ensure-function-not-in-termination-thm
          • Ensure-lambda-guard-verified-exec-fns
          • Ensure-term-guard-verified-exec-fns
        • Apt
        • Abnf
        • Fty-extensions
        • Isar
        • Kestrel-utilities
        • Prime-field-constraint-systems
        • Soft
        • Bv
        • Imp-language
        • Event-macros
        • Bitcoin
        • Ethereum
        • Yul
        • Zcash
        • ACL2-programming-language
        • Prime-fields
        • Java
        • C
        • Syntheto
        • Number-theory
        • Cryptography
        • Lists-light
        • File-io-light
        • Json
        • Built-ins
        • Solidity
        • Axe
        • Std-extensions
        • Htclient
        • Typed-lists-light
        • Arithmetic-light
      • X86isa
      • Execloader
      • Axe
    • Testing-utilities
    • Math
  • Error-checking

Ensure-function/lambda/term-number-of-results

Cause an error if a function or lambda expression or term does not have a given number of results.

Signature
(ensure-function/lambda/term-number-of-results 
     stobjs-out n description 
     error-erp error-val ctx state) 
 
  → 
(mv erp val state)
Arguments
stobjs-out — stobjs-out list of the function or lambda expression or term whose number of results is to be checked.
    Guard (symbol-listp stobjs-out).
n — Number of results that the function or lambda expression or term must have.
    Guard (posp n).
description — Guard (msgp description).
error-erp — Flag to return in case of error.
error-val — Value to return in case of error.
ctx — Context for errors.
Returns
erp — Type (implies erp (equal erp error-erp)).
val — Type (and (implies erp (equal val error-val)) (implies (and (not erp) error-erp) (not val))) .

The number of results of the function or lambda expression or term is checked by examining the stobjs-out list of the function or lambda expression or term. This error-checking function is useful after calling ensure-function/macro/lambda (for a function or lambda expression) or ensure-value-is-untranslated-term (for a term), both of which return the stobjs-out list, to handle functions and lambda expressions and terms uniformly. The description parameter should describe the function or lambda expression or term.

Definitions and Theorems

Function: ensure-function/lambda/term-number-of-results

(defun ensure-function/lambda/term-number-of-results
       (stobjs-out n description
                   error-erp error-val ctx state)
       (declare (xargs :stobjs (state)))
       (declare (xargs :guard (and (symbol-listp stobjs-out)
                                   (posp n)
                                   (msgp description))))
       (b* (((unless (= (len stobjs-out) n))
             (er-soft+ ctx error-erp error-val
                       "~@0 must return ~x1 ~@2." description
                       n (if (= n 1) "result" "results"))))
           (value nil)))

Theorem: return-type-of-ensure-function/lambda/term-number-of-results.erp

(defthm
    return-type-of-ensure-function/lambda/term-number-of-results.erp
    (b* (((mv ?erp ?val ?state)
          (ensure-function/lambda/term-number-of-results
               stobjs-out n description
               error-erp error-val ctx state)))
        (implies erp (equal erp error-erp)))
    :rule-classes :rewrite)

Theorem: return-type-of-ensure-function/lambda/term-number-of-results.val

(defthm
    return-type-of-ensure-function/lambda/term-number-of-results.val
    (b* (((mv ?erp ?val ?state)
          (ensure-function/lambda/term-number-of-results
               stobjs-out n description
               error-erp error-val ctx state)))
        (and (implies erp (equal val error-val))
             (implies (and (not erp) error-erp)
                      (not val))))
    :rule-classes :rewrite)

Subtopics

Ensure-function/lambda/term-number-of-results$
Calls ensure-function/lambda/term-number-of-results with ctx and state as the last two arguments.