# Exploiting a relation among constants

Say I have two arbitrary real constants $p,q$ that satisfy $p^2+q^2=1$. Is there any way to easily declare this relation in Mathematica?

Edit

More specifically I have this (among others) expression:

$$\frac{\sqrt{\frac{p^4 q^4(p^2-q^2)^2}{p^4 + q^4}}}{\sqrt{p^{10}+p^2q^8+p^8(-2+q^2)+2p^4q^4(-2+q^2)+q^6(-1+q^2)^2+p^6(1+2q^4)}}$$

Divide[Sqrt[Divide[p^4 q^4 (p^2 - q^2)^2, p^4 + q^4]],
Sqrt[p^{10} + p^2 q^8 + p^8 (-2 + q^2) + 2 p^4 q^4 (-2 + q^2) +
q^6 (-1 + q^2)^2 + p^6 (1 + 2 q^4)]]


and am asking whether there is a way to have Mathematica reduce it using the relation $\;q^2+p^2=1$.

• I am using Mathematica to do some tedious derivatives for me where the functions involved depend on arbitrary constants $a,b$ subject to to the relation $a^2+b^2=1$ which I feel will simplify my results. I was wondering if there is any way to declare this relation in Mathematica so that it may reduce the output, if possible. Jan 31 '14 at 23:07
• Related or a duplicate: How Can I use Solve/Reduce Output Jan 31 '14 at 23:11
• This is unclear what you mean by declaring. Simplifying, reducing, solving, substituting, etc. Jan 31 '14 at 23:23
• Not really, this isn't how people normally work in Mathematica, and there's no way to declare such a relation. This is why people think that your question is confusing. (To be fair, \$Assumptions is similar to what you describe, but it probably won't help you much.) To make the question clear: give examples of calculations that you want to do with a and b and explain how you need to use the relationship between a and b in those calculations. The answer to you question will depend on precisely what sorts of calculations you need to do and how this relationship will be used. Jan 31 '14 at 23:41
• please include the mathematica code for your expression. It might be possible and I (and others) might be willing to take a stab at answering it, but I am certainly not willing to enter that expression by hand into mathematica syntax.
– rm -rf
Feb 1 '14 at 3:15

There are many possible ways to tackle this task.

expr = Sqrt[ ((p^4 q^4 (p^2 - q^2))/(p^4 + q^4))]/Sqrt[ p^10 + p^2 q^8
+ p^8 (-2 + q^2) + 2 p^4 q^4 (-2 + q^2) + q^6 (-1 + q^2)^2 + p^6 (1 + 2 q^4)];


Standard approach uses simplification techniques like Simplify or FullSimplify, the latter appears to be unnecessary here. Let's use the former function:

Simplify[ expr, p^2 + q^2 == 1]

 Sqrt[(p^4 q^4 (1 - 2 q^2))/(p^4 + q^4)]/Sqrt[q^2 - 5 q^4 + 8 q^6 - 4 q^8]


So we've got a slightly simplified expression, however one might be still dissatisfied with this result. Althoug one could play with ComplexityFunction but we provide another direct way using Eliminate and exploiting a formal variable a to eliminate q:

Eliminate[{expr == a, p^2 + q^2 == 1}, q]

a^2 (-1 + 4 p^2 - 6 p^4 + 4 p^6) == p^2 (1 - p^2)


So we have an expression a^2 (i.e. expr^2) written in terms of p. Let's now eliminate p:

Eliminate[{expr == a, p^2 + q^2 == 1}, p]

a^2 (-1 + 4 q^2 - 6 q^4 + 4 q^6) == q^2 (-1 + q^2)


We can also use Simplify with a replacement rule exploiting a simple pattern, i.e. substituting all even powers of p with an expression involving only q:

Simplify[ expr /. p^b_?EvenQ /; b > 0 -> (1 - q^2)^(b/2)]

Sqrt[-((q^4 (-1 + q^2)^2 (-1 + 2 q^2))/(1 - 2 q^2 + 2 q^4))]/Sqrt[q^2 - 5 q^4
+ 8 q^6 - 4 q^8]

• My problem was in using only one equals sign, believe it or not. Thanks for your help, you saved me a bunch of time. Feb 1 '14 at 0:36
• @D.Clark That's why you should always post your code here! Feb 1 '14 at 5:05

This is a slightly corrected version of code I and others have used in MathGroup, StackOverflow, and MSE. It is at heart a recursive PolynomialReduce.

replacementFunction[expr_, rep_, vars_] :=
Module[{num = Numerator[expr], den = Denominator[expr],
If[PolynomialQ[num, vars] &&
PolynomialQ[den, vars] && ! NumberQ[den],
replacementFunction[num, rep, vars]/
replacementFunction[den, rep, vars],
If[hed === Power && Length[expr] == 2,
base = replacementFunction[expr[], rep, vars];
expon = replacementFunction[expr[], rep, vars];
PolynomialReduce[base^expon, rep, vars][],
MemberQ[Attributes[Evaluate[hed]], NumericFunction],
Map[replacementFunction[#, rep, vars] &, expr],
PolynomialReduce[expr, rep, vars][]]]]]


On your example it will eliminate a variable. Whether this is useful depends on what you really require.

expr = Sqrt[((p^4 q^4 (p^2 - q^2))/(p^4 + q^4))]/
Sqrt[p^10 + p^2 q^8 + p^8 (-2 + q^2) + 2 p^4 q^4 (-2 + q^2) +
q^6 (-1 + q^2)^2 + p^6 (1 + 2 q^4)];

replacementFunction[expr, p^2 + q^2 - 1, {p, q}]

(* Out= Sqrt[-((q^4 (-1 + q^2)^2 (-1 + 2 q^2))/(
1 - 2 q^2 + 2 q^4))]/Sqrt[-q^2 (-1 + q^2) (-1 + 2 q^2)^2] *)