MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Metastable expressions in Mathematica

Everyone knows that expressions in Mathematica get automatically 
evaluated as far as is possible. Furthermore, most people realise that 
Mathematica must have a way to track changes to the definitions of 
symbols, so as to avoid excessive evaluation.

Here is the typical case:

In[672]:= Clear[f]

In[673]:= test = g[f[a]]

Out[673]= g[f[a]]

'test' contains an expression containing an unevaluated function call to f

In[674]:= test

Out[674]= g[f[a]]

Now we give f a definition, and confirm that Mathematica 'knows' the 
expression held by 'test' needs to be reevaluated:

In[675]:= f[x_] := x^2;

In[676]:= test

Out[676]= g[a^2]

So far as expected, but now we define f in a way that allows it to be 
switched on and off without actually changing its definition:

In[677]:= Clear[f]

In[679]:= switch = False;

In[680]:= f[x_] := x^2 /; switch

In[681]:= test = g[f[a]]

Out[681]= g[f[a]]

In[682]:= switch = True;

Here we see that Mathematica fails to notice that the expression can be 
further evaluated - the expression in 'test' is metastable.

In[683]:= test

Out[683]= g[f[a]]

Some processes obviously cause complete evaluation:

In[684]:= Uncompress[Compress[test]]

Out[684]= g[a^2]

Others, rather surprisingly, do not!

(Dialog) In[687]:= test /. f -> f

(Dialog) Out[687]= g[f[a]]

I don't really consider metastable expression to be a bug - more a 
curiosity - and it would be undesirable to slow Mathematica processing 
to try to fix this.

However, metastable expressions, do give a window into the methods 
Mathematica uses to minimise the reevaluation of expressions. For 
example, it might be interesting to repeat the above 10000 times with 
different symbols, to determine if Mathematica is always consistent in 
this regard.

I have never seen this effect discussed, so I would be interested in 
links to previous discussions, if any.

David Bailey

  • Prev by Date: Re: querries
  • Next by Date: Re: Question with ToExpression
  • Previous by thread: Re: Question with ToExpression
  • Next by thread: Re: Metastable expressions in Mathematica