@Override public int hashCode(){
  int result=rule != null ? rule.ordinal() : 0;
  result=37 * result + (sources != null ? sources.hashCode() : 0);
  return result;
}

@ Override public int hashCode ( ) { int result = rule != null ? rule . ordinal ( ) : 0 ; result = 37 * result + ( sources != null ? sources . hashCode ( ) : 0 ) ; return result ; }
rule + immediate sources indentify a derivation .
