On 3/19/08, Stavros Macrakis <macrakis at alum.mit.edu> wrote:
> On Wed, Mar 19, 2008 at 5:39 PM, van Nek <van.nek at arcor.de> wrote:
> > bit_and(x) => x
> > bit_and(foo(y)) => foo(y)
> > bit_and(x, -x-1) => 0
> > Should these be valid for all x and foo,
> > or do they require that x is declared as integer and foo is declared as
> > integervalued?
>
> As a general rule, Maxima is extremely loose in typechecking. Not only
> does it simplify 0*x => 0, but even 0/x => 0 and "."(x) => x
Well, it's true that Maxima isn't always very careful, but I think
there is still something to gain by being more careful with
new operators (and old ones too, but that is more work).
So I would rather see simplifications of bitwise operators carried
out only if the argument is is known by Maxima to be an integer
(i.e. a literal integer or a symbol or function declared to be integral
or an expression which is demonstrably integral).
> > (%i1) declare(x,even);
> > (%o1) done
> > (%i2) featurep(x,even);
> > (%o2) true
> > (%i3) evenp(x);
> > (%o3) false
>
> This is confusing, I agree. evenp checks for even *literal numbers*:
>
> evenp(floor(x)*2) => false
>
> and featurep has been extended not only to look for features
> explicitly added to objects, but for the property in general:
>
> featurep(floor(x)*2,even) => true
featurep has evolved into a kind of a set membership test for a
few sets including integers, reals, complex numbers, and a few
others. I would like to see a general set membership test, e.g.
is(floor(x)*2 in even_integers), and make featurep just a
declaration test (as it once was, I believe). Of course set
membership is not a simple problem, but we may as well start
talking about what we would like to see.
FWIW
Robert Dodier