# Abstraction In Math (Sage) vs Programming (Sage)

Is there a formal framework for easily sharing mathematical abstractions in Sage?

Let me clarify that question:

Sage occupies a critical boundary between math and programming which puts it a uniquely powerful scientific position as programming may be viewed as an empirical ground for pure theory, ie: math.

In particular, the notion of "abstraction" appears central to both math and programming but its treatment in Sage seems ad hoc.

What got me thinking about this is my attempt to locate a Sage vector field divergence function for use in physics modeling. The egregiously inadequate response given to those requesting such an operator is "it is very easy to implement". If its so easy to implement, then why, after a decade of Sage development by hundreds if not thousands of people, is it still absent?

This, then, got me thinking about the abstract nabla operator in which it is "very easy to implement" divergence given another abstract operator called the dot product. By "abstract" I mean something different from "abstract" in computer programming: The vector calculus operators can be defined in a manner that abstracts away any particular coordinate system, resulting in a vector identities that can, and should be used to transform formulas without regard to their "representation" in a particular coordinate system. Such families of abstract vector identities, as they are not dependent on choice of coordinate system, should be defined in terms of the abstract nabla operator -- not in terms of its relation to any particular coordinate system.

There are coordinate-free systems such as geometric algebra in which one, presumably, could define the abstract nabla operator, thence, the abstract identities of, say, 3D vector calculus. Even though there is a sympy module for geometric algebra, and one could, thereby define the standard vector operators in the abstract, I haven't located a clear construct under Sage (or any computer aided symobolic math system) that lets one construct hierarchies of abstract identities, as such, that then permit symbolic optimization of expressions prior to degenerating to a particular coordinate system demanded by output format (say a cartesian graph of a function surface).

If one had such a formal system for abstraction, it might make it easier for people to, within that formal system, "very easily implement" -- AND SHARE -- missing pieces of the world of mathematics, such as the divergence operator of vector calculus so often used by physicists and engineers.

I don't have any particular knowledge of such things, but I believe that some of the other systems (notably Axiom/Fricas) have worked a

loton such abstractions.That said, it turns out that Sage

doeshave div and curl, apparently: http://trac.sagemath.org/ticket/3021