# Operations on ComposedFunctions using Symbolics.jl and in Julia in general

**URL:** https://discourse.julialang.org/t/operations-on-composedfunctions-using-symbolics-jl-and-in-julia-in-general/90309
**Category:** Performance
**Tags:** question, package
**Created:** [November 15, 2022, 6:31pm UTC](https://discourse.julialang.org/t/operations-on-composedfunctions-using-symbolics-jl-and-in-julia-in-general/90309 "2022-11-15T18:31:56Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![MattM](https://avatars.discourse-cdn.com/v4/letter/m/c89c15/32.png) [@MattM](https://discourse.julialang.org/u/MattM)
#### Post date: [November 15, 2022, 6:31pm UTC](https://discourse.julialang.org/t/operations-on-composedfunctions-using-symbolics-jl-and-in-julia-in-general/90309/1 "2022-11-15T18:31:56Z")

</div>

Hello,  
I am using Symbolics.jl for a project, and would like to play around with the Operator structure.  
In particular, I would like to build operators such as a Lie operator, defined as  
:f: = \frac{\partial f}{\partial x\_1} \frac{\partial}{\partial x\_2} - \frac{\partial f}{\partial x\_2} \frac{\partial}{\partial x\_1} .  
However, I have issues coming from the fact that any product involving a `Differential` operator becomes a composition and that Julia `ComposedFunction`s cannot be summed/subtracted…  
The solution I am employing now is to create `Operator`s substructures for every needed operation (\pm, \*, /, \circ…). Here is an example

```julia
struct Sum <: Operator
    O1 :: Operator
    O2 :: Operator
end
(O::Sum)(x::Num) = O.O1(x) + O.O2(x)
Base.:+(O1::Operator, O2::Operator) = Sum(O1, O2)

```

I have the impression however that these recursive calls to operators is causing severe performance issues, in particular when I exponentiate the Lie Operator with  
e^{:f:} = \sum\_{k=0}^N \frac{{:f:}^k}{k!}  
Is there a clever, more efficient way to define these operations?
