int I1.GF1 <TF> (I2 i2, long counter, long initial_stack, long current_stack)
 {
     if (counter > 0)
     {
         return(i2.GF2 <TF> (this, counter - 1, initial_stack, (long)&counter));
     }
     return(check((long)&counter, current_stack));
 }