/*
 * @(#)$Id: ind_strat,v 1.4 1997/10/17 17:18:42 rjb Exp $
 *
 * $Log: ind_strat,v $
 * Revision 1.4  1997/10/17 17:18:42  rjb
 * Fixed comment.
 *
 * Revision 1.3  1997/10/17 14:25:58  rjb
 * Added source of induction lemma to method arguments.
 *
 * Revision 1.2  1995/10/03 12:54:10  img
 * Induciton preconditions present verbatim to avoid duplication of call
 * to scheme.  Use induction/1 rather than induction/2.
 *
 * Revision 1.1  1994/09/16  09:33:29  dream
 * Initial revision
 *
 */

	% IND_STRAT: Version (I)
	% 
	% Preconditions of ind_strat are same as that of
	% induction-method, so see comments there.
	% 
	% Postconditions vary from version to version:
	% - Version (I) explicitly calls upon the constituent methods (wave,
	%   sym_eval, fertilize) to achieve the same effect.
	% 
method(ind_strat(induction(Lemma-Scheme) then CasesTactics),
       H==>G,
       [induction_suggestion(H,G,Scheme),  % ind. preconditions (avoiding recomputation of scheme/5)
	 scheme(Lemma,Scheme,H==>G,BSeqs,SSeqs)],
       [(map_list(BSeqs,BSeq:=>BSeq1-base_case(Ms),
                       applicable_submethod(BSeq,base_case(Ms),_,BSeq1),
                 BSeq1sBTs) orelse
         (BSeq1sBTs = [BSeqs-[idtac]])),
        zip(BSeq1sBTs,BSeq1s,BaseTactics1),
	flatten(BaseTactics1,BaseTactics),
        flatten(BSeq1s,FBSeq1s),
        map_list(SSeqs,SSeq:=>SSeq1-step_case(Ms),
                      applicable_submethod(SSeq,step_case(Ms),_,SSeq1),
                SSeq1sSTs),
        zip(SSeq1sSTs,SSeq1s,StepTactics),
        flatten(SSeq1s,FSSeq1s),
        append(BaseTactics, StepTactics, CasesTactics),
	append(FBSeq1s,FSSeq1s,AllSeqs)
       ],
       AllSeqs,
       ind_strat(induction(Lemma-Scheme) then CasesTactics)
      ).

