2

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.

bernihl
  • 21
  • 3

1 Answers1

2

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

enter image description here

expr1 // Activate

(* g[x]^3 *)

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

enter image description here

expr2 // Activate

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

EDIT: To have the modification be applied automatically, add the Rule to $Post

$Post := (# /. g -> unique &)

expr = g[x]^3

enter image description here

However, since it is applied automatically, Activate will not cancel the Inactive

expr // Activate

enter image description here

A different symbol must be used to remove the Inactive

expr /. g -> \[FormalG] // Activate

(* [FormalG][x]^3 *)

going back

% /. \[FormalG] -> g

enter image description here

To clear $Post use

$Post =.
Bob Hanlon
  • 157,611
  • 7
  • 77
  • 198
  • 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 06 '17 at 09:56