# Computer algebra systems materials

**URL:** https://discourse.julialang.org/t/computer-algebra-systems-materials/58064
**Category:** Specific Domains
**Tags:** symbolic
**Created:** [March 27, 2021, 1:48am UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064 "2021-03-27T01:48:47Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![KZiemian](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kziemian/32/9020_2.png) [@KZiemian](https://discourse.julialang.org/u/KZiemian)
#### Post date: [March 27, 2021, 1:48am UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/1 "2021-03-27T01:48:47Z")

</div>

[Announcement](https://discourse.julialang.org/t/ann-symbolics-jl-a-modern-computer-algebra-system-for-a-modern-language/) of Symbolics.jl bring attention of many people and starts many lively discussion on Discourse and beyond, about Computer Algebra Systems (CAS). In this discusion casual many papers, blog post, talks on YouTube, already existing CAS implementations etc., were mentioned and they links posted, but finding one of them now can be a bit of the challenge.

Since this topic is important and looks like a source of fun, for convenience for people who want to learn more about computer algebras systems, as myself, I try to collect in this post as many of this materials as I can. I hope that someone find this list useful.

I also want to mention two acronyms, that can be found in [announcement thread](https://discourse.julialang.org/t/ann-symbolics-jl-a-modern-computer-algebra-system-for-a-modern-language/56251/67): SCAS = Scientist’s Computer Algebra System, MCAS = Mathematician’s Computer Algebra System. As @dimpase point out such distinction is in many ways harmful, but we will probable use it a lot.

When I didn’t know how order some entries in one of the lists, I just use to them alphabetic order. In the future I will try to improve this post.

Also I apologize for all errors in my English.

Papers

- Bertrand Russell [_On Denoting_](http://bactra.org/Russell/denoting/), see also Wikipedia page of this [work](https://en.wikipedia.org/wiki/On_Denoting),
- Yingbo Ma, et al. [_ModelingToolkit: A Composable Graph Transformation System For Equation-Based Modeling_](https://arxiv.org/abs/2103.05244),
- Alessandro Cheli [_Metatheory.jl: Fast and Elegant Algebraic Computation in Julia with Extensible Equality Saturation_](https://arxiv.org/abs/2102.07888),
- Jacques Carette, William M. Farmer [_Towards Specifying Symbolic Computation_](https://arxiv.org/abs/1904.02729),
- Richard Fateman [_Essays in algebraic simplification_](https://web.archive.org/web/20060917023934/http://www.lcs.mit.edu/publications/specpub.php?id=663),
- Richard Fateman [_Algorithm Differentiation in Lisp: ADIL_](https://people.eecs.berkeley.edu/~fateman/papers/ADIL.pdf),
- Peter Fritzson [_MetaModelica – A Symbolic-Numeric Modelica Language and Comparison to Julia_](https://ep.liu.se/en/conference-article.aspx?series=ecp&issue=157&Article_No=30),
- Paul S. Wang [_Evaluation of definate integrals by symbolic manipulation_](https://dspace.mit.edu/handle/1721.1/127944),
- [Papers about Cadabra](https://cadabra.science/papers.html),
- Sören Laue, Matthias Mitterreiter and Joachim Giesen [_Computing Higher Order Derivatives of Matrix and Tensor Expressions_](http://www.matrixcalculus.org/matrixcalculus.pdf),
- Papers of James Davenport, Robert Corless and David Jeffrey written together and in various combinations w/co-authors, about identities for function of complex variable; e.g. Robert M. Corless, et. al [_Reasoning About the Elementary Functions of Complex Analysis_](https://www.researchgate.net/publication/2409915_Reasoning_About_the_Elementary_Functions_of_Complex_Analysis),
- [MathScheme publications](http://www.cas.mcmaster.ca/research/mathscheme/publications.html), especial papers under number 1, 3 and 4.

Non-open access papers

- Robert M. Corless, David J. Jeffrey [_The unwinding number_](https://dl.acm.org/doi/abs/10.1145/235699.235705),
- Robert H.C.Moir, Robert M.Corless, David J.Jeffrey [_An unwinding number pair for continuous expressions of integrals_](https://www.sciencedirect.com/science/article/abs/pii/S0747717120300456?via%3Dihub).

Talks and presentations

- Harrison Grodin [_Symbolic Manipulation in Julia_ (JuliaCon2019)](https://www.youtube.com/watch?v=bGYSae90hA0),
- John Lapyre [_Symbolic Mathematics in Julia_ (JuliaCon 2018)](https://www.youtube.com/watch?v=M742_73edLA), see also PDF of [presentation](https://github.com/jlapeyre/JuliaCon2018LapeyreTalk),
- Moshe Vardi [_Progress in Symbolic Satisfiability Solving_](https://www.youtube.com/watch?v=fmgj85emb4s).

Blog posts

- Christopher Rackauckas [_Generalizing Automatic Differentiation to Automatic Sparsity, Uncertainty, Stability, and Parallelism_](https://www.stochasticlifestyle.com/generalizing-automatic-differentiation-to-automatic-sparsity-uncertainty-stability-and-parallelism/),
- Jacques Carette [_Symbolic Computation_](http://mechanizedmathematics.blogspot.com/2018/04/symbolic-computation.html),
- Garron Fish, Sas Harrison [_Introduction to the model translation and symbolic processing_](https://www.claytex.com/tech-blog/model-translation-and-symbolic-manipulation/),
- Fredrik Johansson [_Computing with metavalues_](https://fredrikj.net/blog/2021/02/computing-with-metavalues/),
- Fredrik Johansson [\* Printing algebraic numbers\*](https://fredrikj.net/blog/2021/03/printing-algebraic-numbers/),
- Albert D. Rich [_Organizing Math as a Rule-based Decision Tree_](https://rulebasedintegration.org/vision.html).

Books

- Gerald Jay Sussman and Jack Wisdom with Meinhard E. Mayer [_Structure and Interpretation of Classical Mechanics_](https://groups.csail.mit.edu/mac/users/gjs/6946/sicm-html/book.html).

Parts of documentations

- [Assumptions — SymPy 1.7.1 documentation](https://docs.sympy.org/latest/modules/assumptions/index.html),
- [Refine — SymPy 1.7.1 documentation](https://docs.sympy.org/latest/modules/assumptions/refine.html),
- [Assumptions — Wolfram Language Documentation](https://reference.wolfram.com/language/ref/Assumptions.html).

Computer Algebra Systems

- [Agda](https://wiki.portal.chalmers.se/agda/pmwiki.php),
- [Aldor](https://www.aldor.org/),
- [Axiom](http://axiom-developer.org/),
- [FriCAS](http://fricas.sourceforge.net/),
- [GAP](https://www.gap-system.org/), (Groups, Algorithms, Programming) a System for Computational Discrete Algebra,
- [Hecke.jl](https://github.com/thofma/Hecke.jl)
- [Maple](https://www.maplesoft.com/),
- [Mathematica](https://www.wolfram.com/mathematica/),
- [Maxima](https://maxima.sourceforge.io/),
- [MuPAD](https://de.mathworks.com/discovery/mupad.html), developed at University of Paderborn, Germany, and bought by MathWorks in 2008 and integrated into their Symbolic Math Toolbox,
- [NCAlgebra](https://github.com/NCAlgebra/NC),
- [OSCAR](https://oscar.computeralgebra.de/),
- [polymake](https://polymake.org/doku.php),
- [REDUCE](https://reduce-algebra.sourceforge.io/),
- [SageMath](https://www.sagemath.org/),
- [Singular](https://www.singular.uni-kl.de/),
- [SymEngine](https://github.com/symengine/symengine.github.io),
- [YACAS](http://www.yacas.org/),
- [Z3](https://github.com/Z3Prover/z3/).

Julia wrappers for Computer Algebra Systems

- [Maxima.jl](https://github.com/nsmith5/Maxima.jl),
- [Reduce.jl](https://github.com/chakravala/Reduce.jl),
- [SymEngine.jl](https://github.com/symengine/SymEngine.jl),
- [SymPy.jl](https://github.com/JuliaPy/SymPy.jl),
- [Z3.jl](https://github.com/ahumenberger/Z3.jl).

Various things

- Christopher Rackauckas account of [history of Symbolics.jl](https://discourse.julialang.org/t/ann-symbolics-jl-a-modern-computer-algebra-system-for-a-modern-language/56251/54),
- [AbstractAlgebra.jl](https://github.com/wbhart/AbstractAlgebra.jl),
- [egg: e-graph good](https://egraphs-good.github.io/),
- [Hakaru](https://github.com/hakaru-dev/hakaru),
- [Matrix Calculus](http://www.matrixcalculus.org/),
- [MultiLisp](https://en.wikipedia.org/wiki/MultiLisp),
- [msolve](https://msolve.lip6.fr/team/index.html),
- [Nemo](http://nemocas.org/),
- [The RegularChains Library](http://www.regularchains.org/),
- [Symbolic Math: try a translation of Axiom to Julia?](https://groups.google.com/g/julia-dev/c/NTfS9fJuIcE/m/CHQWJcMc1JsJ?pli=1)

People that made/recommended these materials in alphabetic order: Christoph Buchner, Jacques Carette, Fredrik Bagge Carlson, Jānis Erdmanis, Richard Fateman, Max Horn, Zdeněk Hurák, John Lapyre, Bernt Lie, Stefan Krastanov, Christopher Rackauckas, David P. Sanders, Chad Scherrer, Philip Zucker.

I apologized everyone who should be on this list, but he or she isn’t on it.

---

<div class="post-metadata">

### Author: ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)
#### Post date: [March 27, 2021, 2:38am UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/2 "2021-03-27T02:38:08Z")

</div>

Another blog

> **[Symbolic Computation](https://mechanizedmathematics.blogspot.com/2018/04/symbolic-computation.html)**
>
> So what is symbolic computation? To better understand what it is, we need to understand the two terms that make up the name: symbolic and co...

---

<div class="post-metadata">

### Author: ![Skoffer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/skoffer/32/378_2.png) [@Skoffer](https://discourse.julialang.org/u/Skoffer)
#### Post date: [March 27, 2021, 5:55am UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/3 "2021-03-27T05:55:22Z")

</div>

Maybe I am missing something, but shouldn’t mapple and mathematica be on that list? Also, why maxima.jl is mentioned? It’s a wrapper to maxima, sure, but almost all other cas from the list have Julia wrappers. May be they should be in a separate list then.

---

<div class="post-metadata">

### Author: ![KZiemian](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kziemian/32/9020_2.png) [@KZiemian](https://discourse.julialang.org/u/KZiemian)
#### Post date: [March 27, 2021, 12:29pm UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/4 "2021-03-27T12:29:21Z")

</div>

Good questions and suggestions. Answers are quite prosaic.

1. Why Mathematica and Maple aren’t on that list? I was thinking that are famous enough, so there is no need to listing them. But on the other hand, all means all, so I will add them to the list.
2. Why is Maxima.jl on the list? After few hours of collecting these links and putting them in order, I need to put this one somewhere and I just post it below link to Maxima. I will make new list of Julia wrappers around CAS and put this link there, thank you for the suggestion.

---

<div class="post-metadata">

### Author: ![KZiemian](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kziemian/32/9020_2.png) [@KZiemian](https://discourse.julialang.org/u/KZiemian)
#### Post date: [March 27, 2021, 2:19pm UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/5 "2021-03-27T14:19:50Z")

</div>

Wikipedia page [_Computer algebra system_](https://en.wikipedia.org/wiki/Computer_algebra_system) have in references @rfateman 1972 thesis [_Essays in algebraic simplification_](https://web.archive.org/web/20060917023934/http://www.lcs.mit.edu/publications/specpub.php?id=663), but since I don’t know if reading it have in 2021 value other than historical, I didn’t put in on the list.

_Update._ Since @rfateman judges his thesis as relevant today, it is now on the list in OP.

---

<div class="post-metadata">

### Author: ![BLI](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bli/32/37206_2.png) [@BLI](https://discourse.julialang.org/u/BLI)
#### Post date: [March 27, 2021, 2:28pm UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/6 "2021-03-27T14:28:37Z")

</div>

For completion:

- MuPAD, developed at University of Paderborn, Germany, and bought by MathWorks in 2008 and integrated into their Symbolic Math Toolbox

There are also various CAS systems in calculators from Texas Instruments, Hewlett Packard, and Casio. But these are relatively lightweight(??) (I think there was a PC version of Derive some years ago, though).

---

<div class="post-metadata">

### Author: ![fingolfin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fingolfin/32/6033_2.png) [@fingolfin](https://discourse.julialang.org/u/fingolfin)
#### Post date: [March 27, 2021, 2:47pm UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/7 "2021-03-27T14:47:05Z")

</div>

There is also the [OSCAR system](https://oscar.computeralgebra.de/) which consists of Oscar.jl and its various related packages AbstractAlgebra, Nemo, Hecke as well as wrapper packages for the external research/specialist CAS GAP, Polymake, Singular.

---

<div class="post-metadata">

### Author: ![rfourquet](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rfourquet/32/3610_2.png) [@rfourquet](https://discourse.julialang.org/u/rfourquet)
#### Post date: [March 27, 2021, 2:54pm UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/8 "2021-03-27T14:54:23Z")

</div>

> [@fingolfin](#):
>
> There is also the [OSCAR system](https://oscar.computeralgebra.de/)

It was menioned in the OP 🙂

---

<div class="post-metadata">

### Author: ![fingolfin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fingolfin/32/6033_2.png) [@fingolfin](https://discourse.julialang.org/u/fingolfin)
#### Post date: [March 27, 2021, 3:57pm UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/9 "2021-03-27T15:57:47Z")

</div>

Sorry somehow missed it. But Singular, Polymake, Hecke, GAP were not

---

<div class="post-metadata">

### Author: ![KZiemian](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kziemian/32/9020_2.png) [@KZiemian](https://discourse.julialang.org/u/KZiemian)
#### Post date: [March 27, 2021, 4:55pm UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/11 "2021-03-27T16:55:56Z")

</div>

Thank you for mentioning these CAS. I have almost no knowledge about this field, outside struggling with Mathematica, so if some CAS wasn’t mentioned in discussion or I overlooked this part, which isn’t that hard, there is almost no chance that it be on the list.

---

<div class="post-metadata">

### Author: ![rfateman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rfateman/32/22507_2.png) [@rfateman](https://discourse.julialang.org/u/rfateman)
#### Post date: [March 27, 2021, 6:14pm UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/12 "2021-03-27T18:14:53Z")

</div>

Hi All –

1. A list of collected references without evaluating them or characterizing them is probably not adding to the knowledge already available by a pointer to Wikipedia. Perhaps if you or others can add annotations like “useful - provides fundamental insights” or “explains some hacks”. it might help.

2. My 1972 thesis is, in my opinion, still relevant; it seems that putting it on or off your list should be based on evaluating its usefulness, not its age.

3. I think it is important to distinguish papers and other material by their intent and context. If we were talking about automobiles, you would distinguish material about “How to drive the Ford model XXX” from “Engineering innovations in the electronic ignition for the Ford model XXX”. Similarly, a paper on CAS system XXX could be about the user-level interface, or it could be about the deep internal design decisions that represent breakthroughs in effectiveness, efficiency, etc.

To be specific, reading the user manual for some copy-cat system [ZZZ is like WWW but is written in C instead of lisp] that provides a modest symbolic mathematics capability is not likely to help understand the frontiers of the system-building challenges.

In some cases, finding and using the best state-of-the-art ideas may depend on quite the opposite end of the spectrum of available information. That is, reading the source code. Or mechanically translating the source code of some system to Julia.

It seemss I’m heading into water that has already been explored … putting together a Julia wrapper and eating the whole other system. Though, putting a wrapper on Maxima may not be the right approach – if it just gives a read-eval-print loop of Maxima. Is that it?

Instead, maybe there can be wrappers around lisp programs like solve, integrate, limit, taylor, simplify, display, plot. That’s how I’ve accessed (from Lisp/Maxima) the capabilities of FFTW, GMP and similar high-quality stuff that I was too lazy (or clever?) to reprogram.

In addition to being able invoke the lisp programs, you would also need to convert data between formats (conceptually, read/write) to/from lisp.

(I say Maxima because I know more about it. You could say the same things about Axiom or other systems.)

This approach would give you a reasonable level of capability without the need to learn all about CAS (I have online graduate course notes … but that doesn’t make you an expert…) and to spend years programming stuff that has already been programmed. Of course if you want to become educated in this area of symbolic math system building, mechanization of mathematics, and its underpinnings, that’s admirable, but it’s not everyone’s cup of tea.  
RJF

---

<div class="post-metadata">

### Author: ![KZiemian](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kziemian/32/9020_2.png) [@KZiemian](https://discourse.julialang.org/u/KZiemian)
#### Post date: [March 27, 2021, 8:14pm UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/13 "2021-03-27T20:14:21Z")

</div>

I agree wholehearted that just listing all things add little to 0 knowledge. My aim was very humble, just add a little bit order to dozens of links that are casually share during discussion and can soon be, for all practical reason, lost in the threads so long that they can rival with Leo Tolstoy’s book. Evaluating them is just beyond my abilities, I can only hope that people with true expertise will comment how to change the list, which one should be added, what removed, what is introduction, what is about deep internals, etc.

Classification by intent and content is orders of magnitudes better than by type of material, no question about, but this was only thing that I was able to do in this moment. And since people keep sharing more and more materials, I decided “Better now than never”.

I never want to suggest that we should evaluate your thesis, or any other work, by its age, this would be sign of enormous hubris. I just don’t have any true knowledge about CAS field, only some practical experience, so I can’t evaluate value of anything. Every other link was posted by someone else and I’m hoping that everyone evaluated material he/she sharing and found it useful. I found your thesis on Wikipedia and I was thinking “I post it in this thread with few words of commentary, so everyone can judge if he/she want to read it.”. Paul Wang’s thesis is a year older, but since you mention it discussion about Symbolics.jl as paper that one should read (at least that how I understood it) I put it without a doubt. I apologized if my post were rude, this was not at all my intention.

---

<div class="post-metadata">

### Author: ![HoyanMok](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hoyanmok/32/32391_2.png) [@HoyanMok](https://discourse.julialang.org/u/HoyanMok)
#### Post date: [December 19, 2023, 10:17am UTC](https://discourse.julialang.org/t/computer-algebra-systems-materials/58064/14 "2023-12-19T10:17:14Z")

</div>

I don’t know if you are still interested in maintaining the list, but…

_Towards a new SymPy_ by Oscar Benjamin  
[https://oscarbenjamin.github.io/blog/czi/index.html](https://oscarbenjamin.github.io/blog/czi/index.html)

I belive these blog posts written by SymPy developer are very informative.  
It reviews many designs in SymPy (and SymEngine).
