package tcra.exercises;

import tcra.math.*;
import tcra.exercises.resolve_stack_mystery_private.*;

public class ResolveStackMysteryExercise extends TCRAExercise
{
   protected static final int max_depth = 5;
   
   public ResolveStackMysteryExercise()
   {
      super("<html>Concept Stack_Template(type Integer;" +
            " evaluates Max_Depth: Integer);<br>" +
            "uses Std_Integer_Fac, String_Theory;<br>" +
            "requires Max_Depth &gt; 0; (Max_Depth = "+
            max_depth + ")<p>"+
            "Type Family Stack ⊆ Str(Entry);<br>" +
            "exemplar S;<br>" +
            "constraints |S| ≤ Max_Depth;<br>" +
            "initialization ensures S = Λ;");
      contracts.add(new ResolveStackMystery_Mystery1_0());
      contracts.add(new ResolveStackMystery_Mystery1_1());
      contracts.add(new ResolveStackMystery_Mystery1_2());
      contracts.add(new ResolveStackMystery_Mystery1_3());
      contracts.add(new ResolveStackMystery_Mystery2());
      contracts.add(new ResolveStackMystery_Mystery3());
      contracts.add(new ResolveStackMystery_Mystery4());
      contracts.add(new ResolveStackMystery_Mystery5());
      contracts.add(new ResolveStackMystery_Mystery6());
      contracts.add(new ResolveStackMystery_Mystery7());
   } // end ctor

   public MathModel getMathRep()   { return new MathStringModel(); }
   public String getSelfString()   { return "S"; }
   public static int getMaxDepth() { return max_depth; }
} // end class

