Re: More /.{I->-1} craziness
- To: mathgroup at smc.vnet.net
- Subject: [mg106203] Re: More /.{I->-1} craziness
- From: Richard Fateman <fateman at cs.berkeley.edu>
- Date: Tue, 5 Jan 2010 01:43:50 -0500 (EST)
- References: <200912300915.EAA17299@smc.vnet.net> <hhhmn8$o9t$1@smc.vnet.net> <hhkjc4$5ag$1@smc.vnet.net> <hhpl4j$9mf$1@smc.vnet.net>
David Bailey wrote: > Richard Fateman wrote: >> Leonid Shifrin wrote: >> ... >> >>> I think that there are not many more objects in Mathematica which are as >>> tricky as <I> or Infinity in terms of pattern-matching. >> >> I agree. >> That's why it can be fixed. >> >> Here's a beginning of a short list for the "we're not just talking >> syntactic replacement-- version of substitution": >> >> If the user says -i --> i, then do Complex[a_,-b_] -> Complex[a,b]. >> If the user says x^2 --> y, then do x^(-2)-> 1/y also. >> >> I assume this list can be enlarged somewhat, and could even be left >> open-ended by user option of some sort. [e.g. should x^2--> y also >> change x^3 to x*y? or to y^(3/2) or ....] >> >> .... >> >>> It would perhaps be nice if such >>> cases were more systematically documented, but they have nothing to do with >>> bugs, >> You are right if you mean "bug in Mathematica implementation of >> intended design" (this is not such a bug). >> >> But there is another concept: >> "bug in Mathematica design, contrary to reasonable mathematical expectation" >> (this IS such a bug). >> > Would you really want to use a system which had been arbitrarily hacked > by well meaning individuals to create exceptions that suited their taste? Are you describing Mathematica here? It seems to me that it is an exception that Head[a+b*I] is Plus, but Head[3+4I] is Complex. > > Perhaps the documentation should make it clearer which operations are > supposed to always perform mathematically valid operations, and which > are meant to operate on the structure of expressions, oblivious to their > meaning. You assume that people read the documentation. This is provably false. I think this is an important distinction. If you pass an > expression to Integrate (say), you expect to get the integral of that > expression back as a result (possibly in symbolic form still involving > an integral sign) - anything else is a bug. Or an error message like "division by zero" or "out of memory". However, other operations - > such as ReplaceAll - are not *defined* mathematically, they are defined > structurally, and as I pointed out earlier, can be used to produce > explicitly invalid expression transformations. > This is obviously not the view of the person who initially posted this question. > Are you really saying that Mathematica doesn't need structural > operations? No. Just that people want other kinds of operations for substitution. This should be obvious from the subject line, I -> -I etc. If it does, why pick on ReplaceAll? Because this is enshrined in the syntax of the user language, and APPEARS (falsely, as it turns out) to be a mathematical operation. RJF