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

**Follow-Ups**:**Re: Re: A harmless and amusing bug***From:*Andrzej Kozlowski <akoz@mimuw.edu.pl>