[Om] OpenMath @ SCIEnce
Peter Horn
hornp at gmx.de
Sun Feb 17 20:37:25 CET 2008
Hello to the OpenMath Community!
The SCIEnce project (Symbolic Computation Infrastructure for Europe,
http://www.symbolic-computation.org/) brings together the developers of
four powerful symbolic computation software packages (GAP, KANT, Maple
and MuPAD) and a major symbolic computation research institute
(RISC-Linz), and research groups expert in essential underpinning
technologies, to unite the European community of researchers in, and
users of, symbolic computation.
One of the current activitities focuses on connecting different Computer
Algebra Systems in a standardized way. The systems involved in this
activity are:
* GAP (system for computational discrete algebra, with particular
emphasis on Computational Group Theory), CIRCA, St. Andrews,
Scotland.
http://www.gap-system.org/
* KANT (software package for sophisticated computations in number
fields and in global function fields), TU Berlin.
http://www.math.tu-berlin.de/~kant/kash.html
* MuPAD (general purpose CAS, Paderborn)
http://www.sciface.com
* Maple (general purpose CAS, Waterloo, CA)
http://www.maplesoft.com
* Supported by the OpenMath experts at the TU Eindhoven
http://www.win.tue.nl/dw/dam/
The protocol used to communicate between the systems is called SCSCP
(Symbolic Computation Software Composability Protocol). The mathematical
objects are marshalled in XML using OpenMath (http://www.openmath.org).
Working prototypes exist for GAP, KANT, and MuPAD. Also, a Java
framework
was created in order to make it easy for third party developers to
expose
their code to other systems using SCSCP.
Furthermore, there is a web-proxy that offers the capabilities of one or
more of the above systems to SOAP-clients.
This is a demo-session in MuPAD:
*----* MuPAD Pro 4.5.0 -- The Open Computer Algebra System
/| /|
*----* | Copyright (c) 1997 - 2008 by SciFace Software
| *--|-* All rights reserved.
|/ |/
*----*
// load the package
>> package("OpenMath"):
// define some (simple) maths task. hold is required to prevent
// MuPAD from immediately computing the result.
>> A := hold(hold(_plus)(7, 8 ))
hold(_plus)(7, 8 )
// There are scscp-servers running on some remote machines.
// Note: in the setup of the connection, the type of the system is NOT
// specified. They all talk SCSCP.
>> gap := SCSCP("machine1.somewhere.org", 26133):
>> kant := SCSCP("machine2.somewhere-else.org", 26133):
>> mupad := SCSCP("machine3.differentplace.org", 26133):
// now, ask GAP, KANT and the remote MuPAD to compute the task:
>> gap::compute(A)
15
>> kant::compute(A)
15
>> mupad::compute(A)
15
// a slightly more advanced example (extended euclidean algorithm)
>> B := hold(hold(gcdex)(12, 14, 20))
hold(gcdex)(12,14,20)
>> kant::compute(B)
[2, -1, 1, 0]
--------------------- END SESSION ---------------------
OpenMath Package for MuPAD
--------------------------
In the last couple of months I’ve developed an OpenMath Package for
MuPAD for the purpose of his project
A rather early preview of the package can be found here:
* http://symcomp.mathematik.uni-kassel.de/~hornp/OpenMath.zip
* http://symcomp.mathematik.uni-kassel.de/~hornp/OpenMath.tbz
It’s organized as a MuPAD package. So if it can be found on the
PACKAGEPATH, you can use it like this:
--------------------- BEGIN SESSION ---------------------
// load the package
>> package("OpenMath")
// generate::OpenMath creates an adt::XML representing the mathematical
// expression
>> generate::OpenMath(1+a)
<OMOBJ xmlns='http://www.openmath.org/OpenMath'>
<OMA>
<OMS cd='arith1' name='plus'/>
<OMV name='a'/>
<OMI>1</OMI>
</OMA>
</OMOBJ>
// in OpenMath there are definitions how to represent different
// numbers as Complex...
>> generate::OpenMath(3+4*I)
<OMOBJ xmlns='http://www.openmath.org/OpenMath'>
<OMA>
<OMS cd='complex1' name='complex_cartesian'/>
<OMI>3</OMI>
<OMI>4</OMI>
</OMA>
</OMOBJ>
// ...or Rationals.
>> generate::OpenMath(3/4)
<OMOBJ xmlns='http://www.openmath.org/OpenMath'>
<OMA>
<OMS cd='nums1' name='rational'/>
<OMI>3</OMI>
<OMI>4</OMI>
</OMA>
</OMOBJ>
// xml2text is a function to get a compact and fast
// string-representation of an adt::XML
>> xml2text(generate::OpenMath(sin(a+1)^2))
"<OMOBJ xmlns='http://www.openmath.org/OpenMath'><OMA><OMS cd='arith1\
' name='power'/><OMA><OMS cd='transc1' name='sin'/><OMA><OMS cd='arit\
h1' name='plus'/><OMV name='a'/><OMI>1</OMI></OMA></OMA><OMI>2</OMI><\
/OMA></OMOBJ>"
// OM::Parser::pase parses either the given file or the passed String
// if the Option 'String' is given
>> OM::Parser::parse(%, String)
OM::XML::OMOBJ([OM::XML::OMA([OM::XML::OMS(table("name" = "power", "c\
d" = "arith1")), OM::XML::OMA([OM::XML::OMS(table("name" = "sin", "cd\
" = "transc1")), OM::XML::OMA([OM::XML::OMS(table("name" = "plus", "c\
d" = "arith1")), OM::XML::OMV(table("name" = "a")), OM::XML::OMI([OM:\
:XML::Data("1")])])]), OM::XML::OMI([OM::XML::Data("2")])])], table("\
xmlns" = "http://www.openmath.org/OpenMath"))
// the result needs to be evaluated to get the proper MuPAD expression
// (This is done to simplify debugging during development.)
>> eval(%)
sin(a + 1)^2
--------------------- END SESSION ---------------------
Currently, only a couple of domains (mainly expressions, numbers,
polynomials and matrices) are supported.
This is not a stable version to any extend and it you use it in a
production environment, you’re insane.
Any feedback is highly appreciated.
Licensing is not completely clear, yet. I claim that this version is
under some BSD-style license.
Best Regards,
Peter
--
Peter Horn, University of Kassel *
Computational Mathematics Group * *
Heinrich Plett Str. 40, 34132 Kassel * [S] [C] [I] [E] [n] [c] [e]
Phone: + 4 9 - 5 6 1 - 8 0 4 - 4 1 9 2 * http://www.symcomp.org
Fax: + 4 9 - 5 6 1 - 8 0 4 - 4 6 4 6 *
E-Mail: hornp at mathematik.uni-kassel.de * *
http://kassel.symcomp.org/ *
More information about the Om
mailing list