• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
      • Std/lists
      • Std/alists
      • Obags
      • Std/util
      • Std/strings
      • Std/io
      • Std/osets
      • Std/system
        • Fresh-logical-name-with-$s-suffix
        • Irrelevant-formals-info
        • Std/system/function-queries
          • Defun-sk-queries
          • Tail-recursive-p
          • Termination-theorem$
          • Measure
          • Arity+
          • Unwrapped-nonexec-body+
          • Ubody
          • Ruler-extenders+
          • Recursive-calls
          • Guard-theorem-no-simplify$
          • Well-founded-relation+
          • Unwrapped-nonexec-body
          • Measured-subset+
          • Measure+
          • Ruler-extenders
          • Number-of-results+
          • Induction-machine+
          • Non-executablep+
          • Pure-raw-p
          • Irecursivep+
          • Formals+
            • Stobjs-out+
            • Induction-machine
            • Definedp+
            • Number-of-results
            • Ubody+
            • Guard-theorem-no-simplify
            • Uguard
            • Rawp
            • Irecursivep
            • Defchoose-queries
            • Uguard+
            • Stobjs-in+
            • No-stobjs-p+
            • Well-founded-relation
            • Definedp
            • Primitivep+
            • Guard-verified-p+
            • No-stobjs-p
            • Measured-subset
            • Guard-verified-p
            • Primitivep
            • Non-executablep
            • Fundef-enabledp
            • Fundef-disabledp
            • Ibody
            • Std/system/arity
          • Std/system/term-queries
          • Std/system/term-transformations
          • Std/system/enhanced-utilities
          • Install-not-normalized-event-lst
          • Install-not-normalized-event
          • Std/system/term-function-recognizers
          • Pseudo-tests-and-call-listp
          • Genvar$
          • Std/system/event-name-queries
          • Maybe-pseudo-event-formp
          • Add-suffix-to-fn-or-const
          • Chk-irrelevant-formals-ok
          • Std/system/good-atom-listp
          • Pseudo-tests-and-callp
          • Table-alist+
          • Add-suffix-to-fn-or-const-lst
          • Known-packages+
          • Add-suffix-to-fn-lst
          • Unquote-term
          • Event-landmark-names
          • Add-suffix-lst
          • Std/system/theorem-queries
          • Unquote-term-list
          • Std/system/macro-queries
          • Pseudo-event-landmark-listp
          • Pseudo-command-landmark-listp
          • Install-not-normalized$
          • Rune-disabledp
          • Known-packages
          • Std/system/partition-rest-and-keyword-args
          • Rune-enabledp
          • Included-books
          • Std/system/pseudo-event-formp
          • Std/system/plist-worldp-with-formals
          • Std/system/w
          • Std/system/geprops
          • Std/system/arglistp
          • Std/system-extensions
          • Std/system/constant-queries
        • Std/basic
        • Std/typed-lists
        • Std/bitsets
        • Std/testing
        • Std/typed-alists
        • Std/stobjs
        • Std-extensions
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Testing-utilities
      • Math
    • Std/system/function-queries

    Formals+

    Enhanced variant of formals.

    Signature
    (formals+ fn wrld) → formals
    Arguments
    fn — Guard (pseudo-termfnp fn).
    wrld — Guard (plist-worldp wrld).
    Returns
    formals — Type (symbol-listp formals).

    This returns the same result as formals on named functions, but it includes a run-time check (which should always succeed) on the result that allows us to prove the return type theorem without strengthening the guard on wrld.

    Similarly to formals, this utility causes an error if called on a symbol that does not name a function. But the error message is slightly different from the one of formals.

    This utility also operates on lambda expressions, unlike formals.

    Definitions and Theorems

    Function: formals+

    (defun
     formals+ (fn wrld)
     (declare (xargs :guard (and (pseudo-termfnp fn)
                                 (plist-worldp wrld))))
     (let
      ((__function__ 'formals+))
      (declare (ignorable __function__))
      (b*
       ((result
           (if (symbolp fn)
               (b* ((formals (getpropc fn 'formals t wrld)))
                   (if (eq formals t)
                       (raise "The symbol ~x0 does not name a function."
                              fn)
                       formals))
               (lambda-formals fn))))
       (if
        (symbol-listp result)
        result
        (raise
         "Internal error: ~
                  the formals ~x0 of ~x1 are not a true list of symbols."
         result fn)))))

    Theorem: symbol-listp-of-formals+

    (defthm symbol-listp-of-formals+
            (b* ((formals (formals+ fn wrld)))
                (symbol-listp formals))
            :rule-classes :rewrite)