# Approaches to symbolic support in the ecosystem: SymJ, Symbolics, Giac, SymPy, etc

**URL:** <https://discourse.julialang.org/t/approaches-to-symbolic-support-in-the-ecosystem-symj-symbolics-giac-sympy-etc/142887>\
**Category:** General Usage\
**Created:** [November 11, 2026, 6:39pm UTC](https://discourse.julialang.org/t/approaches-to-symbolic-support-in-the-ecosystem-symj-symbolics-giac-sympy-etc/142887 "2026-11-11T18:39:56Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [November 9, 2026, 5:43am UTC](https://discourse.julialang.org/t/approaches-to-symbolic-support-in-the-ecosystem-symj-symbolics-giac-sympy-etc/142887/2 "2026-11-09T05:43:58Z")

</div>

Is there a reason to not take an open source approach and collaborate on projects?

> [@\[ANN\] GruntzLimit.jl, RischIntegrate.jl, RUBISymbolicIntegration.jl, SymJ.jl](https://discourse.julialang.org/t/ann-gruntzlimit-jl-rischintegrate-jl-rubisymbolicintegration-jl-symj-jl/140334/1):
>
> In generalizing [SymbolicIntegration.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/SymbolicIntegration), which implements both rule-based and Risch-based methods, there are two packages. [RUBISymbolicIntegration.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/RUBISymbolicIntegration) can integrate a few more integrals than the RulesBasedMethod of [SymbolicIntegration.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/SymbolicIntegration), but slower. It’s only plus is the extra generality.

Why two rule systems? I mean, we can put agents to copy each other’s rules or… we can just have a repo of rules parsed differently?

> [@\[ANN\] GruntzLimit.jl, RischIntegrate.jl, RUBISymbolicIntegration.jl, SymJ.jl](https://discourse.julialang.org/t/ann-gruntzlimit-jl-rischintegrate-jl-rubisymbolicintegration-jl-symj-jl/140334/1):
>
> [GruntzLimits.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/GruntzLimits) has better coverage (it is on par with [SymPy.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/SymPy) and [Giac.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/Giac)) and better performance than SymbolicLimits on SymbolicUtils types

So we just update SymbolicLimits.jl?

> [@\[ANN\] GruntzLimit.jl, RischIntegrate.jl, RUBISymbolicIntegration.jl, SymJ.jl](https://discourse.julialang.org/t/ann-gruntzlimit-jl-rischintegrate-jl-rubisymbolicintegration-jl-symj-jl/140334/1):
>
> as the `Expr` type is supported in [TermInterface.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/TermInterface) can be used with or without a symbolic package.

The only thing that can be fundamentally different in the symbolic space is the expression representation. But that isn’t something that is better or worse, it’s tailored to different algorithms. The best thing to do is to have a litany of different representations so that different algorithms can use alternative representations. For example, the Groebner basis representation is very different from even the SymbolicUtils.jl one.

So, why is this not just another tree representation with a few algorithms pointing it down that line?

I mean, I can just claude this all to be pulled from these repos, but it seems silly to be wasting tokens like this. Let’s just collaborate? I can start by pulling this all in but, I hope to see a first pull request somewhere. They could even keep separate repos: if GruntzLimits.jl is strictly better, then Symbolics.jl just needs a PR to its docs saying SymbolicLimits.jl is deprecated and point people to use the new limits subpackage, and then we delete the other package.

But I am wondering what isn’t transparently said here: if it all is strictly better… these are the obvious things to do… and you didn’t do that so… why? More directly, what is the expression representation and what are things that are traded off in its choices?

I don’t see anything about function registrations for example, so I assume it must’ve taken a closed tree approach?

---

_[View the full topic](https://discourse.julialang.org/t/approaches-to-symbolic-support-in-the-ecosystem-symj-symbolics-giac-sympy-etc/142887)._
