There are 2 common approaches of guiding ACL2 to a successful proof.
ACL2 Hint: If the checkpoint is a FERTilize or GENeralize, then let ACL2 do the work for you and look at next goal it produces, for example in proving rev*-rev, the goal produced after Subgoal *1/2'4'(FERT) i.e
Subgoal *1/2'5' is more helpful:
(EQUAL (REV*-ACC A2 (LIST A1))
(APP (REV*-ACC A2 NIL) (LIST A1))).
ACL2 directly gives you the lemma you had come up in class:
(equal (rev*-acc a2 acc)
(app (rev a2) acc))
Note the generalization. Strive to come up with general lemmas, look at the high-level structure of function calls. For example in the above, it made sense to replace (list A1) with a new variable name, say Z (acc is also fine).
Hide irrelevant details and low-level function calls by replacing them uniformly with new variable names. Remember that generalization is the dual of instantiation. Think of a general lemma which when instantiated will help ACL2
get past the checkpoint it is stuck in.
For this assignment, I suggest you use Approach 1 and learn to look at the checkpoints in the failed proof output
and coming up with general lemmas that would help ACL2 get past this checkpoints towards a successful proof.
But remember in general Approach 2 is very useful in cases where the failed checkpoint output provides little help in
deciding the lemma to prove. For example in the rev-rev* proof, when you try to prove the above lemma, you get stuck,
if we look at the checkpoint right after FERT we notice:
Subgoal *1/2'5'
(EQUAL (APP (REV L2) (CONS L1 ACC))
(APP (APP (REV L2) (LIST L1)) ACC))
Can you from this checkpoint, decide that all you need is the app-is-associative lemma? If you can, very good, but if you remember, the paper-pencil proof for this is short and the app-is-associative lemma falls right out of that proof.
This was a little specific to Homework 6, to look at the approach suggested by the authors of ACL2, then check out The Method.