• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Recursion-and-induction
      • Hons-and-memoization
      • Events
        • Defun
          • Xargs
            • Guard
              • Verify-guards
                • Verify-guards-for-system-functions
                • ACL2-pc::prove-guard
                • Mbe
                • Set-guard-checking
                • Ec-call
                • Print-gv
                • The
                • Guards-and-evaluation
                • Guard-debug
                • Set-check-invariant-risk
                • Guard-evaluation-table
                • Guard-evaluation-examples-log
                • Guard-example
                • Defthmg
                • Invariant-risk
                • With-guard-checking
                • Guard-miscellany
                • Guard-holders
                • Guard-formula-utilities
                • Set-verify-guards-eagerness
                • Guard-quick-reference
                • Set-register-invariant-risk
                • Guards-for-specification
                • Guard-evaluation-examples-script
                • Guard-introduction
                • Program-only
                • Non-exec
                • Set-guard-msg
                • Safe-mode
                • Set-print-gv-defaults
                • Guard-theorem-example
                • With-guard-checking-event
                • With-guard-checking-error-triple
                • Guard-checking-inhibited
                • Extra-info
              • Otf-flg
              • Normalize
            • Mutual-recursion
            • Defun-mode
            • Rulers
            • Defun-inline
            • Defun-nx
            • Defund
            • Set-ignore-ok
            • Set-well-founded-relation
            • Set-measure-function
            • Set-irrelevant-formals-ok
            • Defun-notinline
            • Set-bogus-defun-hints-ok
            • Defund-nx
            • Defun$
            • Defund-notinline
            • Defnd
            • Defn
            • Defund-inline
            • Set-bogus-measure-ok
          • Verify-guards
            • Verify-guards-for-system-functions
            • ACL2-pc::prove-guard
            • Table
            • Mutual-recursion
            • Memoize
            • Make-event
            • Include-book
            • Encapsulate
            • Defun-sk
            • Defttag
            • Defstobj
            • Defpkg
            • Defattach
            • Defabsstobj
            • Defchoose
            • Progn
            • Verify-termination
            • Redundant-events
            • Defmacro
            • Defconst
            • Skip-proofs
            • In-theory
            • Embedded-event-form
            • Value-triple
            • Comp
            • Local
            • Defthm
            • Progn!
            • Defevaluator
            • Theory-invariant
            • Assert-event
            • Defun-inline
            • Project-dir-alist
            • Partial-encapsulate
            • Define-trusted-clause-processor
            • Defproxy
            • Defexec
            • Defun-nx
            • Defthmg
            • Defpun
            • Defabbrev
            • Set-table-guard
            • Name
            • Defrec
            • Add-custom-keyword-hint
            • Regenerate-tau-database
            • Defcong
            • Deftheory
            • Defaxiom
            • Deftheory-static
            • Defund
            • Evisc-table
            • Verify-guards+
            • Logical-name
            • Profile
            • Defequiv
            • Defmacro-untouchable
            • Add-global-stobj
            • Defthmr
            • Defstub
            • Defrefinement
            • Deflabel
            • In-arithmetic-theory
            • Unmemoize
            • Defabsstobj-missing-events
            • Defthmd
            • Fake-event
            • Set-body
            • Defun-notinline
            • Functions-after
            • Macros-after
            • Dump-events
            • Defund-nx
            • Defun$
            • Remove-global-stobj
            • Remove-custom-keyword-hint
            • Dft
            • Defthy
            • Defund-notinline
            • Defnd
            • Defn
            • Defund-inline
            • Defmacro-last
          • Parallelism
          • History
          • Programming
          • Operational-semantics
          • Real
          • Start-here
          • Debugging
          • Miscellaneous
          • Output-controls
          • Macros
          • Interfacing-tools
        • Interfacing-tools
        • Hardware-verification
        • Software-verification
        • Math
        • Testing-utilities
      • Proof-builder-commands
      • Verify-guards
      • Guard-theorem

      ACL2-pc::prove-guard

      (macro) Verify guards efficiently by using a previous guard theorem.

      Example:
      (prove-guard f1 (disable h))
      
      Example of typical usage:
      (defun f2 (x)
        (declare
         (xargs :guard
                (g x)
                :guard-hints
                (("Goal"
                  :instructions
                  ((prove-guard f1
                                (disable h)))))))
        (f2-body x))
      
      General Forms:
      (prove-guard fn)
      (prove-guard fn thy)
      (prove-guard fn thy alt-thy)
      (prove-guard fn thy alt-thy verbose)

      where fn is a known function symbol and thy and alt-thy, when supplied and non-nil, are theory expressions.

      This proof-builder macro attempts to prove a theorem, typically a guard proof obligation, by applying the hint :guard-theorem fn in a carefully controlled, efficient manner (using the :fancy-use proof-builder macro). This proof is attempted in the theory, thy, if supplied and non-nil, else in the current-theory. If that proof fails, then a single, ordinary prover call is made with that :use hint and in the following theory: alt-thy if supplied and non-nil, else thy if supplied and non-nil, else the current-theory. If the proof has not yet succeeded and the original theory is not nil or (current-theory :here), then a final proof is attempted in the same careful manner as the first proof attempt.

      Output is inhibited by default. However, if verbose is t then output is as specified by the enclosing environment; and if verbose is any other non-nil value, then output is mostly inhibited for that attempt by use of the proof-builder command, :quiet. In all of those non-nil cases for the verbose input, a little message will be started at the beginning of the second and third proof attempts, if any.

      For a few small examples, see community book kestrel/utilities/proof-builder-macros-tests.lisp.

      For a way to use lemma instances other than guard theorems, see ACL2-pc::fancy-use.

      Hacker tip: Invoke (trace$ acl2::pc-fancy-use-fn) to see the proof-builder instruction created when invoking prove-guard.