• 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-keyword-args+

    Enhanced variant of macro-keyword-args.

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

    This returns the same result as macro-keyword-args, but it is guard-verified and includes run-time checks (which should always succeed) that allow us to prove the return type theorem and to verify the 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-keyword-args+-aux

    (defun
     macro-keyword-args+-aux (mac args)
     (declare (xargs :guard (and (symbolp mac) (true-listp args))))
     (let
      ((__function__ 'macro-keyword-args+-aux))
      (declare (ignorable __function__))
      (b*
       (((when (endp args)) nil)
        (arg (car args))
        ((when (lambda-keywordp arg)) nil)
        ((when (symbolp arg))
         (acons arg nil
                (macro-keyword-args+-aux mac (cdr args))))
        ((unless (and (consp arg)
                      (symbolp (first arg))
                      (consp (cdr arg))
                      (consp (second arg))
                      (eq (car (second arg)) 'quote)
                      (consp (cdr (second arg)))))
         (raise
          "Internal error: ~
                       the keyword macro argument ~x0 of ~x1 ~
                       does not have the expected form."
          arg mac)))
       (acons (first arg)
              (unquote (second arg))
              (macro-keyword-args+-aux mac (cdr args))))))

    Theorem: symbol-alistp-of-macro-keyword-args+-aux

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

    Function: macro-keyword-args+

    (defun
     macro-keyword-args+ (mac wrld)
     (declare (xargs :guard (and (symbolp mac)
                                 (plist-worldp wrld))))
     (let
      ((__function__ 'macro-keyword-args+))
      (declare (ignorable __function__))
      (b* ((all-args (macro-args+ mac wrld))
           (args-after-&key (cdr (member-eq '&key all-args)))
           (keyword-args (macro-keyword-args+-aux mac args-after-&key)))
          keyword-args)))

    Theorem: symbol-alistp-of-macro-keyword-args+

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