• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
    • Debugging
    • Projects
    • 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

    Non-executablep+

    Enhanced variant of non-executablep.

    Signature
    (non-executablep+ fn wrld) → nonexec
    Arguments
    fn — Guard (symbolp fn).
    wrld — Guard (plist-worldp wrld).
    Returns
    nonexec — Type (or (booleanp nonexec) (eq nonexec :program)).

    This returns the same result as non-executablep, but it includes run-time checks (which should always succeed) on the result that allow us to prove the return type theorems without strengthening the guard on wrld. Furthermore, this utility causes an error if called on a symbol that does not name a function.

    Definitions and Theorems

    Function: non-executablep+

    (defun
     non-executablep+ (fn wrld)
     (declare (xargs :guard (and (symbolp fn) (plist-worldp wrld))))
     (let
      ((__function__ 'non-executablep+))
      (declare (ignorable __function__))
      (if
       (not (function-symbolp fn wrld))
       (raise "The symbol ~x0 does not name a function."
              fn)
       (b*
        ((result (non-executablep fn wrld))
         ((unless (or (booleanp result)
                      (eq result :program)))
          (raise
           "Internal error: ~
                      the non-executable status ~x0 of ~x1 is not ~
                      T, NIL, or :PROGRAM."
           result fn))
         ((when (and (logicp fn wrld)
                     (eq result :program)))
          (raise
           "Internal error: ~
                      the non-executable status of the logic-mode function ~x0 ~
                      is :PROGRAM instead of T or NIL."
           fn)))
        result))))

    Theorem: return-type-of-non-executablep+

    (defthm return-type-of-non-executablep+
            (b* ((nonexec (non-executablep+ fn wrld)))
                (or (booleanp nonexec)
                    (eq nonexec :program)))
            :rule-classes :rewrite)

    Theorem: booleanp-of-non-executablep+-when-logicp

    (defthm booleanp-of-non-executablep+-when-logicp
            (implies (logicp fn wrld)
                     (b* ((nonexec (non-executablep+ fn wrld)))
                         (booleanp nonexec)))
            :rule-classes :rewrite)