# How can I prevent exponents from appearing in an expression?

I've found posts dealing with showing/hiding exponents for numbers, like in scientific notation. But what if I have a general expression? I have an expression like this,

p[{1,2}] p[{2,3}]^2 p[{4,5}]


and the exponent is screwing up a replacement rule I'd like to use. I'm sure I could find a workaround but if there's a way to make this appear as

p[{1,2}] p[{2,3}] p[{2,3}] p[{4,5}]


that would make my life much easier. Any ideas?

• What's the replacement you want to do? Maybe you can work around the problem by modifying the replacing rule. Nov 13, 2015 at 8:21
• The replacement is essentially just combining components that have elements in common. So my example would get replaced by p[{1,2,3}] p[{4,5}]. I actually think I've found a way around it, although not in the most elegant way. Nov 13, 2015 at 8:40
• How about this?: Times @@ p /@ Union @@@ Gather[ p[{1, 2}] p[{2, 3}]^2 p[{4, 5}] /. a_^b_ :> a /. HoldPattern@Times[a__] :> Sequence @@@ {a}, Intersection[#, #2] != {} &] Nov 13, 2015 at 8:56
• It is not clear why in your post you say you need the repeating p[{2,3}] while in your comment you show that at the end you don't take into account this repeated element ... ? Nov 13, 2015 at 10:42
• @SquareOne the idea is that the repeated element gets combined into a single element, because even though it's the same it has elements in common. Thanks for your post though. Nov 13, 2015 at 15:08

As was commented, you should probably tell us also about the problematic rule you cannot use but anyway you might be interested in the following approach:

As you (should) know, everything in Mathematica is an expression, in other words it can be expressed as f[x,y,...]

expr = p[{1, 2}] p[{2, 3}]^2 p[{4, 5}]


is actually interpreted as:

FullForm[expr]


Times[p[List[1,2]],Power[p[List[2,3]],2],p[List[4,5]]]

If you are already familiar with replacement rules then you'll certainly understand the following replacement which will transform your expression in a form close to what you'd like:

Given this function:

myTimes[x_, n_Integer] := myTimes @@ ConstantArray[x, n]


see what happens here:

expr /. Power -> myTimes /. Times -> myTimes


myTimes[myTimes[p[{2,3}],p[{2,3}]],p[{1,2}],p[{4,5}]]

Almost done. Let's add the Flat property to function myTimes:

SetAttributes[myTimes, Flat]


and do again the same replacement than previously:

newexpr = expr /. Power -> myTimes /. Times -> myTimes


myTimes[p[{2, 3}], p[{2, 3}], p[{1, 2}], p[{4, 5}]]

That's it. The idea is to work on this new and temporary expression with your set of replacement rules. Then, to go back in real world:

newexpr /. myTimes -> Times


p[{1,2}] p[{2,3}]^2 p[{4,5}]