Re: Re: General--Exponential simplifications by default

*To*: mathgroup at smc.vnet.net*Subject*: [mg69133] Re: [mg69073] Re: General--Exponential simplifications by default*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Wed, 30 Aug 2006 06:35:46 -0400 (EDT)*References*: <2219B7076306D04492C4696EC5C9401C680001@PE-MAIL.pe.tamu.edu>*Sender*: owner-wri-mathgroup at wolfram.com

The problem is that you are using the word "evaluate" in a different sense than the normal sense used in the context of functional programming languages and computer algebra systems. In this normal usage all "simplifications" (your words) performed by "the Evaluator" are "evaluations" and their results are "values" of the input expressions. Simplify is, something quite different - a function applied by the user with its own semantics and its own evaluation sequence, quite separate from what the "Evaluator" does. For example, the expression 2/3 when entered into Mathematica has FullForm FullForm[Hold[2/3]] Hold[Times[2,Power[3,-1]]] but the Evaluator evaluates this to: FullForm[2/3] Rational[2,3] This is normally described by saying that the value of Times[2,Power [3,-1]] in Mathematica is Rational[2,3]. There are many such cases in Mathematica and what you have come across are just some of them. This is completely analogous to what you find in other functional languages (like Lisp) where you have to carefully distinguish between unevaluated expressions and their "values". (In Lisp you use the quote sign to make this distinction). All of this is standard staff and can be found in every book on functional languages etc. Andrzej Kozlowski On 29 Aug 2006, at 18:27, Valko, Peter wrote: > Andrzej: > > You tried to convince me that Denominator[] and Numerator[] evaluates > its argument in a standard way and then they find the positive and > negative powers. > I tried to convince you, that Denominator[] and Numerator[] do > something > more: practically intermitting a Simplify[] operation before really > getting to do the real job. > Proof: > > If I write > 1/Sqrt[2] > or I write > Evaluate[1/Sqrt[2]] > I still get > 1/Sqrt[2] (in input form) or Power[2,Rational[-1,2]] (in full form). > > However, when I ask for > Numerator[1/Sqrt[2]] > I get > Sqrt[2] (in input form) or Power[2, Rational[1, 2]] (in full form) > so "it is pretty clear" that Numerator[] and Denominator[] are doing > something secret after evaluating the argument and before really > finding > the Numerator and Denominator. > > Your "solution" suggesting to use > Numerator[Unevaluated[1/Sqrt[2]]] > does something else than just preventing the evaluation of > 1/Sqrt[2] > (because we already agreed that the evaluation does not do anything to > the expression 1/Sqrt[2]). > What it really prevents is the simplification of the unevaluated or > the > evaluated expression, because (I guess) an Unevaluated[expression] is > left intact by Simplify[]. > > > Or am I missing something? > > > > > -----Original Message----- > From: Andrzej Kozlowski [mailto:akoz at mimuw.edu.pl] To: mathgroup at smc.vnet.net > Sent: Tuesday, August 29, 2006 10:32 AM > To: p-valko at tamu.edu > Cc: mathgroup at smc.vnet.net > Subject: [mg69133] Re: [mg69073] Re: General--Exponential simplifications by > default > > Pro* The statement about FullForm you are quoting is "true", at best, > only in a "certain sense": > FullForm does "not affect" evaluation "inside" FullForm, as in: > > FullForm[2^2]//InputForm > > FullForm[4] > > But of course it does affect evaluation "outside" FullForm, as in: > > > FullForm[2]^2//InputForm > > > FullForm[2]^2 > > This is the reason why you also get: > > > {Numerator[#],Denominator[#]}&@FullForm[2/3]//InputForm > > > {FullForm[2/3], 1} > > which I think makes pretty clear what happened also in your example. > > Andrzej Kozlowski > > > > On 29 Aug 2006, at 08:26, p-valko at tamu.edu wrote: > >> Thanks and basically I agree. However, a funny side effect is the >> following: >> >> Denominator[Exp[x] /. x -> -2 ] >> gives >> E^2 >> >> but >> >> Denominator[FullForm[Exp[x]] /. x -> -2 ] gives >> 1 >> >> In other words, wrapping the FullForm around an expression changes >> its > >> "meaning". >> This contradicts the statement that >>>> FullForm acts as a "wrapper", which affects printing, but not >>>> evaluation.<< >> Or am I missing something? >> >> >> >> Andrzej Kozlowski wrote: >>> I do not consider any of these examples "a contradiction". What >>> needs > >>> to be understood is the difference between certain Mathematica >>> expressions before and after they are evaluated. In the case of your >>> examples consider: >>> >>> >>> Numerator[Unevaluated[Exp[-x]]] >>> >>> E^(-x) >>> >>> vs >>> >>> Numerator[Exp[-x]] >>> >>> 1 >>> >>> >>> Numerator[Unevaluated[1/Sqrt[2]]] >>> >>> 1 >>> >>> vs >>> >>> Numerator[1/Sqrt[2]] >>> >>> Sqrt[2] >>> >>> The cause of the apparent problem is that Numerator does not hold >>> its > >>> argument, so whiteout Unevaluated you are getting the numerator of >>> the whatever your expression evaluates to, not of your actual input. >>> TO get the latter you simply need to use Unevaluated. This is no >>> different from: >>> >>> >>> Numerator[3/6] >>> >>> 1 >>> >>> Numerator[Unevaluated[3/6]] >>> >>> 3 >>> >>> If this is not a contradiction than neither are the other examples. >>> Understanding the process of evaluation is perhaps the most >>> important > >>> thing when using functional languages (not just Mathematica, the >>> same > >>> sort of things occur, perhaps in an even more striking way, in >>> languages like Lisp ). >>> >>> Andrzej Kozlowski >>> >>> >>> >>> On 27 Aug 2006, at 07:24, p-valko at tamu.edu wrote: >>> >>>> Daniel, >>>> Could you tell me why the contradiction?: >>>> >>>> In[14]:=Exp[-x]//InputForm >>>> Out[14]//InputForm=E^(-x) >>>> >>>> In[15]:=Numerator[Exp[-x]]//InputForm >>>> Out[15]//InputForm=1 >>>> >>>> Mathematica automatically turns it into Power[E, Times[-1, x]], but >>>> the user beleives that the exponent is in the numerator. >>>> What you see is not what you get! >>>> >>>> >>>> My favorite contradiction is the following: >>>> >>>> In[24]:=Numerator[1/Sqrt[2]]//InputForm >>>> Out[24]//InputForm=Sqrt[2] >>>> >>>> In[25]:=Denominator[1/Sqrt[2]]//InputForm >>>> Out[25]//InputForm=2 >>>> >>>> I think "Numerator" and "Denominator" should not be allowed to do >>>> whatever they want. Too much liberty here... >>>> >>>> Peter >>>> >>>> >>>> Daniel Lichtblau wrote: >>>>> guillaume_evin at yahoo.fr wrote: >>>>>> Hi ! >>>>>> >>>>>> I want to avoid simplifications when Mathematica integrates >>>>>> expressions with exponential terms. For example, I have : >>>>>> >>>>>> In[8]= Espcond[y_] = Integrate[x*Densx[x, y], {x, 0, >>>>>> Infinity}, Assumptions -> alpha > 0] >>>>>> Out[8]= E^(-2eta y)(-theta + E^(eta y)(2+theta))/(2alpha) >>>>>> >>>>>> I do not want to have a factorization by E^(-2eta y). More >>>>>> precisely I would like to have the following result: >>>>>> Out[8]= (-theta E^(-2eta y)+ E^(-eta y)(2+theta))/(2alpha) >>>>>> >>>>>> I guess there is a way to tackle this problem with >>>>>> "ComplexityFunction" and "Simplify", but I tried different things >>>>>> such as "ComplexityFunction -> (Count[{#1}, Exp_, ∞] &)" in >>>>>> the "Simplify" function but no change appears. >>>>>> >>>>>> Is someone could give me some tricks on how tu use the >>>>>> "ComplexityFunction" ? >>>>>> >>>>>> Thank you in advance. >>>>>> >>>>>> Guillaume >>>>>> >>>>>> Link to the forum page for this post: >>>>>> http://www.mathematica-users.org/webMathematica/wiki/wiki.jsp? >>>>>> pageName=Special:Forum_ViewTopic&pid=12974#p12974 >>>>>> Posted through http://www.mathematica-users.org [[postId=12974]] >>>>> >>>>> >>>>> Could Collect with respect to powers of the exponential. >>>>> >>>>> In[59]:= ee = E^(-2eta*y)*(-theta + E^(eta*y)(2+theta))/(2*alpha); >>>>> >>>>> In[60]:= InputForm[Collect[ee, Exp[eta*y]]] Out[60]//InputForm= >>>>> -theta/(2*alpha*E^(2*eta*y)) + (2 + theta)/(2*alpha*E^(eta*y)) >>>>> >>>>> Daniel Lichtblau >>>>> Wolfram Research >>>> >> >