# How to prevent simplification from Times to Power?

By default, Mathematica simplifies Times[f[x],f[x]] as Power[f[x],2]. In most cases it's fine, but I happen to have a code where this rule is particularly annoying.

Is it possible to modify the behavior of Times so that this rule is not applied for a particular type of argument (let's call it g) i.e. Times[g[x],g[x]] is kept unchanged, but Times[a,a] becomes Power[a,2] if a is a Symbol (or anything except g).

Thank you for your help.

Edit : Sorry if I was unclear. I would like this behavior to be applied automatically everywhere in the session. For example, I can modify Times by doing :

Unprotect[Times]
Times[a_g,a_g]:=Defer[Times[a,a]]
Protect[Times]


This work fine, because Times[f[x],f[x]] becomes f[x]^2, and Times[g[x],g[x]] does not change. But with this trick, I'm stuck with the ugly FullForm Defer[Times[g[x],g[x]]], which will mess up my pattern matchings. What I'd really like to do is remove a rule from Times, instead of adding one.

• Unevaluated, Hold, HoldPattern and appropriate use of Pattern matching seems like the crudest solution I can think of. Also 98874 seems useful. – Sektor Dec 5 '17 at 16:16
• I think those functions will only prevent the evaluation temporary. At some point I will have to ReleaseHold and Times[g,g] will transform. Unless I can use those after unpotecting Times. But I still don't see how. – bernihl Dec 5 '17 at 16:54
• There may be a way in your particular use-cases. Without more of the context, we'll probably just be guessing like Sektor. That is, if anyone wants to take the trouble to guess. – Michael E2 Dec 5 '17 at 17:06
• Have you solved this problem? I am facing the same issue – apt45 Jun 20 '19 at 12:29

## 1 Answer

Assuming that you want only powers of g handled differently,

unique /: Power[unique[x_], n_Integer?Positive] :=
Inactive[Times] @@ ConstantArray[g[x], n]

grule = g -> unique;

expr1 = g[x]^3 /. grule


expr1 // Activate

(* g[x]^3 *)

expr2 = g[3 y + z]^2 /. grule


expr2 // Activate

(* g[3 y + z]^2 *)

• Thank you for you help. I was thinking of a more permanent modification that is applied automatically. I edited my question to make it clear. – bernihl Dec 6 '17 at 9:56