public boolean parse(List<? extends HasWord> words) {
   boolean b1 = scorer1.parse(words);
   boolean b2 = scorer2.parse(words);
   return (b1 && b2);
 }
 public double iScore(Edge edge) {
   return SloppyMath.min(scorer1.iScore(edge), scorer2.iScore(edge));
 }
 public boolean iPossible(Hook hook) {
   return scorer1.iPossible(hook) && scorer2.iPossible(hook);
 }
 public double iScore(Edge edge) {
   return scorer1.iScore(edge) + scorer2.iScore(edge);
 }
 public double oScore(Edge edge) {
   return scorer1.oScore(edge) + scorer2.oScore(edge);
 }
 public boolean parse(List<? extends HasWord> words) {
   return scorer.parse(words);
 }
 public boolean iPossible(Hook hook) {
   return scorer.iPossible(project(hook));
 }
 public double iScore(Edge edge) {
   return scorer.iScore(project(edge));
 }