       Metastable expressions in Mathematica

• To: mathgroup at smc.vnet.net
• Subject: [mg119622] Metastable expressions in Mathematica
• From: David Bailey <dave at removedbailey.co.uk>
• Date: Tue, 14 Jun 2011 06:14:44 -0400 (EDT)

```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:= Clear[f]

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

Out= g[f[a]]

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

In:= test

Out= g[f[a]]

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

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

In:= test

Out= 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:= Clear[f]

In:= switch = False;

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

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

Out= g[f[a]]

In:= switch = True;

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

In:= test

Out= g[f[a]]

Some processes obviously cause complete evaluation:

In:= Uncompress[Compress[test]]

Out= g[a^2]

Others, rather surprisingly, do not!

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

(Dialog) Out= 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
http://www.dbaileyconsultancy.co.uk

```

• 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