void rollback(List<Type> saved_undet){
  Assert.check(saved_undet != null && saved_undet.length() == undetvars.length());
  for (  Type t : undetvars) {
    UndetVar uv=(UndetVar)t;
    UndetVar uv_saved=(UndetVar)saved_undet.head;
    for (    InferenceBound ib : InferenceBound.values()) {
      uv.setBounds(ib,uv_saved.getBounds(ib));
    }
    uv.inst=uv_saved.inst;
    saved_undet=saved_undet.tail;
  }
}

void rollback ( List < Type > saved_undet ) { Assert . check ( saved_undet != null && saved_undet . length ( ) == undetvars . length ( ) ) ; for ( Type t : undetvars ) { UndetVar uv = ( UndetVar ) t ; UndetVar uv_saved = ( UndetVar ) saved_undet . head ; for ( InferenceBound ib : InferenceBound . values ( ) ) { uv . setBounds ( ib , uv_saved . getBounds ( ib ) ) ; } uv . inst = uv_saved . inst ; saved_undet = saved_undet . tail ; } }
restore the state of this inference context to the previous known checkpoint
