code: @Override
    public GallicWeight plus(GallicWeight a, GallicWeight b) {
      if (isZero(a)) return b;
      if (isZero(b)) return a;
      if (mode == RESTRICT_GALLIC) {
        if (SHORTLEX_ORDERING.compare(a, b) != 0) {
          throw new IllegalArgumentException("Trying to plus two different gallic weights, which isn't allowed in " +
            "this context. Did you pass a non-functional FST where a functional one was required? a = " + a +
            "; b = " + b);
        }
        double newWeight = this.weightSemiring.plus(a.getWeight(), b.getWeight());
        return GallicWeight.create(new IntArrayList(a.getLabels()), newWeight);
      } else {
        Preconditions.checkState(mode == MIN_GALLIC);
        return this.weightSemiring.naturalLess(a.getWeight(), b.getWeight()) ? a : b;
      }
    }
docs: gallic plus just delegates to the string semiring plus + the primitive semiring plus
  NOTE this isn't the Union ('general') Gallic Plus from openfst (i have split this out for sanity at the expense of
  elegance).