issues with expression manipulation functions

*To*: mathgroup at smc.vnet.net*Subject*: [mg128267] issues with expression manipulation functions*From*: Alex Krasnov <akrasnov at eecs.berkeley.edu>*Date*: Wed, 3 Oct 2012 03:07:09 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*Delivered-to*: l-mathgroup@wolfram.com*Delivered-to*: mathgroup-newout@smc.vnet.net*Delivered-to*: mathgroup-newsend@smc.vnet.net

In the process of learning Mathematica, I discovered several items of unusual behavior. I would appreciate any clarification. (0) Several expression manipulation functions behave correctly with HoldComplete subexpressions but not with Hold subexpressions. Example: In: Together[1/x+HoldComplete[1]/x] Out: (1 + HoldComplete[1])/x In: Together[1/x+Hold[1]/x] Out: x^(-1) + Hold[1]/x Another example: In: Factor[3+3*HoldComplete[x]+HoldComplete[x]^2, Extension -> {Sqrt[3], I}] Out: ((-3*I + Sqrt[3] - (2*I)*HoldComplete[x])*(3*I + Sqrt[3] + (2*I)*HoldComplete[x]))/4 In: Factor[3+3*Hold[x]+Hold[x]^2, Extension -> {Sqrt[3], I}] Out: (kernel crash) Although the last example is clearly a bug, is there some difference in behavior between HoldComplete and Hold that generally accounts for these issues? The documentation mentions differences with respect to Sequence, Unevaluated, Evaluate, and upvalues. Without knowing the internals of the expression manipulation functions, I fail to see how any of these are relevant here. (1) FactorTerms behaves incorrectly if the independent form is more complex than a symbol and not contained in the expression. Example: In: FactorTerms[x, x^2] Out: Sqrt[x] In my understanding, FactorTerms should always return an equivalent expression. Is this a bug or some sort of undocumented behavior? Does FactorTerms require the independent form to be a symbol? I am using Mathematica 8.0.4 on Windows. Alex