# Wolfram Function Repository

Instant-use add-on functions for the Wolfram Language

Function Repository Resource:

Replace all occurrences of an algebraic subexpression with a new symbol

Contributed by:
Daniel Lichtblau (Wolfram Research)

ResourceFunction["AlgebraicReplace"][ rewrites | |

ResourceFunction["AlgebraicReplace"][ rewrites |

As the name implies, ResourceFunction["AlgebraicReplace"] provides an algebraic form of polynomial replacement as opposed to requiring matching of patterns as used by ReplaceAll and related functions. For example, ordinary replacement of x y by z in the monomial x^{2}y^{3} will have no effect, whereas AlgebraicReplace will return y z^{2}.

ResourceFunction["AlgebraicReplace"] uses PolynomialQ to determine whether to burrow into subexpressions. If *vars* is not specified, it will use Variables to determine them.

Algebraically replace *xy* by a new variable *z* in a bivariate polynomial:

In[1]:= |

Out[1]= |

AlgebraicReplace works with non-polynomial expressions:

In[2]:= |

Out[2]= |

Use several replacements at once:

In[3]:= |

Out[3]= |

ReplaceAll only replaces literal matches:

In[4]:= |

Out[4]= |

AlgebraicReplace rewrites all monomials containing powers of *xy* to have powers of *z*:

In[5]:= |

Out[5]= |

AlgebraicReplace with a set of reducing polynomials *polys* and replacement variables *vars* has behavior similar to PolynomialReduce with *polys*-*vars*:

In[6]:= |

Out[7]= |

This is not canonical insofar as the reduction is not done with a Gröbner basis, so results can depend on ordering of inputs:

In[8]:= |

Out[8]= |

If we compute a Gröbner basis then the result is canonical for the given variable ordering:

In[9]:= |

Out[9]= |

Reversing the reduction polynomials does not change the result of PolynomialReduce when a Gröbner basis is used:

In[10]:= |

Out[10]= |

If the underlying variables are omitted, AlgebraicReplace might not recognize what are the correct ones:

In[11]:= |

Out[11]= |

Specify *x* and *y* as variables to get the desired replacement:

In[12]:= |

Out[12]= |

As seen in the "Properties and Relations" examples, AlgebraicReplace does not compute and use a Gröbner basis. Changing the order of the reducer inputs can affect the result.

- 1.0.1 – 26 May 2023
- 1.0.0 – 08 May 2023

This work is licensed under a Creative Commons Attribution 4.0 International License