meditor


  meditor is a text editor with symbolic computation capabilities. In the first place, it is intended to solve algebraic equation systems of any degree, with several indeterminates, by computing the Groebner bases of polynomial ideals.

For example, let this system for the indeterminates x, y:

x^2 + y^2 = 4
x*y = 1

We put:

groebner({x^2 + y^2 - 4, x*y - 1}, {x, y})

By selecting the text bloc above and by doing "Math->Expand" in the menu bar (Ctrl+E), we get:

{1-4*x^2+x^4, 4*x-x^3-y}

which allows to find x, then y from x. This operation doesn't calculate the roots, it just writes the equation. For example, it wouldn't give "a = 4/5" but "5*a-4" ("= 0" implied).

Groebner basis computation is explained in more details in the file math_background.


  meditor allows vector and matrix expressions processing. Vectors are noted as {a,b,c} and matrices as {{a,b},{c,d}}.

To illustrate their use, let's put a simple system of linear equations. We write:

matrix(
{{a[0][0], a[0][1]},
{a[1][0], a[1][1]}},{x[0],
                     x[1]})-{b[0],
                             b[1]}

("= 0" implied ; as meditor can't deal with non-commutative operations, it is mandatory to use "matrix(A,B)" instead of "A*B"). By selecting the expression above and by doing "Expand", we get:

{-b[0]+a[0][0]*x[0]+a[0][1]*x[1], -b[1]+a[1][0]*x[0]+a[1][1]*x[1]}

, which allows to write the following input that can be used to solve the linear system:

groebner({-b[0]+a[0][0]*x[0]+a[0][1]*x[1],
-b[1]+a[1][0]*x[0]+a[1][1]*x[1]},
{a[0][0], a[0][1], a[1][0], a[1][1], b[0], b[1], x[0], x[1]})

Other vector and matrix operations are listed in quickref, along with all the functions and operations available in meditor.


  meditor allows polynomial solving:

solve(c+b*x+a*x^2,x)
=
root[0](c, b, a)

, variable substitution:

subst(1/x^2,x,a)
=
1/a^2

, and simplification of expressions using the "Math->Simplify" command in the menu bar (Ctrl+Q):

exp(pi*sqrt(-1))
=
-1

It is often useful to rewrite an expression in term of elementary functions (log, exp, frac, sqrt, implicit roots), using the "Math->Elementary" command (Ctrl+L), before simplifying it. For instance:

cos(x)^2+sin(x)^2
=
(1/2)^2*(1/exp(x*sqrt(-1)))^2+2*(1/2)^2*1/exp(x*sqrt(-1))*exp(x*sqrt(-1))+(1/2)^2*exp(x*sqrt(-1))^2+(1/2)^2*(1/exp(x*sqrt(-1)))^2*sqrt(-1)^2-2*(1/2)^2*1/exp(x*sqrt(-1))*exp(x*sqrt(-1))*sqrt(-1)^2+(1/2)^2*exp(x*sqrt(-1))^2*sqrt(-1)^2
=
1


  As one can see, meditor knows of some usual functions. It can compute derivatives and integrals too, as shown below:

d(cos(f(x)),x)
=
-f'(x)*sin(f(x))

curl(grad(f(x,y,z),{x,y,z}),{x,y,z})
=
{0, 0, 0}

sum(d(exp(x),x,0,i)/i!*(x-0)^i,i,0,4)
=
1+x+x^2*1/2+x^3*1/6+x^4*1/24

integral(1/(1+x^2),x)
=
root[0](1, 0, 4)*log(1-2*x*root[0](1, 0, 4))+root[1](1, 0, 4)*log(1-2*x*root[1](1, 0, 4))


  Another ability of the software is boolean algebra. For it polynomials in Z/2Z are used, by specifying the modulo as the fourth parameter of the "groebner" operation.

0 represents "false", 1 "true", addition an "exclusive or", product an "and".

The statement "a implies b", equivalent to "not a or b", that is "not (a and not b)", is written : a*(1+b) ("= 0" implied).

"sokrates is a man" is written sokrates*(1+man)
"a man is mortal" is written man*(1+mortal)

We put the system:

groebner({sokrates*(1+man),
man*(1+mortal)},
{man, mortal, sokrates},lex,2)

"Expand", we get:

{man+man*mortal, sokrates+man*sokrates, sokrates+mortal*sokrates}

The last equation can be factorized (Ctrl+T) into : (1+mortal)*sokrates, which reads : "sokrates implies mortal".

Other (positive) modulos are also usable.


  Lastly, meditor enables web publishing, using the "File->Export to XHTML" command. The document is exported into a file with the .xhtml extension, near the original  file. One has to enclose each expression to be rendered within "math" tags, like in:

x^2*y^2

This can be achieved using the "Math->toMathML" command on the selected expression.


  The complete syntax of meditor is layed out in the file grammar. The matching between the operations of the "Math" menu and the syntax tokens is as follows:

Expand                Expression
Factorize        Expression
Elementary        Expression
Simplify        Expression
Numeric                Expression
ToJava                EquationOrExpression
ToMathML        EquationOrExpression