Make mathematica treat $e_i^2$ as numeric

Everything depends on what you try to do with this. First you could use Subsuperscript and get rid of one level which is introduced by your Power

Subscript[e,3]^2//FullForm
(* Power[Subscript[e,3],2] *)

Subsuperscript[e,3,2]//FullForm
(* Subsuperscript[e,3,2] *)

Both forms look equally in the front-end, but now you can use TagSet to transform all e with integer-subscript to a different form which displays as it would still be the normal e:

e/:Subsuperscript[e,i_?IntegerQ,2]:=eNumeric[i,2];
e/:Subsuperscript[e,i_,2]:=eNonNumeric[i,2];
SetAttributes[eNumeric,{NumericFunction}];
(Format[#[i_,2]]:=TraditionalForm[Subsuperscript["e",i,2]])&/@{eNumeric,eNonNumeric};

Mathematica graphics


Here is another way: you can fool the depth-1 tag rule for UpValues with a few temporary symbols. Here is an example:

ClearAll[e];
e /: Subscript[e, i_?IntegerQ] := e /: Subscript[e, i] =
  Module[{el},
    el /: el^p_ := el /: el^p =
       Module[{elp},
          elp /: NumericQ[elp] = True;
          Format[elp] := TraditionalForm[Subscript["e", i]^p];
          elp
       ];
    el /: NumericQ[el] = True;
    Format[el] := TraditionalForm[Subscript["e", i]];
    el]

What this does is to substitute Subscript[e, i_?IntegerQ] by some symbol, which will print just as the original one, but will have some rules attached which will do what you need. Now,

NumericQ[Subscript[e,1]]
(* True *)

NumericQ[Subscript[e,1]^2]

(* True *)

The advantage of this method is that it is flexible. You are not tied to just powers of your subscript, it can be easily generalized to other functions.


You can use Notation package to treat anything like function and then set whatever attributes to this function:

enter image description here

The only problem is that Notation don't support test patterns, so to make an expression numeric with only integer indexes:

enter image description here