ACL2 !>(defun rotate (n x)
	 (if (zp n)
	     x
	   (rotate (- n 1)
		   (append (cdr x)
			   (list (car x))))))

The admission of ROTATE is trivial, using the relation O< (which is
known to be well-founded on the domain recognized by O-P) and the measure
(ACL2-COUNT N).  We observe that the type of ROTATE is described by
the theorem 
(OR (AND (CONSP (ROTATE N X))
         (TRUE-LISTP (ROTATE N X)))
    (EQUAL (ROTATE N X) X)).
We used primitive type reasoning and the :type-prescription rules 
BINARY-APPEND and TRUE-LISTP-APPEND.

Summary
Form:  ( DEFUN ROTATE ...)
Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)
        (:TYPE-PRESCRIPTION BINARY-APPEND)
        (:TYPE-PRESCRIPTION TRUE-LISTP-APPEND))
Time:  0.01 seconds (prove: 0.00, print: 0.00, other: 0.00)
 ROTATE
ACL2 !>(defthm rotate-len ; fails without user assistance
	 (implies (true-listp x)
		  (equal (rotate (len x) x)
			 x)))

*1 (the initial Goal, a key checkpoint) is pushed for proof by induction.

Perhaps we can prove *1 by induction.  Two induction schemes are suggested
by this conjecture.  Subsumption reduces that number to one.  

We will induct according to a scheme suggested by (LEN X).  This suggestion
was produced using the :induction rules LEN and TRUE-LISTP.  If we
let (:P X) denote *1 above then the induction scheme we'll use is
(AND (IMPLIES (NOT (CONSP X)) (:P X))
     (IMPLIES (AND (CONSP X) (:P (CDR X)))
              (:P X))).
This induction is justified by the same argument used to admit LEN.
When applied to the goal at hand the above induction scheme produces
three nontautological subgoals.
Subgoal *1/3
Subgoal *1/2
Subgoal *1/2'
Subgoal *1/2''
Subgoal *1/2'''
Subgoal *1/2'4'
Subgoal *1/2'5'
Subgoal *1/2'6'

([ A key checkpoint while proving *1 (descended from Goal):

Subgoal *1/2'
(IMPLIES (AND (CONSP X)
              (EQUAL (ROTATE (LEN (CDR X)) (CDR X))
                     (CDR X))
              (TRUE-LISTP (CDR X)))
         (EQUAL (ROTATE (LEN (CDR X))
                        (APPEND (CDR X) (LIST (CAR X))))
                X))

*1.1 (Subgoal *1/2'6') is pushed for proof by induction.

])
Subgoal *1/1

So we now return to *1.1, which is

(IMPLIES (AND (INTEGERP I)
              (<= 0 I)
              (TRUE-LISTP X2))
         (EQUAL (ROTATE I (APPEND X2 (LIST X1)))
                (CONS X1 (ROTATE I X2)))).
Subgoal *1.1/5

Splitter note (see :DOC splitter) for Subgoal *1.1/5 (2 subgoals).
  if-intro: ((:DEFINITION TRUE-LISTP))

Subgoal *1.1/5.2
Subgoal *1.1/5.2'
Subgoal *1.1/5.2''
Subgoal *1.1/5.2'''

*1.1.1 (Subgoal *1.1/5.2''') is pushed for proof by induction.
Subgoal *1.1/5.1
Subgoal *1.1/5.1'
Subgoal *1.1/5.1''
Subgoal *1.1/5.1'''
Subgoal *1.1/5.1'4'

*1.1.2 (Subgoal *1.1/5.1'4') is pushed for proof by induction.
Subgoal *1.1/4
Subgoal *1.1/3
Subgoal *1.1/2
Subgoal *1.1/1
Subgoal *1.1/1'
Subgoal *1.1/1''

*1.1.3 (Subgoal *1.1/1'') is pushed for proof by induction.

So we now return to *1.1.3, which is

(IMPLIES (TRUE-LISTP X2)
         (EQUAL (APPEND X2 (LIST X1))
                (CONS X1 X2))).
Subgoal *1.1.3/3
Subgoal *1.1.3/3'
Subgoal *1.1.3/3''
Subgoal *1.1.3/3'''
Subgoal *1.1.3/3'4'

*1.1.3.1 (Subgoal *1.1.3/3'4') is pushed for proof by induction.
Subgoal *1.1.3/2
Subgoal *1.1.3/1
Subgoal *1.1.3/1'

So we now return to *1.1.3.1, which is

(IMPLIES (AND (EQUAL (APPEND X4 (LIST X1))
                     (CONS X1 X4))
              (TRUE-LISTP X4))
         (EQUAL X3 X1)).
Subgoal *1.1.3.1/3
Subgoal *1.1.3.1/3'
Subgoal *1.1.3.1/3''
Subgoal *1.1.3.1/3'''

A goal of NIL, Subgoal *1.1.3.1/3''', has been generated!  Obviously,
the proof attempt has failed.

Summary
Form:  ( DEFTHM ROTATE-LEN ...)
Rules: ((:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER)
        (:DEFINITION BINARY-APPEND)
        (:DEFINITION ENDP)
        (:DEFINITION FIX)
        (:DEFINITION LEN)
        (:DEFINITION NOT)
        (:DEFINITION ROTATE)
        (:DEFINITION SYNP)
        (:DEFINITION TRUE-LISTP)
        (:ELIM CAR-CDR-ELIM)
        (:EXECUTABLE-COUNTERPART <)
        (:EXECUTABLE-COUNTERPART BINARY-+)
        (:EXECUTABLE-COUNTERPART BINARY-APPEND)
        (:EXECUTABLE-COUNTERPART CAR)
        (:EXECUTABLE-COUNTERPART CDR)
        (:EXECUTABLE-COUNTERPART CONS)
        (:EXECUTABLE-COUNTERPART CONSP)
        (:EXECUTABLE-COUNTERPART EQUAL)
        (:EXECUTABLE-COUNTERPART INTEGERP)
        (:EXECUTABLE-COUNTERPART LEN)
        (:EXECUTABLE-COUNTERPART NOT)
        (:EXECUTABLE-COUNTERPART ROTATE)
        (:EXECUTABLE-COUNTERPART ZP)
        (:FAKE-RUNE-FOR-LINEAR NIL)
        (:FAKE-RUNE-FOR-TYPE-SET NIL)
        (:INDUCTION BINARY-APPEND)
        (:INDUCTION LEN)
        (:INDUCTION ROTATE)
        (:INDUCTION TRUE-LISTP)
        (:REWRITE CAR-CONS)
        (:REWRITE CDR-CONS)
        (:REWRITE CONS-EQUAL)
        (:REWRITE FOLD-CONSTS-IN-+)
        (:REWRITE UNICITY-OF-0)
        (:TYPE-PRESCRIPTION BINARY-APPEND)
        (:TYPE-PRESCRIPTION LEN)
        (:TYPE-PRESCRIPTION TRUE-LISTP-APPEND))
Splitter rules (see :DOC splitter):
  if-intro: ((:DEFINITION TRUE-LISTP))
Time:  0.04 seconds (prove: 0.03, print: 0.01, other: 0.00)
Prover steps counted:  5892

---
The key checkpoint goals, below, may help you to debug this failure.
See :DOC failure and see :DOC set-checkpoint-summary-limit.
---

*** Key checkpoint at the top level: ***

Goal
(IMPLIES (TRUE-LISTP X)
         (EQUAL (ROTATE (LEN X) X) X))

*** Key checkpoint under a top-level induction ***
[NOTE: A goal of NIL was generated.  See :DOC nil-goal.]

Subgoal *1/2'
(IMPLIES (AND (CONSP X)
              (EQUAL (ROTATE (LEN (CDR X)) (CDR X))
                     (CDR X))
              (TRUE-LISTP (CDR X)))
         (EQUAL (ROTATE (LEN (CDR X))
                        (APPEND (CDR X) (LIST (CAR X))))
                X))

ACL2 Error in ( DEFTHM ROTATE-LEN ...):  See :DOC failure.

******** FAILED ********
ACL2 !>(defthm rotate-append ; fails to prove
	 (implies (and (true-listp x)
		       (true-listp y))
		  (equal (rotate (len x) (append x y))
			 (append y x)))
	 :rule-classes nil)

*1 (the initial Goal, a key checkpoint) is pushed for proof by induction.

Perhaps we can prove *1 by induction.  Five induction schemes are suggested
by this conjecture.  Subsumption reduces that number to four.  These
merge into two derived induction schemes.  One of these has a score
higher than the other.  

We will induct according to a scheme suggested by (BINARY-APPEND X Y).
This suggestion was produced using the :induction rules BINARY-APPEND,
LEN and TRUE-LISTP.  If we let (:P X Y) denote *1 above then the induction
scheme we'll use is
(AND (IMPLIES (AND (NOT (ENDP X)) (:P (CDR X) Y))
              (:P X Y))
     (IMPLIES (ENDP X) (:P X Y))).
This induction is justified by the same argument used to admit BINARY-APPEND.
When applied to the goal at hand the above induction scheme produces
three nontautological subgoals.
Subgoal *1/3
Subgoal *1/3'
Subgoal *1/3''
Subgoal *1/3'''
Subgoal *1/3'4'
Subgoal *1/3'5'
Subgoal *1/3'6'

([ A key checkpoint while proving *1 (descended from Goal):

Subgoal *1/3''
(IMPLIES (AND (CONSP X)
              (EQUAL (ROTATE (LEN (CDR X))
                             (APPEND (CDR X) Y))
                     (APPEND Y (CDR X)))
              (TRUE-LISTP (CDR X))
              (TRUE-LISTP Y))
         (EQUAL (ROTATE (LEN (CDR X))
                        (APPEND (APPEND (CDR X) Y)
                                (LIST (CAR X))))
                (APPEND Y X)))

*1.1 (Subgoal *1/3'6') is pushed for proof by induction.

])
Subgoal *1/2
Subgoal *1/1
Subgoal *1/1'

So we now return to *1.1, which is

(IMPLIES (AND (TRUE-LISTP BAD)
              (INTEGERP I)
              (<= 0 I)
              (EQUAL (ROTATE I BAD) (APPEND Y X2))
              (TRUE-LISTP X2)
              (TRUE-LISTP Y))
         (EQUAL (ROTATE I (APPEND BAD (LIST X1)))
                (APPEND Y (CONS X1 X2)))).
Subgoal *1.1/6

Splitter note (see :DOC splitter) for Subgoal *1.1/6 (2 subgoals).
  if-intro: ((:DEFINITION TRUE-LISTP))

Subgoal *1.1/6.2
Subgoal *1.1/6.2'
Subgoal *1.1/6.2''
Subgoal *1.1/6.2'''
Subgoal *1.1/6.2'4'
Subgoal *1.1/6.2'5'

*1.1.1 (Subgoal *1.1/6.2'5') is pushed for proof by induction.
Subgoal *1.1/6.1
Subgoal *1.1/6.1'
Subgoal *1.1/6.1''
Subgoal *1.1/6.1'''
Subgoal *1.1/6.1'4'

*1.1.2 (Subgoal *1.1/6.1'4') is pushed for proof by induction.
Subgoal *1.1/5
Subgoal *1.1/4
Subgoal *1.1/3
Subgoal *1.1/2
Subgoal *1.1/1
Subgoal *1.1/1'
Subgoal *1.1/1''
Subgoal *1.1/1'''
Subgoal *1.1/1'4'

*1.1.3 (Subgoal *1.1/1'4') is pushed for proof by induction.

So we now return to *1.1.3, which is

(IMPLIES (AND (TRUE-LISTP BAD)
              (TRUE-LISTP X2)
              (TRUE-LISTP Y))
         (EQUAL (APPEND BAD (LIST X1))
                (APPEND Y (CONS X1 X2)))).
Subgoal *1.1.3/3
Subgoal *1.1.3/3'
Subgoal *1.1.3/3''
Subgoal *1.1.3/3'''
Subgoal *1.1.3/3'4'

*1.1.3.1 (Subgoal *1.1.3/3'4') is pushed for proof by induction.
Subgoal *1.1.3/2
Subgoal *1.1.3/1
Subgoal *1.1.3/1'
Subgoal *1.1.3/1''
Subgoal *1.1.3/1'''

*1.1.3.2 (Subgoal *1.1.3/1''') is pushed for proof by induction.

So we now return to *1.1.3.2, which is

(IMPLIES (AND (TRUE-LISTP X2) (TRUE-LISTP Y))
         (EQUAL (LIST X1)
                (APPEND Y (CONS X1 X2)))).
Subgoal *1.1.3.2/3
Subgoal *1.1.3.2/3'
Subgoal *1.1.3.2/3''
Subgoal *1.1.3.2/3'''
Subgoal *1.1.3.2/3'4'

*1.1.3.2.1 (Subgoal *1.1.3.2/3'4') is pushed for proof by induction.
Subgoal *1.1.3.2/2
Subgoal *1.1.3.2/1
Subgoal *1.1.3.2/1'
Subgoal *1.1.3.2/1''
Subgoal *1.1.3.2/1'''

*1.1.3.2.2 (Subgoal *1.1.3.2/1''') is pushed for proof by induction.

So we now return to *1.1.3.2.2, which is

(IMPLIES (TRUE-LISTP X2) (NOT X2)).
Subgoal *1.1.3.2.2/3
Subgoal *1.1.3.2.2/2
Subgoal *1.1.3.2.2/2'
Subgoal *1.1.3.2.2/2''
Subgoal *1.1.3.2.2/2'''
Subgoal *1.1.3.2.2/2'4'
Subgoal *1.1.3.2.2/2'5'

A goal of NIL, Subgoal *1.1.3.2.2/2'5', has been generated!  Obviously,
the proof attempt has failed.

Summary
Form:  ( DEFTHM ROTATE-APPEND ...)
Rules: ((:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER)
        (:DEFINITION BINARY-APPEND)
        (:DEFINITION ENDP)
        (:DEFINITION FIX)
        (:DEFINITION LEN)
        (:DEFINITION NOT)
        (:DEFINITION ROTATE)
        (:DEFINITION SYNP)
        (:DEFINITION TRUE-LISTP)
        (:ELIM CAR-CDR-ELIM)
        (:EXECUTABLE-COUNTERPART <)
        (:EXECUTABLE-COUNTERPART BINARY-+)
        (:EXECUTABLE-COUNTERPART BINARY-APPEND)
        (:EXECUTABLE-COUNTERPART CAR)
        (:EXECUTABLE-COUNTERPART CDR)
        (:EXECUTABLE-COUNTERPART CONS)
        (:EXECUTABLE-COUNTERPART CONSP)
        (:EXECUTABLE-COUNTERPART INTEGERP)
        (:EXECUTABLE-COUNTERPART LEN)
        (:EXECUTABLE-COUNTERPART NOT)
        (:EXECUTABLE-COUNTERPART TRUE-LISTP)
        (:EXECUTABLE-COUNTERPART ZP)
        (:FAKE-RUNE-FOR-LINEAR NIL)
        (:FAKE-RUNE-FOR-TYPE-SET NIL)
        (:INDUCTION BINARY-APPEND)
        (:INDUCTION LEN)
        (:INDUCTION ROTATE)
        (:INDUCTION TRUE-LISTP)
        (:REWRITE APPEND-TO-NIL)
        (:REWRITE CAR-CONS)
        (:REWRITE CDR-CONS)
        (:REWRITE CONS-EQUAL)
        (:REWRITE FOLD-CONSTS-IN-+)
        (:REWRITE UNICITY-OF-0)
        (:TYPE-PRESCRIPTION BINARY-APPEND)
        (:TYPE-PRESCRIPTION LEN)
        (:TYPE-PRESCRIPTION TRUE-LISTP-APPEND))
Splitter rules (see :DOC splitter):
  if-intro: ((:DEFINITION TRUE-LISTP))
Time:  0.05 seconds (prove: 0.04, print: 0.01, other: 0.00)
Prover steps counted:  10241

---
The key checkpoint goals, below, may help you to debug this failure.
See :DOC failure and see :DOC set-checkpoint-summary-limit.
---

*** Key checkpoint at the top level: ***

Goal
(IMPLIES (AND (TRUE-LISTP X) (TRUE-LISTP Y))
         (EQUAL (ROTATE (LEN X) (APPEND X Y))
                (APPEND Y X)))

*** Key checkpoint under a top-level induction ***
[NOTE: A goal of NIL was generated.  See :DOC nil-goal.]

Subgoal *1/3''
(IMPLIES (AND (CONSP X)
              (EQUAL (ROTATE (LEN (CDR X))
                             (APPEND (CDR X) Y))
                     (APPEND Y (CDR X)))
              (TRUE-LISTP (CDR X))
              (TRUE-LISTP Y))
         (EQUAL (ROTATE (LEN (CDR X))
                        (APPEND (APPEND (CDR X) Y)
                                (LIST (CAR X))))
                (APPEND Y X)))

ACL2 Error in ( DEFTHM ROTATE-APPEND ...):  See :DOC failure.

******** FAILED ********
ACL2 !>(defun rotate-append-induction (x y)
	 (if (consp x)
	     (rotate-append-induction (cdr x)
				      (append y (list (car x))))
	   y))

The admission of ROTATE-APPEND-INDUCTION is trivial, using the relation
O< (which is known to be well-founded on the domain recognized by O-P)
and the measure (ACL2-COUNT X).  We observe that the type of 
ROTATE-APPEND-INDUCTION is described by the theorem 
(OR (AND (CONSP (ROTATE-APPEND-INDUCTION X Y))
         (TRUE-LISTP (ROTATE-APPEND-INDUCTION X Y)))
    (EQUAL (ROTATE-APPEND-INDUCTION X Y)
           Y)).
We used primitive type reasoning and the :type-prescription rules 
BINARY-APPEND and TRUE-LISTP-APPEND.

Summary
Form:  ( DEFUN ROTATE-APPEND-INDUCTION ...)
Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)
        (:TYPE-PRESCRIPTION BINARY-APPEND)
        (:TYPE-PRESCRIPTION TRUE-LISTP-APPEND))
Time:  0.00 seconds (prove: 0.00, print: 0.00, other: 0.00)
 ROTATE-APPEND-INDUCTION
ACL2 !>(defthm rotate-append ; fails; can you see how the checkpoint provides a clue?
	 (implies (and (true-listp x)
		       (true-listp y))
		  (equal (rotate (len x) (append x y))
			 (append y x)))
	 :hints (("Goal" :induct (rotate-append-induction x y)))
	 :rule-classes nil)

*1 (the initial Goal, a key checkpoint) is pushed for proof by induction.

We have been told to use induction.  One induction scheme is suggested
by the induction hint.  

We will induct according to a scheme suggested by 
(ROTATE-APPEND-INDUCTION X Y).  This suggestion was produced using
the :induction rule ROTATE-APPEND-INDUCTION.  If we let (:P X Y) denote
*1 above then the induction scheme we'll use is
(AND (IMPLIES (NOT (CONSP X)) (:P X Y))
     (IMPLIES (AND (CONSP X)
                   (:P (CDR X) (APPEND Y (LIST (CAR X)))))
              (:P X Y))).
This induction is justified by the same argument used to admit 
ROTATE-APPEND-INDUCTION.  Note, however, that the unmeasured variable
Y is being instantiated.  When applied to the goal at hand the above
induction scheme produces two nontautological subgoals.
Subgoal *1/2
Subgoal *1/2'
Subgoal *1/1
Subgoal *1/1'
Subgoal *1/1''
Subgoal *1/1'''
Subgoal *1/1'4'
Subgoal *1/1'5'
Subgoal *1/1'6'

([ A key checkpoint while proving *1 (descended from Goal):

Subgoal *1/1''
(IMPLIES (AND (CONSP X)
              (EQUAL (ROTATE (LEN (CDR X))
                             (APPEND (CDR X) Y (LIST (CAR X))))
                     (APPEND (APPEND Y (LIST (CAR X)))
                             (CDR X)))
              (TRUE-LISTP (CDR X))
              (TRUE-LISTP Y))
         (EQUAL (ROTATE (LEN (CDR X))
                        (APPEND (APPEND (CDR X) Y)
                                (LIST (CAR X))))
                (APPEND Y X)))

*1.1 (Subgoal *1/1'6') is pushed for proof by induction.

])

So we now return to *1.1, which is

(IMPLIES (AND (INTEGERP I)
              (<= 0 I)
              (CONSP L)
              (TRUE-LISTP L)
              (EQUAL (ROTATE I (APPEND X2 L))
                     (APPEND L X2))
              (TRUE-LISTP X2)
              (TRUE-LISTP Y))
         (EQUAL (ROTATE I (APPEND (APPEND X2 Y) (LIST X1)))
                (APPEND Y (CONS X1 X2)))).
Subgoal *1.1/5
Subgoal *1.1/5'
Subgoal *1.1/5''
Subgoal *1.1/5'''
Subgoal *1.1/5'4'
Subgoal *1.1/5'5'
Subgoal *1.1/5'6'
Subgoal *1.1/5'7'
Subgoal *1.1/5'8'
Subgoal *1.1/5'9'

*1.1.1 (Subgoal *1.1/5'9') is pushed for proof by induction.
Subgoal *1.1/4
Subgoal *1.1/4'
Subgoal *1.1/4''
Subgoal *1.1/4'''
Subgoal *1.1/4'4'
Subgoal *1.1/4'5'
Subgoal *1.1/4'6'
Subgoal *1.1/4'7'

*1.1.2 (Subgoal *1.1/4'7') is pushed for proof by induction.
Subgoal *1.1/3
Subgoal *1.1/2
Subgoal *1.1/1
Subgoal *1.1/1'
Subgoal *1.1/1''

*1.1.3 (Subgoal *1.1/1'') is pushed for proof by induction.

So we now return to *1.1.3, which is

(IMPLIES (AND (CONSP L)
              (TRUE-LISTP L)
              (EQUAL (APPEND X2 L) (APPEND L X2))
              (TRUE-LISTP X2)
              (TRUE-LISTP Y))
         (EQUAL (APPEND (APPEND X2 Y) (LIST X1))
                (APPEND Y (CONS X1 X2)))).
Subgoal *1.1.3/4
Subgoal *1.1.3/4'
Subgoal *1.1.3/4''
Subgoal *1.1.3/4'''
Subgoal *1.1.3/4'4'
Subgoal *1.1.3/4'5'

*1.1.3.1 (Subgoal *1.1.3/4'5') is pushed for proof by induction.
Subgoal *1.1.3/3
Subgoal *1.1.3/2
Subgoal *1.1.3/2'
Subgoal *1.1.3/2''
Subgoal *1.1.3/2'''
Subgoal *1.1.3/2'4'
Subgoal *1.1.3/2'5'

*1.1.3.2 (Subgoal *1.1.3/2'5') is pushed for proof by induction.
Subgoal *1.1.3/1
Subgoal *1.1.3/1'

So we now return to *1.1.3.2, which is

(IMPLIES (AND (CONSP LST)
              (TRUE-LISTP LST)
              (NOT (EQUAL LST (APPEND L X4)))
              (CONSP L)
              (TRUE-LISTP L)
              (EQUAL (CONS X3 LST)
                     (APPEND L (CONS X3 X4)))
              (TRUE-LISTP X4)
              (TRUE-LISTP Y))
         (EQUAL (CONS X3 (APPEND (APPEND X4 Y) (LIST X1)))
                (APPEND Y (LIST* X1 X3 X4)))).
Subgoal *1.1.3.2/4
Subgoal *1.1.3.2/4'
Subgoal *1.1.3.2/4''
Subgoal *1.1.3.2/4'''
Subgoal *1.1.3.2/4'4'
Subgoal *1.1.3.2/4'5'

*1.1.3.2.1 (Subgoal *1.1.3.2/4'5') is pushed for proof by induction.
Subgoal *1.1.3.2/3
Subgoal *1.1.3.2/2
Subgoal *1.1.3.2/2'
Subgoal *1.1.3.2/1
Subgoal *1.1.3.2/1'
Subgoal *1.1.3.2/1''
Subgoal *1.1.3.2/1'''
Subgoal *1.1.3.2/1'4'
Subgoal *1.1.3.2/1'5'
Subgoal *1.1.3.2/1'6'

*1.1.3.2.2 (Subgoal *1.1.3.2/1'6') is pushed for proof by induction.

So we now return to *1.1.3.2.2, which is

(IMPLIES (AND (TRUE-LISTP (APPEND L2 (CONS L1 X4)))
              (TRUE-LISTP L2)
              (TRUE-LISTP X4)
              (TRUE-LISTP Y))
         (EQUAL (CONS L1 (APPEND (APPEND X4 Y) (LIST X1)))
                (APPEND Y (LIST* X1 L1 X4)))).
Subgoal *1.1.3.2.2/4
Subgoal *1.1.3.2.2/4'
Subgoal *1.1.3.2.2/4''
Subgoal *1.1.3.2.2/4'''
Subgoal *1.1.3.2.2/4'4'
Subgoal *1.1.3.2.2/4'5'
Subgoal *1.1.3.2.2/4'6'
Subgoal *1.1.3.2.2/4'7'

*1.1.3.2.2.1 (Subgoal *1.1.3.2.2/4'7') is pushed for proof by induction.
Subgoal *1.1.3.2.2/3
Subgoal *1.1.3.2.2/2
Subgoal *1.1.3.2.2/1
Subgoal *1.1.3.2.2/1'
Subgoal *1.1.3.2.2/1''
Subgoal *1.1.3.2.2/1'''
Subgoal *1.1.3.2.2/1'4'

*1.1.3.2.2.2 (Subgoal *1.1.3.2.2/1'4') is pushed for proof by induction.

So we now return to *1.1.3.2.2.2, which is

(IMPLIES (TRUE-LISTP Y)
         (EQUAL (CONS L1 (APPEND Y (LIST X1)))
                (APPEND Y (LIST X1 L1)))).
Subgoal *1.1.3.2.2.2/3
Subgoal *1.1.3.2.2.2/3'

Splitter note (see :DOC splitter) for Subgoal *1.1.3.2.2.2/3' (2 subgoals).
  if-intro: ((:REWRITE CONS-EQUAL))

Subgoal *1.1.3.2.2.2/3.2
Subgoal *1.1.3.2.2.2/3.2'
Subgoal *1.1.3.2.2.2/3.2''

*1.1.3.2.2.2.1 (Subgoal *1.1.3.2.2.2/3.2'') is pushed for proof by
induction.
Subgoal *1.1.3.2.2.2/3.1
Subgoal *1.1.3.2.2.2/3.1'
Subgoal *1.1.3.2.2.2/3.1''
Subgoal *1.1.3.2.2.2/3.1'''
Subgoal *1.1.3.2.2.2/3.1'4'
Subgoal *1.1.3.2.2.2/3.1'5'

A goal of NIL, Subgoal *1.1.3.2.2.2/3.1'5', has been generated!  Obviously,
the proof attempt has failed.

Summary
Form:  ( DEFTHM ROTATE-APPEND ...)
Rules: ((:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER)
        (:DEFINITION BINARY-APPEND)
        (:DEFINITION ENDP)
        (:DEFINITION FIX)
        (:DEFINITION LEN)
        (:DEFINITION NOT)
        (:DEFINITION ROTATE)
        (:DEFINITION SYNP)
        (:DEFINITION TRUE-LISTP)
        (:ELIM CAR-CDR-ELIM)
        (:EXECUTABLE-COUNTERPART <)
        (:EXECUTABLE-COUNTERPART BINARY-+)
        (:EXECUTABLE-COUNTERPART CONSP)
        (:EXECUTABLE-COUNTERPART INTEGERP)
        (:EXECUTABLE-COUNTERPART LEN)
        (:EXECUTABLE-COUNTERPART NOT)
        (:EXECUTABLE-COUNTERPART ZP)
        (:FAKE-RUNE-FOR-LINEAR NIL)
        (:FAKE-RUNE-FOR-TYPE-SET NIL)
        (:INDUCTION BINARY-APPEND)
        (:INDUCTION ROTATE)
        (:INDUCTION ROTATE-APPEND-INDUCTION)
        (:INDUCTION TRUE-LISTP)
        (:REWRITE APPEND-TO-NIL)
        (:REWRITE CAR-CONS)
        (:REWRITE CDR-CONS)
        (:REWRITE CONS-EQUAL)
        (:REWRITE FOLD-CONSTS-IN-+)
        (:REWRITE UNICITY-OF-0)
        (:TYPE-PRESCRIPTION BINARY-APPEND)
        (:TYPE-PRESCRIPTION LEN)
        (:TYPE-PRESCRIPTION TRUE-LISTP-APPEND))
Splitter rules (see :DOC splitter):
  if-intro: ((:REWRITE CONS-EQUAL))
Time:  0.12 seconds (prove: 0.11, print: 0.01, other: 0.00)
Prover steps counted:  24066

---
The key checkpoint goals, below, may help you to debug this failure.
See :DOC failure and see :DOC set-checkpoint-summary-limit.
---

*** Key checkpoint at the top level: ***

Goal
(IMPLIES (AND (TRUE-LISTP X) (TRUE-LISTP Y))
         (EQUAL (ROTATE (LEN X) (APPEND X Y))
                (APPEND Y X)))

*** Key checkpoint under a top-level induction ***
[NOTE: A goal of NIL was generated.  See :DOC nil-goal.]

Subgoal *1/1''
(IMPLIES (AND (CONSP X)
              (EQUAL (ROTATE (LEN (CDR X))
                             (APPEND (CDR X) Y (LIST (CAR X))))
                     (APPEND (APPEND Y (LIST (CAR X)))
                             (CDR X)))
              (TRUE-LISTP (CDR X))
              (TRUE-LISTP Y))
         (EQUAL (ROTATE (LEN (CDR X))
                        (APPEND (APPEND (CDR X) Y)
                                (LIST (CAR X))))
                (APPEND Y X)))

ACL2 Error in ( DEFTHM ROTATE-APPEND ...):  See :DOC failure.

******** FAILED ********
ACL2 !>(defthm append-assoc
	 (equal (append (append x y) z)
		(append x y z)))

*1 (the initial Goal, a key checkpoint) is pushed for proof by induction.

Perhaps we can prove *1 by induction.  Three induction schemes are
suggested by this conjecture.  Subsumption reduces that number to two.
However, one of these is flawed and so we are left with one viable
candidate.  

We will induct according to a scheme suggested by (BINARY-APPEND X Y).
This suggestion was produced using the :induction rule BINARY-APPEND.
If we let (:P X Y Z) denote *1 above then the induction scheme we'll
use is
(AND (IMPLIES (AND (NOT (ENDP X)) (:P (CDR X) Y Z))
              (:P X Y Z))
     (IMPLIES (ENDP X) (:P X Y Z))).
This induction is justified by the same argument used to admit BINARY-APPEND.
When applied to the goal at hand the above induction scheme produces
two nontautological subgoals.
Subgoal *1/2
Subgoal *1/2'
Subgoal *1/1
Subgoal *1/1'

*1 is COMPLETED!
Thus key checkpoint Goal is COMPLETED!

Q.E.D.

Summary
Form:  ( DEFTHM APPEND-ASSOC ...)
Rules: ((:DEFINITION BINARY-APPEND)
        (:DEFINITION ENDP)
        (:DEFINITION NOT)
        (:FAKE-RUNE-FOR-TYPE-SET NIL)
        (:INDUCTION BINARY-APPEND)
        (:REWRITE CAR-CONS)
        (:REWRITE CDR-CONS))
Time:  0.01 seconds (prove: 0.00, print: 0.00, other: 0.00)
Prover steps counted:  435
 APPEND-ASSOC
ACL2 !>(defthm rotate-append
	 (implies (and (true-listp x)
		       (true-listp y))
		  (equal (rotate (len x) (append x y))
			 (append y x)))
	 :hints (("Goal" :induct (rotate-append-induction x y)))
	 :rule-classes nil)

*1 (the initial Goal, a key checkpoint) is pushed for proof by induction.

We have been told to use induction.  One induction scheme is suggested
by the induction hint.  

We will induct according to a scheme suggested by 
(ROTATE-APPEND-INDUCTION X Y).  This suggestion was produced using
the :induction rule ROTATE-APPEND-INDUCTION.  If we let (:P X Y) denote
*1 above then the induction scheme we'll use is
(AND (IMPLIES (NOT (CONSP X)) (:P X Y))
     (IMPLIES (AND (CONSP X)
                   (:P (CDR X) (APPEND Y (LIST (CAR X)))))
              (:P X Y))).
This induction is justified by the same argument used to admit 
ROTATE-APPEND-INDUCTION.  Note, however, that the unmeasured variable
Y is being instantiated.  When applied to the goal at hand the above
induction scheme produces two nontautological subgoals.
Subgoal *1/2
Subgoal *1/2'
Subgoal *1/1
Subgoal *1/1'

*1 is COMPLETED!
Thus key checkpoint Goal is COMPLETED!

Q.E.D.

Summary
Form:  ( DEFTHM ROTATE-APPEND ...)
Rules: ((:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER)
        (:DEFINITION BINARY-APPEND)
        (:DEFINITION FIX)
        (:DEFINITION LEN)
        (:DEFINITION NOT)
        (:DEFINITION ROTATE)
        (:DEFINITION SYNP)
        (:DEFINITION TRUE-LISTP)
        (:EXECUTABLE-COUNTERPART BINARY-+)
        (:EXECUTABLE-COUNTERPART CONSP)
        (:EXECUTABLE-COUNTERPART LEN)
        (:EXECUTABLE-COUNTERPART ZP)
        (:FAKE-RUNE-FOR-TYPE-SET NIL)
        (:INDUCTION ROTATE-APPEND-INDUCTION)
        (:REWRITE APPEND-ASSOC)
        (:REWRITE APPEND-TO-NIL)
        (:REWRITE CAR-CONS)
        (:REWRITE CDR-CONS)
        (:REWRITE CONS-CAR-CDR)
        (:REWRITE FOLD-CONSTS-IN-+)
        (:REWRITE UNICITY-OF-0)
        (:TYPE-PRESCRIPTION BINARY-APPEND)
        (:TYPE-PRESCRIPTION LEN)
        (:TYPE-PRESCRIPTION TRUE-LISTP-APPEND))
Time:  0.00 seconds (prove: 0.00, print: 0.00, other: 0.00)
Prover steps counted:  648
 ROTATE-APPEND
ACL2 !>(defthm rotate-len
	 (implies (true-listp x)
		  (equal (rotate (len x) x)
			 x))
	 :hints (("Goal" :use ((:instance rotate-append (y nil))))))
Goal'
Goal''

Q.E.D.

Summary
Form:  ( DEFTHM ROTATE-LEN ...)
Rules: ((:DEFINITION BINARY-APPEND)
        (:DEFINITION NOT)
        (:EXECUTABLE-COUNTERPART CONSP)
        (:EXECUTABLE-COUNTERPART TRUE-LISTP)
        (:REWRITE APPEND-TO-NIL))
Hint-events: ((:USE ROTATE-APPEND))
Time:  0.00 seconds (prove: 0.00, print: 0.00, other: 0.00)
Prover steps counted:  176
 ROTATE-LEN
ACL2 !>
