"Transparency" with respect to differentiation

*To*: mathgroup at smc.vnet.net*Subject*: [mg73846] "Transparency" with respect to differentiation*From*: Martin Schoenecker <ms_usenet at gmx.de>*Date*: Fri, 2 Mar 2007 06:23:26 -0500 (EST)*Organization*: Technische Universitaet Darmstadt

I would like to use a dummy object, that has the only task to mark its argument function. So I could use a previously undefined symbol for that pupose: In[1]:= quat[f[x]+g[x]] Out[1]= quat[f[x]+g[x]] Now I would like this flag to distribute over Plus: each element in the argument sum has the property of being "quat": In[2]:= quat[a_+b_]:=quat[a]+quat[b] quat[f[x]+g[x]+h[x]] DownValues[quat] Out[3]= quat[f[x]]+quat[g[x]]+quat[h[x]] Out[4]= {HoldPattern[quat[a_+b_]]\[RuleDelayed]quat[a]+quat[b]} So this property is stored as DownValue of quat. Then, I would like the quat to be transparent with respect to differentiation, and I thought it would be a good idea to store this property as an UpValue for quat rather than changing the (Protected!) D: In[6]:= quat/:D[quat[fun_],var__]:=quat[D[fun,var]] D[quat[f[x]],x] Out[7]= quat[f'[x]] which seems to work alright. However, a combination requiring both properties does not work easily, the derivative of quat w.r.t. its argument is produced: In[8]:= D[quat[f[x] + g[x]], x] (D[#1, x] &)/@quat[f[x] + g[x]] Out[8]= f'[x] quat'[f[x]] + g'[x] quat'[g[x]] Out[9]= quat[f'[x]] + quat[g'[x]] So how could I define an object, distributing over Plus and transparent w.r.t. differentiation more conveniently? And, additionaly, how could I define a standard form of this object, that returns a 'nicer' version (however maybe a bit less unambiguous), like the integrate sign appearing when asking for Integrate? My attempts to understand TagBox and InterpretationBox (if these constructs would help) were fruitless until now. Regards, Martin

**Follow-Ups**:**Re: "Transparency" with respect to differentiation***From:*Carl Woll <carlw@wolfram.com>