MathGroup Archive 1992

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Dot[]->1

  • To: mathgroup at
  • Subject: Re: Dot[]->1
  • From: David Withoff <withoff>
  • Date: Fri, 7 Aug 1992 11:21:32 -0500

>  On simplifying some large expressions via some rules I ended with
>  expressions of the following type:
>  Dot[]+Dot[x,y] .
>  In this expression I would like to replace the first part by 1. So I tried:
>  (Dot[] + Dot[x,y])/.{Dot[]->1}.
>  But the result was not what I expected (1+x.y), but rather
>  1 + 1.x.y   .
>  Can somebody tell me how to do my disired replacement and what happens
>  in the described example?

This is a consequence of Dot having the attribute Flat, and the way
Flat is currently implemented internally.

In[1]:= Dot[] + Dot[x, y] /. Dot[] -> 1

Out[1]= 1 + 1 . x . y

In[2]:= Attributes[Dot]    

Out[2]= {Flat, OneIdentity, Protected}

In[3]:= Unprotect[Dot]; Attributes[Dot] = OneIdentity;

In[4]:= Dot[] + Dot[x, y] /. Dot[] -> 1

Out[4]= 1 + x . y

I've tried this particular change before, and although it's never caused
me any trouble I should add the warning that messing the the attributes of
built-in functions represents an incompatibility and sometimes breaks
other things in ways that can be hard to track down.

Dave Withoff
withoff at

  • Prev by Date: Re: Sorting of pairs
  • Next by Date: Re: Dot[]->1
  • Previous by thread: Re: Dot[]->1
  • Next by thread: Re: Dot[]->1