LessEqual vs Inequality, was ..Re: Replacement Rule with Sqrt in
- To: mathgroup at smc.vnet.net
- Subject: [mg114707] LessEqual vs Inequality, was ..Re: Replacement Rule with Sqrt in
- From: Richard Fateman <fateman at cs.berkeley.edu>
- Date: Mon, 13 Dec 2010 03:55:04 -0500 (EST)
- References: <ie2971$mqh$1@smc.vnet.net>
On 12/12/2010 2:46 AM, Andrzej Kozlowski wrote: > On 11 Dec 2010, at 07:52, Jack L Goldberg 1 wrote: > >> >> a) Input as typed: 2<==x<==4. Look at its fullform. On my Mac >> running ver. 7 of Mathematica, I get returned, >> LessEqual[2,x,4]. >> >> b) Now type in Reduce[2<==x<==4]. You will get >> Inequality[2,LessEqual,x,LessEqual,4]. >> >> These are are different expressions! How can one program replacement >> rules when one can not be sure of the FullForm? These structures are >> entirely different. Which fullform can one assume is the one Mathematica sees >> in some complicated module wherein one step is a replacement rule? >> >> Jack Goldberg >> Mathematics >> University of Michigan >> > > O.K. but I don't see anything here that in any way contradicts anything that >has been said about the need for > for looking at FullForm before trying pattern matching. Actually, it is als > o an argument against using Copy and Paste. To see that, evaluate > Reduce[2<==x<==4]. Now, copy the output and paste it into another cell >and wrap FullForm around it, then evaluate. You will get LessEqual[2,x,4]. > > I don't see this as a problem, do you? You can certainly match both forms > with a single pattern: > > {2<== x<== 4, Reduce[2<== x<== 4]} /. > (a_)<== x<== (b_) | Inequality[a_, LessEqual, x, LessEqual, b_] :> {a, b} > > {{2, 4}, {2, 4}} > I find it remarkable that you can claim this is a solution. First of all, the original poster said that he was taken by surprise that there are two rather simple expressions where both are simplified, and which print the same, and both have the same meaning, but don't match. Your response is to write a pattern that matches them both by including each as a separate pattern. This is a bug, in my opinion. And there is a way around it, which is to always parse an inequality or equality of more than 2 arguments as inequality. e.g. a==b==c is Inequality(a,Equal,b,Equal,c). I recall doing this when I implemented my parser in Mockmma. Note that one can construct such things in Mathematica, e.g. a<b<=c /. LessEqual-> Less which has FullForm Inequality[a,Less,b,Less,c]. But if you type it in as a<b<c, it is Less[a,b,c]. So you have two items whose 'difference' does not simplify to zero, and which is not simplified by FullSimplify[] to zero. (parenthetically, (3<4) - (5<6) DOES simplify to zero. ) I would be surprised to find other people so accepting of this "solution". RJF