@Override
  public Polynomial expand(IdealFactory factory) {
    NumericPrimitive primitive = primitive();
    Polynomial expandedPrimitive = primitive.expand(factory);

    if (primitive.equals(expandedPrimitive)) return this;
    return (Polynomial) factory.power(expandedPrimitive, exponent());
  }
 @Override
 public Polynomial denominator(IdealFactory factory) {
   return factory.one(type());
 }
 @Override
 public SymbolicMap<Monic, Monomial> termMap(IdealFactory factory) {
   return factory.singletonMap((Monic) this, (Monomial) this);
 }
 @Override
 public Constant monomialConstant(IdealFactory factory) {
   return factory.one(type());
 }
 @Override
 public SymbolicMap<NumericPrimitive, PrimitivePower> monicFactors(IdealFactory factory) {
   return factory.singletonMap(primitive(), (PrimitivePower) this);
 }
 @Override
 public Constant constantTerm(IdealFactory factory) {
   return factory.zero(type());
 }