• 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
      • Parallelism
      • History
      • Programming
        • Defun
        • Declare
          • Xargs
            • Guard
              • Verify-guards
              • 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
                • Guard-simplification
                • Guard-obligation
                • Gthm
                • Verify-guards-formula
                • Guard-theorem-example
                  • Guard-theorem
                  • Verify-guard-implication
                • 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
              • Type-spec
              • Declare-stobjs
              • Set-ignore-ok
              • Set-irrelevant-formals-ok
            • System-utilities
            • Stobj
            • State
            • Mutual-recursion
            • Memoize
            • Mbe
            • Io
            • Defpkg
            • Apply$
            • Loop$
            • Programming-with-state
            • Arrays
            • Characters
            • Time$
            • Defmacro
            • Loop$-primer
            • Fast-alists
            • Defconst
            • Evaluation
            • Guard
              • Verify-guards
              • 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
                • Guard-simplification
                • Guard-obligation
                • Gthm
                • Verify-guards-formula
                • Guard-theorem-example
                  • Guard-theorem
                  • Verify-guard-implication
                • 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
                • Equality-variants
                • Compilation
                • Hons
                • ACL2-built-ins
                  • Let
                  • Declare
                    • Xargs
                      • Guard
                        • Verify-guards
                        • 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
                          • Guard-simplification
                          • Guard-obligation
                          • Gthm
                          • Verify-guards-formula
                          • Guard-theorem-example
                            • Guard-theorem
                            • Verify-guard-implication
                          • 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
                        • Type-spec
                        • Declare-stobjs
                        • Set-ignore-ok
                        • Set-irrelevant-formals-ok
                      • Mbe
                      • Apply$
                      • Fmt
                      • Loop$
                      • Return-last
                      • Mv-let
                      • Df
                      • Pseudo-termp
                      • Defwarrant
                      • Time$
                      • Mbt
                      • Ec-call
                      • Mv-nth
                      • Sys-call
                      • Msg
                      • Er
                      • Value-triple
                      • O-p
                      • Comp
                      • Member
                      • O<
                      • Cw
                      • Flet
                      • Or
                      • Hons
                      • Cbd
                      • Mv
                      • Defbadge
                      • Append
                      • *ACL2-exports*
                      • Comment
                      • Eql
                      • List
                      • Unsigned-byte-p
                      • Posp
                      • Natp
                      • The
                      • Nth
                      • And
                      • Len
                      • Time-tracker
                      • Term-order
                      • True-listp
                      • Msgp
                      • Booleanp
                      • <
                      • If
                      • Pseudo-term-listp
                      • +
                      • Not
                      • With-global-stobj
                      • Bitp
                      • Equal
                      • Cdr
                      • Car
                      • String-listp
                      • Nat-listp
                      • Implies
                      • Iff
                      • Character-listp
                      • Alistp
                      • Cons
                      • Symbol-listp
                      • Macrolet
                      • Quote
                      • Integerp
                      • Consp
                      • True-list-listp
                      • State-global-let*
                      • Compress1
                      • Symbolp
                      • Stringp
                      • *common-lisp-symbols-from-main-lisp-package*
                      • Characterp
                      • Prog2$
                      • *
                      • Last-prover-steps
                      • Hons-acons
                      • Let*
                      • Eq
                      • With-guard-checking
                      • @
                      • Length
                      • With-local-stobj
                      • Hard-error
                      • -
                      • Zp
                      • Search
                      • Intersection$
                      • Assign
                      • Aset1
                      • Symbol-name
                      • Union$
                      • Set-gc-strategy
                      • In-tau-intervalp
                      • Cons-with-hint
                      • Break-on-error
                      • Pand
                      • Case-match
                      • Fast-alist-fork
                      • Sys-call+
                      • Signed-byte-p
                      • ACL2-count
                      • Remove-duplicates
                      • With-serialize-character
                      • Observation
                      • Hons-resize
                      • Make-tau-interval
                      • Logbitp
                      • Termp
                      • Position
                      • Assoc
                      • *standard-co*
                      • Hons-acons!
                      • Update-nth
                      • Take
                      • Aref1
                      • Read-run-time
                      • Keywordp
                      • Symbol-package-name
                      • Symbol-alistp
                      • Hons-wash
                      • Expt
                      • Coerce
                      • Get-internal-time
                      • Intern
                      • Non-exec
                      • Case
                      • Standard-oi
                      • Standard-co
                      • Formula
                      • Nthcdr
                      • Atom
                      • Without-evisc
                      • Good-bye
                      • With-local-state
                      • Spec-mv-let
                      • Intern-in-package-of-symbol
                      • Binary-+
                      • <=
                      • Ash
                      • With-fast-alist
                      • Set-difference$
                      • Hons-clear
                      • Flush-compress
                      • Rationalp
                      • Por
                      • Rassoc
                      • Remove-assoc
                      • =
                      • Pargs
                      • Nfix
                      • Hons-copy
                      • Alphorder
                      • Subsetp
                      • Logand
                      • Remove1-assoc
                      • No-duplicatesp
                      • Mv-list
                      • Canonical-pathname
                      • Aset2
                      • Floor
                      • Serialize-read
                      • Random$
                      • Fmt-to-comment-window
                      • F-put-global
                      • Compress2
                      • Concatenate
                      • Fast-alist-clean
                      • Assert$
                      • Remove
                      • Remove1
                      • Intersectp
                      • Endp
                      • Put-assoc
                      • Princ$
                      • Primitive
                      • Keyword-value-listp
                      • True-list-fix
                      • Swap-stobjs
                      • Integer-listp
                      • Illegal
                      • Hons-get
                      • With-output-lock
                      • Setenv$
                      • Open-output-channel!
                      • Fast-alist-free
                      • Er-progn
                      • Cw-print-base-radix
                      • Reverse
                      • Cond
                      • Complex
                      • Add-to-set
                      • Truncate
                      • Digit-char-p
                      • Code-char
                      • Char-code
                      • Set-print-case
                      • Set-print-base
                      • Read-ACL2-oracle
                      • Error1
                      • Print-object$
                      • Plet
                      • Integer-length
                      • Zip
                      • With-live-state
                      • Hons-assoc-equal
                      • Extend-pathname
                      • Logior
                      • In-package
                      • With-guard-checking-event
                      • Term-listp
                      • Print-object$+
                      • Fmx-cw
                      • String
                      • Mod
                      • Unary--
                      • Set-print-radix
                      • Resize-list
                      • Pkg-witness
                      • Revappend
                      • Null
                      • Term-list-listp
                      • Make-fast-alist
                      • Header
                      • Boole$
                      • Subseq
                      • With-guard-checking-error-triple
                      • /
                      • Make-list
                      • Logxor
                      • Char-upcase
                      • Char-downcase
                      • Strip-cars
                      • Set-fmt-hard-right-margin
                      • Make-ord
                      • Ifix
                      • Fast-alist-free-on-exit
                      • F-get-global
                      • Aref2
                      • Standard-char-p
                      • Lognot
                      • Last
                      • Must-be-equal
                      • Integer-range-p
                      • Getenv$
                      • Binary-append
                      • Er-hard
                      • Eqlablep
                      • Cpu-core-count
                      • Boolean-listp
                      • Allocate-fixnum-range
                      • ACL2-numberp
                      • Butlast
                      • Pairlis$
                      • Mod-expt
                      • Hons-equal
                      • Gc$
                      • Substitute
                      • Ceiling
                      • With-stolen-alist
                      • Mv?-let
                      • String-upcase
                      • String-downcase
                      • Round
                      • Count
                      • Char
                      • Sys-call-status
                      • Progn$
                      • Pprogn
                      • Lexorder
                      • Hons-summary
                      • Break$
                      • Assert*
                      • Alpha-char-p
                      • Strip-cdrs
                      • Serialize-write
                      • Keyword-listp
                      • Upper-case-p
                      • Lower-case-p
                      • Logeqv
                      • List*
                      • Proofs-co
                      • Maximum-length
                      • Fix
                      • Explode-nonnegative-integer
                      • Eqlable-listp
                      • Dimensions
                      • Default
                      • Arity
                      • Sublis
                      • Max
                      • Evenp
                      • Explode-atom
                      • Change
                      • Zerop
                      • String<
                      • String-equal
                      • Abs
                      • Set-print-base-radix
                      • Print-base-p
                      • Nonnegative-integer-quotient
                      • Intern$
                      • Getprop
                      • Binary-*
                      • Aset1-trusted
                      • Symbol<
                      • String-append
                      • Rfix
                      • Mv?
                      • Logic-fns-list-listp
                      • Fast-alist-fork!
                      • Er-hard?
                      • Char-equal
                      • 1+
                      • *standard-oi*
                      • Sys-call*
                      • Pos-listp
                      • Mbt*
                      • Hons-wash!
                      • Hons-clear!
                      • Signum
                      • Rem
                      • Real/rationalp
                      • Rational-listp
                      • O-first-coeff
                      • Logic-fnsp
                      • Logic-fns-listp
                      • Hons-copy-persistent
                      • Gc-strategy
                      • Fast-alist-summary
                      • String>=
                      • String<=
                      • Acons
                      • O-first-expt
                      • Fast-alist-clean!
                      • >=
                      • >
                      • Subst
                      • Logcount
                      • Getpropc
                      • Evens
                      • Er-soft
                      • Digit-to-char
                      • Comp-gcl
                      • Atom-listp
                      • Arities-okp
                      • ACL2-number-listp
                      • /=
                      • Cadr
                      • *standard-ci*
                      • Unary-/
                      • The-true-list
                      • Realfix
                      • O-rst
                      • Fast-alist-len
                      • Complex/complex-rationalp
                      • Array2p
                      • Array1p
                      • Logtest
                      • Logandc1
                      • Char<
                      • Trace-co
                      • Putprop
                      • Get-real-time
                      • Eqlable-alistp
                      • Count-keys
                      • Assoc-string-equal
                      • Logorc1
                      • Logandc2
                      • Denominator
                      • 1-
                      • Packn
                      • Logic-termp
                      • Logic-term-list-listp
                      • Fmt!
                      • Fms
                      • Cw!
                      • Assoc-keyword
                      • String>
                      • Numerator
                      • Logorc2
                      • Char>=
                      • Update-nth-array
                      • The-number
                      • Odds
                      • Makunbound-global
                      • Make-character-list
                      • Make
                      • List$
                      • Int=
                      • Get-cpu-time
                      • Fmt-to-comment-window!
                      • Fms!
                      • F-boundp-global
                      • Complex-rationalp
                      • Alist-to-doublets
                      • Access
                      • Min
                      • Lognor
                      • Listp
                      • Identity
                      • Char>
                      • Char<=
                      • Zpf
                      • Standard-char-listp
                      • O-finp
                      • Number-subtrees
                      • Logic-term-listp
                      • Last-cdr
                      • Fmt1!
                      • Fmt-to-comment-window!+
                      • Character-alistp
                      • Oddp
                      • Minusp
                      • Lognand
                      • Imagpart
                      • Conjugate
                      • Xor
                      • Unquote
                      • String-alistp
                      • Packn-pos
                      • Maybe-flush-and-compress1
                      • Kwote
                      • Fmt1
                      • Fmt-to-comment-window+
                      • Cw-print-base-radix!
                      • Alist-keys-subsetp
                      • Realpart
                      • Plusp
                      • First
                      • Symbol-name-lst
                      • R-symbol-alistp
                      • R-eqlable-alistp
                      • Fmx
                      • Cw!+
                      • Cons-subtrees
                      • Cons-count-bounded
                      • Cddr
                      • Caar
                      • Proper-consp
                      • Kwote-lst
                      • Improper-consp
                      • Cw+
                      • Rest
                      • Standard-char-p+
                      • Mbe1
                      • Caddr
                      • Pairlis-x2
                      • Pairlis-x1
                      • O>=
                      • O<=
                      • O-infp
                      • Merge-sort-lexorder
                      • Fix-true-list
                      • Cdddr
                      • Set-fmt-soft-right-margin
                      • Real-listp
                      • O>
                      • Cddar
                      • Cdar
                      • Cdadr
                      • Cdaar
                      • Cadar
                      • Caadr
                      • Caaar
                      • Cadddr
                      • Caddar
                      • Third
                      • Tenth
                      • Sixth
                      • Seventh
                      • Second
                      • Ninth
                      • Fourth
                      • Fifth
                      • Eighth
                      • Cddddr
                      • Cdddar
                      • Cddadr
                      • Cddaar
                      • Cdaddr
                      • Cdadar
                      • Cdaadr
                      • Cdaaar
                      • Cadadr
                      • Cadaar
                      • Caaddr
                      • Caadar
                      • Caaadr
                      • Caaaar
                      • Hons-shrink-alist!
                      • Hons-shrink-alist
                      • Flush-hons-get-hash-table-link
                      • Delete-assoc
                    • Developers-guide
                    • System-attachments
                    • Advanced-features
                    • Set-check-invariant-risk
                    • Numbers
                    • Efficiency
                    • Irrelevant-formals
                    • Introduction-to-programming-in-ACL2-for-those-who-know-lisp
                    • Redefining-programs
                    • Lists
                    • Invariant-risk
                    • Errors
                    • Defabbrev
                    • Conses
                    • Alists
                    • Set-register-invariant-risk
                    • Strings
                    • Program-wrapper
                    • Get-internal-time
                    • Basics
                    • Packages
                    • Oracle-eval
                    • Defmacro-untouchable
                    • <<
                    • Primitive
                    • Revert-world
                    • Unmemoize
                    • Set-duplicate-keys-action
                    • Symbols
                    • Def-list-constructor
                    • Easy-simplify-term
                    • Defiteration
                    • Fake-oracle-eval
                    • Defopen
                    • Sleep
                  • Operational-semantics
                  • Real
                  • Start-here
                  • Debugging
                  • Miscellaneous
                  • Output-controls
                  • Macros
                  • Interfacing-tools
                • Interfacing-tools
                • Hardware-verification
                • Software-verification
                • Math
                • Testing-utilities
              • Lemma-instance
              • Guard
              • Hints
              • Guard-theorem
              • Guard-formula-utilities

              Guard-theorem-example

              How to use a previously-proved guard theorem

              See lemma-instance for a discussion of :guard-theorem lemma instances, and see gthm for a related user-level query utility. In this topic, we illustrate the use of such lemma instances to take advantage of a guard theorem already proved for an existing definition, when attempting to admit a new definition.

              The following example is contrived but should get the idea across. Suppose that the event displayed just below was previously executed, for example when including a book. The mbe call generates a guard proof obligation, but there is only one thing to know about that for this example: without the local lemma shown, the guard proof fails for f1.

              (encapsulate
                ()
                (local (defthm append-revappend
                         (equal (append (revappend x y) z)
                                (revappend x (append y z)))))
              
                (defun f1 (x y)
                  (declare (xargs :guard (and (true-listp x)
                                              (true-listp y))))
                  (mbe :logic (append (reverse x) y)
                       :exec (revappend x y))))

              Now suppose that later, we wish to admit a function with the same guard and body. Since the lemma append-revappend above is local, guard verification will likely fail. However, we can tell the prover to use the guard theorem already proved for f1, as follows; then the guard verification proof succeeds.

              (defun f2 (x y)
                (declare (xargs :guard (and (true-listp x)
                                            (true-listp y))
                                :guard-hints (("Goal" :use ((:guard-theorem f1))))))
                (mbe :logic (append (reverse x) y)
                     :exec (revappend x y)))

              See termination-theorem-example for an example use of the analogous lemma instance type, :termination-theorem. That topic also includes discussion of the use of event names in prover output.