Re: A harmless and amusing bug

• To: mathgroup at smc.vnet.net
• Subject: [mg76283] Re: A harmless and amusing bug
• From: dimitris <dimmechan at yahoo.com>
• Date: Sat, 19 May 2007 04:31:09 -0400 (EDT)
• References: <f2jtne\$cef\$1@smc.vnet.net>

```I think everything is normal (or quite normal!).

In[23]:=
y = x /. DSolve[Derivative[2][x][t] + 2*Derivative[1][x][t] + x[t] ==
Sin[t], x, t][[1]]
Out[23]=
Function[{t}, C[1]/E^t + (t*C[2])/E^t - Cos[t]/2]

In[24]:=
z = Function[{t}, C[1]/E^t + (t*C[2])/E^t - Cos[t]/2] (*pasted
result*)
Out[24]=
Function[{t}, C[1]/E^t + (t*C[2])/E^t - Cos[t]/2]

In[25]:=
y === z
Out[25]=
False

In[32]:=
LeafCount /@ {y, z}
Out[32]=
{27, 29}

In[33]:=
FullForm /@ {y, z}
Out[33]=
{Function[List[t],Plus[Times[Power[
E,Times[-1,

t]],C[1]],Times[Power[E,Times[-1,t]],t,C[2]],Times[Rational[-1,2],
Cos[t]]]],Function[List[t],Plus[Times[Power[E,Times[-1,t]],C[
1]],Times[Power[E,Times[-1,t]],t,C[2]],Times[-1,Times[Cos[
t],Power[2,-1]]]]]}

The two expressions have different FullForm! So SameQ results in
False.

What I don't understand however is that neither

FullSimplify[y == z]

nor

FullSimplify[y == z, ComplexityFunction -> LeafCount]

returns True as it should be! Something happens here.

Anyway, what is the reason to use paste?

In[34]:=
y1 = x /. DSolve[Derivative[2][x][t] + 2*Derivative[1][x][t] + x[t] ==
Sin[t], x, t][[1]]
Out[34]=
Function[{t}, C[1]/E^t + (t*C[2])/E^t - Cos[t]/2]

In[35]:=
z1 = %
Out[35]=
Function[{t}, C[1]/E^t + (t*C[2])/E^t - Cos[t]/2]

In[36]:=
FullSimplify[y1 == z1]
Out[36]=
True

In[37]:=
y1 === z1
Out[37]=
True

In[38]:=
LeafCount /@ {y1, z1}
Out[38]=
{27, 27}

Dimitris

/  Fred Simons       :
> I found this example in a very old notebook of mine and I do not
> remember if this has already been discussed in this group.
>
> The following seems to be a harmless and amusing bug. It happens both in
> Mathematica 5 and in Mathematica 6 under Windows.
>
> Execute the following command:
>
> y = x /. DSolve[x''[t]+ 2 x'[t]+ x[t]==Sin[t], x, t][[1]]
>
> Copy the result, paste it in the following command and execute.
>
> z =pasted result
>
> Obviously, y equals z. However,
>
> SameQ[y,z] --> False
>
> So here we have an example of two different Mathematica expressions with
> the property that on level 1 all subexpressions are equal:
>
> And @@ Table[y[[i]] === z[[i]], {i, 0,2}] --> True
>
> It also is an example of two different expressions that convert to the
> same string:
>
> Equal[ToString /@ {y,z}] --> True
>
> The expression y has more leaves than can be found at level -1, and
> anyway less than the number of leaves of the expression z:
>
> {LeafCount[#], Length[Level[#, {-1}, Heads->True]]}& /@  {y,z} -->
> {{27,25},{29,29}}
>
> Fred Simons
> Eindhoven University of Technology

```

• Prev by Date: Re: All permutations of a sequence
• Next by Date: Re: Integrate[Log[a]+...+O[a]^n,x]
• Previous by thread: Re: A harmless and amusing bug
• Next by thread: Re: Re: A harmless and amusing bug