• 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
        • 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
          • Macro-keyword-args
          • Macro-keyword-args+
          • Macro-required-args
          • Macro-required-args+
            • Macro-args+
          • 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/macro-queries

    Macro-required-args+

    Enhanced variant of macro-required-args.

    Signature
    (macro-required-args+ mac wrld) → required-args
    Arguments
    mac — Guard (symbolp mac).
    wrld — Guard (plist-worldp wrld).
    Returns
    required-args — Type (symbol-listp required-args).

    This returns the same result as macro-required-args, but it is guard-verified and includes run-time checks (which should always succeed) that allows us to prove the return type theorem and to verify guards without strengthening the guard on wrld. Furthermore, this utility causes an error (via macro-args+) if called on a symbol that does not name a macro.

    Definitions and Theorems

    Function: macro-required-args+-aux

    (defun
     macro-required-args+-aux (mac args)
     (declare (xargs :guard (and (symbolp mac) (true-listp args))))
     (let
      ((__function__ 'macro-required-args+-aux))
      (declare (ignorable __function__))
      (if
       (endp args)
       nil
       (b*
        ((arg (car args)))
        (if
         (lambda-keywordp arg)
         nil
         (if
          (symbolp arg)
          (cons arg
                (macro-required-args+-aux mac (cdr args)))
          (raise
           "Internal error: ~
                         the required macro argument ~x0 of ~x1 is not a symbol."
           arg mac)))))))

    Theorem: symbol-listp-of-macro-required-args+-aux

    (defthm symbol-listp-of-macro-required-args+-aux
            (b* ((required-args (macro-required-args+-aux mac args)))
                (symbol-listp required-args))
            :rule-classes :rewrite)

    Function: macro-required-args+

    (defun
         macro-required-args+ (mac wrld)
         (declare (xargs :guard (and (symbolp mac)
                                     (plist-worldp wrld))))
         (let ((__function__ 'macro-required-args+))
              (declare (ignorable __function__))
              (b* ((all-args (macro-args+ mac wrld)))
                  (if (endp all-args)
                      nil
                      (if (eq (car all-args) '&whole)
                          (macro-required-args+-aux mac (cddr all-args))
                          (macro-required-args+-aux mac all-args))))))

    Theorem: symbol-listp-of-macro-required-args+

    (defthm symbol-listp-of-macro-required-args+
            (b* ((required-args (macro-required-args+ mac wrld)))
                (symbol-listp required-args))
            :rule-classes :rewrite)