Re: LessEqual vs Inequality, was ..Re: Replacement Rule with Sqrt in denominator
- To: mathgroup at smc.vnet.net
- Subject: [mg114697] Re: LessEqual vs Inequality, was ..Re: Replacement Rule with Sqrt in denominator
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Mon, 13 Dec 2010 03:53:14 -0500 (EST)
- References: <ie2971$mqh$1@smc.vnet.net> <4D050013.8050105@cs.berkeley.edu> <928BCB32-AEF9-4D13-87E0-BDDACF1BF878@mimuw.edu.pl> <4D055126.6080209@cs.berkeley.edu>
On 12 Dec 2010, at 23:48, Richard Fateman wrote: >>> >> Do you mean a user should not be allowed to enter Less[2,x,3] but always required to use the form Inequality[2,Less,x,Less,3]? > I did not propose to tie the user's hands in this way. >> Or should Less[2,x,3] always evaluate to Inequality[2,Less,x,Less,3]? > That would be my solution,. Is my solution. Indeed, Less[x,y] is simplified to Inequality[x,Less,y] >> (In that case you would still have the same problem if, for some reason, you prevented evaluation). > If I prevented simplification/evaluation, I would presumably not expect much of anything to work. > I can' t think of a reason. First in Mathematica, there are often functions that have attributes HoldAll or Hold First etc, which means that the act on unevaluated arguments. So if an argument was written as Less[x,y] it would not be converted to Inequality[x,Less,y] before pattern matching was applied to it (most Mathematica "functions" are just local pattern matching rules). But much more importantly and, in my opinion, crucially (that was the main point of my reply, but somehow you managed to skirt around so I will now try to make it as explicit as I can): if Less[x,y] was always automatically converted to Inequality[x,Less,y] than clearly LogicalExpand[Inequality[x, Less, y]] would not longer work, and what's worse LogicalExpand[Inequality[x, Less, y, LessEqual, z]] etc. would not work. But that would make it vastly harder to get expressions involving inequalities into a canonical form. As it is now, an expression involve both Inequality[x, Less, y, LessEqual, z] and And[Less[x,y],LessEqual[y,z]] (which is simply x<y&&y<=z). Both of these are equivalent and obviously you would want any patterns to apply to both. As things work now, all you need to do is to use LogicalExpand to replace all expressions with Inequality by canonical forms and you can do unambiguous pattern matching. If your approach were adopted this would not be possible. Instead you would have to pick out all the different x<y and y<=z in your expression, and "simplify" them to a canonical form involving Inequality. But this clearly would a great deal more complex than just applying LogicalExpand. For a start, the expression could involve many conjunctions and disjunctions so that x<y and y<=z would not necessarily appear next to each other, i.e. it could be something like x<y&&...various relations ...y<=z&&... . I think my point should now be clear - what you are proposing would probably greatly increase the complexity of working with inequalities and may well be impracticable. Thus implementing your idea would probably amount to introducing a terrible bug into Mathematica, in your own terminology. Andrzej Kozlowski