PL.html -- ACL2 Version 6.3

## PL

print the rules for the given name or term

    Major Section:  HISTORY

    Examples:
    :pl foo     ; prints rules that rewrite some call of foo
    :pl (+ x y) ; prints rules that rewrite (+ x y)

Also see pl2, which restricts output to rules that you specify for a given term.

`Pl` takes one argument, which should be a symbol or a term.

First suppose that the argument is a symbol. Then it should be either a function symbol or else a macro alias for a function symbol (see macro-aliases-table), which is treated as the corresponding function symbol. In this case `:pl` displays rules that apply to terms whose top function symbol is the one specified, specifically, rules of class `:``rewrite`, `:``definition`, `:``meta`, `:``linear`, `:``type-prescription`, `:``forward-chaining`, `:``elim`, and `:``induction`.

Otherwise the argument should be a term (in user syntax, so that for example macros are permitted). In this case, `:pl` displays the `:``rewrite`, `:``definition`, and `:meta` rules that rewrite the specified term, followed by the applicable `:``type-prescription` rules. Each rule is displayed with additional information, such as the hypotheses that remain after applying some simple techniques to discharge them that are likely to apply in any context. Note that for `:``meta` rules, only those are displayed that meet two conditions: the application of the metafunction returns a term different from the input term, and if there is a hypothesis metafunction then it also returns a term. (A subtlety: In the case of extended metafunctions (see extended-metafunctions), a trivial metafunction context is used for the application of the metafunction.)

Note that some rule classes are not handled by `:pl`. In particular, if you want to see all `:``clause-processor` rules, issue the command `:print-clause-processor-rules`, and for trusted clause-processors, `(table trusted-clause-processor-table)`; see clause-processor and see define-trusted-clause-processor.