code: public Type glb(List<Type> ts) {
          Type t1 = ts.head;
          for (Type t2 : ts.tail) {
              if (t1.isErroneous())
                  return t1;
              t1 = glb(t1, t2);
          }
          return t1;
      }
docs: <editor-fold defaultstate="collapsed" desc="Greatest lower bound">