• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
      • Break-rewrite
      • Proof-builder
      • Accumulated-persistence
      • Cgen
      • Forward-chaining-reports
      • Proof-tree
        • Proof-tree-examples
        • Proof-tree-details
        • Stop-proof-tree
        • Start-proof-tree
        • Checkpoint-forced-goals
      • Print-gv
      • Dmr
      • With-brr-data
      • Splitter
      • Guard-debug
      • Set-debugger-enable
      • Redo-flat
      • Time-tracker
      • Set-check-invariant-risk
      • Removable-runes
      • Efficiency
      • Explain-near-miss
      • Tail-biting
      • Failed-forcing
      • Sneaky
      • Invariant-risk
      • Failure
      • Measure-debug
      • Dead-events
      • Compare-objects
      • Prettygoals
      • Remove-hyps
      • Type-prescription-debugging
      • Pstack
      • Trace
      • Set-register-invariant-risk
      • Walkabout
      • Disassemble$
      • Nil-goal
      • Cw-gstack
      • Set-guard-msg
      • Find-lemmas
      • Watch
      • Quick-and-dirty-subsumption-replacement-step
      • Profile-all
      • Profile-ACL2
      • Set-print-gv-defaults
      • Minimal-runes
      • Spacewalk
      • Try-gl-concls
      • Near-misses
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Recursion-and-induction
      • Hons-and-memoization
      • Events
      • Parallelism
      • History
      • Programming
      • Operational-semantics
      • Real
      • Start-here
      • Debugging
        • Break-rewrite
        • Proof-builder
        • Accumulated-persistence
        • Cgen
        • Forward-chaining-reports
        • Proof-tree
          • Proof-tree-examples
          • Proof-tree-details
          • Stop-proof-tree
          • Start-proof-tree
          • Checkpoint-forced-goals
        • Print-gv
        • Dmr
        • With-brr-data
        • Splitter
        • Guard-debug
        • Set-debugger-enable
        • Redo-flat
        • Time-tracker
        • Set-check-invariant-risk
        • Removable-runes
        • Efficiency
        • Explain-near-miss
        • Tail-biting
        • Failed-forcing
        • Sneaky
        • Invariant-risk
        • Failure
        • Measure-debug
        • Dead-events
        • Compare-objects
        • Prettygoals
        • Remove-hyps
        • Type-prescription-debugging
        • Pstack
        • Trace
        • Set-register-invariant-risk
        • Walkabout
        • Disassemble$
        • Nil-goal
        • Cw-gstack
        • Set-guard-msg
        • Find-lemmas
        • Watch
        • Quick-and-dirty-subsumption-replacement-step
        • Profile-all
        • Profile-ACL2
        • Set-print-gv-defaults
        • Minimal-runes
        • Spacewalk
        • Try-gl-concls
        • Near-misses
      • Miscellaneous
      • Output-controls
      • Macros
      • Interfacing-tools
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
    • Math
    • Testing-utilities
  • Debugging

Proof-tree

Proof tree displays

A view of ACL2 proofs may be obtained by way of ``proof tree displays,'' which appear in proof output (see proofs-co) when proof-tree output is enabled (see below) When ACL2 starts a proof and proof-tree output is enabled, the proof output begins with the following string.

<< Starting proof tree logging >>

Then for each goal encountered during the proof, a corresponding proof tree display (as described below) is printed into the proof output: first the characters in the constant string *proof-tree-start-delimiter* are printed, then the proof tree display, and finally the characters in the constant string *proof-tree-end-delimiter*.

External tools may present proof tree displays in a separate window. In particular, a tool distributed with the ACL2 community books customizes the emacs environment to provide window-based proof tree displays together with commands for traversing the proof transcript; see the discussion of ``ACL2 proof-tree support'' in file emacs-acl2.el distributed with ACL2 (in either of two directories; see emacs).

The command :start-proof-tree enables proof-tree output, while :stop-proof-tree disables proof-tree output; see start-proof-tree and see stop-proof-tree.

Here is an example of a proof tree display, with comments. Lines marked with ``c'' are considered ``checkpoints,'' i.e., goals whose scrutiny may be of particular value.

( DEFTHM PLUS-TREE-DEL ...)    ;currently proving PLUS-TREE-DEL
   1 Goal preprocess   ;"Goal" creates 1 subgoal by preprocessing
   2 |  Goal' simp     ;"Goal'" creates 2 subgoals by simplification
c  0 |  |  Subgoal 2 PUSH *1   ;"Subgoal 2" pushes "*1" for INDUCT
++++++++++++++++++++++++++++++ ;first pass thru waterfall completed
c  6 *1 INDUCT                 ;Proof by induction of "*1" has
     |  <5 more subgoals>      ; created 6 top-level subgoals.  At
                               ; this point, one of those 6 has been
                               ; proved, and 5 remain to be proved.
                               ; We are currently working on the
                               ; first of those 5 remaining goals.

See proof-tree-examples for many examples that contain proof tree displays. But first, we summarize the kinds of lines that may appear in a proof tree display. The simplest form of a proof tree display is a header showing the current event, followed by list of lines, each having one of the following forms.

n <goal> <process> ...

Says that the indicated goal created n subgoals using the indicated process. Here ``...'' refers to possible additional information.

c   n <goal> <process> ...

As above, but calls attention to the fact that this goal is a ``checkpoint'' in the sense that it may be of particular interest. Some displays may overwrite ``c'' with ``>'' to indicate the current checkpoint being shown in the proof transcript.

|  <goal> ...
|  |  <k subgoals>

Indicates that the goal just above this line, which is pointed to by the rightmost vertical bar (``|''), has k subgoals, none of which have yet been processed.

|  <goal> ...
|  |  <k more subgoals>

As above, except that some subgoals have already been processed.

++++++++++++++++++++++++++++++

Separates successive passes through the ``waterfall''. Thus, this ``fencepost'' mark indicates the start of a new proof by induction or of a new forcing round.

See proof-tree-examples for detailed examples. See checkpoint-forced-goals to learn how to mark goals as checkpoints that force the creation of goals in forcing rounds. Finally, see proof-tree-details for some points not covered elsewhere.

Subtopics

Proof-tree-examples
Proof tree example
Proof-tree-details
Proof tree details not covered elsewhere
Stop-proof-tree
Stop displaying proof trees during proofs
Start-proof-tree
Start displaying proof trees during proofs
Checkpoint-forced-goals
Cause forcing goals to be checkpointed in proof trees