• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
        • Instructions
        • Proof-builder-commands
          • ACL2-pc::rewrite
          • ACL2-pc::apply-linear
          • ACL2-pc::sequence
          • Proof-builder-commands-short-list
          • ACL2-pc::=
          • ACL2-pc::s
          • ACL2-pc::exit
          • ACL2-pc::type-alist
          • ACL2-pc::in-theory
          • ACL2-pc::equiv
          • ACL2-pc::comm
          • ACL2-pc::casesplit
          • ACL2-pc::add-abbreviation
          • ACL2-pc::dv
            • Dive-into-macros-table
          • ACL2-pc::hyps
          • ACL2-pc::prove-termination
          • ACL2-pc::prove-guard
          • ACL2-pc::x
          • ACL2-pc::fancy-use
          • ACL2-pc::dive
          • ACL2-pc::generalize
          • ACL2-pc::lisp
          • ACL2-pc::show-rewrites
          • ACL2-pc::claim
          • ACL2-pc::put
          • ACL2-pc::split
          • ACL2-pc::geneqv
          • ACL2-pc::prove
          • ACL2-pc::help
          • ACL2-pc::save
          • ACL2-pc::do-all
          • ACL2-pc::demote
          • ACL2-pc::wrap1
          • ACL2-pc::show-abbreviations
          • ACL2-pc::promote
          • ACL2-pc::retrieve
          • ACL2-pc::reduce
          • ACL2-pc::forwardchain
          • ACL2-pc::doc
          • ACL2-pc::bash
          • ACL2-pc::p-top
          • ACL2-pc::print
          • ACL2-pc::expand
          • ACL2-pc::bk
          • ACL2-pc::wrap
          • ACL2-pc::remove-abbreviations
          • ACL2-pc::reduce-by-induction
          • ACL2-pc::induct
          • ACL2-pc::unsave
          • ACL2-pc::undo
          • ACL2-pc::top
          • ACL2-pc::restore
          • ACL2-pc::replay
          • ACL2-pc::psog
          • ACL2-pc::p
          • ACL2-pc::nx
          • ACL2-pc::noise
          • ACL2-pc::contrapose
          • ACL2-pc::wrap-induct
          • ACL2-pc::pso!
          • ACL2-pc::pso
          • ACL2-pc::up
          • ACL2-pc::then
          • ACL2-pc::th
          • ACL2-pc::sl
          • ACL2-pc::show-type-prescriptions
          • ACL2-pc::bdd
          • ACL2-pc::repeat
          • ACL2-pc::pr
          • ACL2-pc::pl
          • ACL2-pc::finish
          • ACL2-pc::commands
          • ACL2-pc::change-goal
          • ACL2-pc::use
          • ACL2-pc::show-linears
          • ACL2-pc::s-prop
          • ACL2-pc::runes
          • ACL2-pc::protect
          • ACL2-pc::instantiate
          • ACL2-pc::insist-all-proved
          • ACL2-pc::fail
          • ACL2-pc::clause-processor
          • ACL2-pc::bookmark
          • ACL2-pc::retain
          • ACL2-pc::quiet!
          • ACL2-pc::pro
          • ACL2-pc::orelse
          • ACL2-pc::goals
          • ACL2-pc::drop
          • ACL2-pc::do-strict
          • ACL2-pc::print-all-concs
          • ACL2-pc::do-all-no-prompt
          • ACL2-pc::x-dumb
          • ACL2-pc::succeed
          • ACL2-pc::print-all-goals
          • ACL2-pc::pp
          • ACL2-pc::noise!
          • ACL2-pc::nil
          • ACL2-pc::negate
          • ACL2-pc::illegal
          • ACL2-pc::elim
          • ACL2-pc::sls
          • ACL2-pc::quiet
          • ACL2-pc::claim-simple
          • ACL2-pc::cg
          • ACL2-pc::pro-or-skip
          • ACL2-pc::ex
          • ACL2-pc::comment
          • ACL2-pc::ACL2-wrap
          • ACL2-pc::when-not-proved
          • ACL2-pc::skip
          • ACL2-pc::retain-or-skip
          • ACL2-pc::repeat-until-done
          • ACL2-pc::free
          • ACL2-pc::drop-or-skip
          • ACL2-pc::cg-or-skip
          • ACL2-pc::by
          • ACL2-pc::split-in-theory
          • ACL2-pc::st
          • ACL2-pc::sr
          • ACL2-pc::print-main
          • ACL2-pc::lemmas-used
          • ACL2-pc::cl-proc
          • ACL2-pc::al
          • ACL2-pc::run-instr-on-new-goals
          • ACL2-pc::run-instr-on-goal
          • ACL2-pc::repeat-rec
          • ACL2-pc::r
          • ACL2-pc::contradict
        • Proof-builder-commands-short-list
        • Dive-into-macros-table
        • Verify
        • Define-pc-macro
        • Macro-command
        • Define-pc-help
        • Toggle-pc-macro
        • Define-pc-meta
        • Retrieve
        • Unsave
        • Proof-checker
      • Hons-and-memoization
      • Events
      • History
      • Parallelism
      • Programming
      • Start-here
      • Real
      • Debugging
      • Miscellaneous
      • Output-controls
      • Macros
      • Interfacing-tools
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
    • Testing-utilities
    • Math
  • Proof-builder-commands
  • Proof-builder-commands-short-list

ACL2-pc::dv

(atomic macro) move to the indicated subterm

Examples:
(dv 1)    -- assign the new current subterm to be the first argument
             of the existing current subterm
(dv 1 2)  -- assign the new current subterm to be the result of
             first taking the 1st argument of the existing
             current subterm, and then the 2nd argument of that

For example, if the current subterm is

(* (+ a b) c),

then after (dv 1) it is

(+ a b).

If after that, then (dv 2) is invoked, the new current subterm will be

b.

Instead of (dv 1) followed by (dv 2), the same current subterm could be obtained by instead submitting the single instruction (dv 1 2).

General Form:
(dv &rest naturals-list)

If naturals-list is a non-empty list (n_1 ... n_k) of natural numbers, let the new current subterm be the result of selecting the n_1-st argument of the current subterm, and then the n_2-th subterm of that, ..., finally the n_k-th subterm.

Remark: (dv n) may be abbreviated by simply n, so we could have typed 1 instead of (dv 1) in the first example above.

Remark: Emacs users who load (into Emacs) the file emacs-acl2.el (from a suitable directory; see emacs) will have defined a command, Control-t d, that avoids the need to type dv commands. After you print the current term using the p or th command, you may position the cursor on a subterm and type Control-t d. Emacs will respond by pasting the appropriate dv command immediately after the interactive proof-builder's prompt. You can then simply type <RETURN> in order to dive to the desired subterm.

Remark: A similar command is dive, which is related to the command pp, in that the diving is done according to raw (translated, internal form) syntax. (See ACL2-pc::dive.) Use the command dv if you want to dive according to the syntax displayed by the command p. Thus, the command ``up'' is the inverse of dive, not of dv. The following example illustrates this point.

ACL2 !>(verify (equal (* a b c) x))
->: p ; print user-level term
(EQUAL (* A B C) X)
->: pp ; print internal-form (translated) term
(EQUAL (BINARY-* A (BINARY-* B C)) X)
->: exit
Exiting....
 NIL
ACL2 !>(verify (equal (* a b c) x))
->: p
(EQUAL (* A B C) X)
->: 1 ; same as (dv 1)
->: p ; print user-level term
(* A B C)
->: pp ; print internal-form (translated) term
(BINARY-* A (BINARY-* B C))
->: 3 ; dive to third argument of (* A B C)
->: p
C
->: up ; go up one level in (BINARY-* A (BINARY-* B C))
->: p
(* B C)
->: pp
(BINARY-* B C)
->:

Subtopics

Dive-into-macros-table
Right-associated function information for the proof-builder