DynaMoW is a programming tool for controlling the generation of mathematical web sites that embed dynamical mathematical contents generated by computer-algebra calculations. The desire for this tool grew from the development of the Dynamic Dictionary of Mathematical Functions (DDMF), and DynaMoW is now used as the underlying engine for both the DDMF and the ECS.
DynaMoW takes the form of an OCaml library. A beta of a first release has been published end of March 2011, and the final release is expected soon. The authors are F. Chyzak (frederic.chyzak@firstname.lastname@example.org) and A. Darrasse (alexis.darrasse@email@example.com).
The present release of DynaMoW is distributed under CeCILL-B license [en | fr], with rights owned by INRIA and Microsoft Corporation.
tar zxpf DynaMoW-1.0.0.tar.gz cd DynaMoW-1.0.0 ./install-dependencies.sh
After this, you can perform or skip the quick test of the next
section. You can then copy the
which your application can then be compiled, and keep
build/DynaMoW.mli for API documentation. For
application examples, refer to the manual in the documentation section
Likely dependencies for compiling (as Debian packages):
make ocaml camlp4-extra ocaml-findlib libocamlnet-ocaml-dev
Likely dependencies for running and looking at a web site (as Debian
latexml texlive-binaries texlive-latex-base
latex-beamer ghostscript netpbm dvipng inkscape libapache2-mod-fastcgi
ttf-jsmath (not all dependencies are needed, depending on
configuration options and web clients actually used).
Assuming you have Maple installed and in your path, the following is a quick test that everything works, using the DynaMoW toplevel:
$ bin/dynamow_top Objective Caml version 3.12.0 Camlp4 Parsing version 3.12.0 # use_cas Maple ;; module DynaMoW_CAS__ : sig type 'a t = 'a Maple.t type cas_code = string val evaluator_symbolic : cas_code -> 'a t DynaMoW.symb val evaluator_latex : cas_code -> DynaMoW.CAS.latex val evaluator_unit : cas_code -> unit val evaluator_int : cas_code -> int val evaluator_bool : cas_code -> bool val evaluator_string : cas_code -> string val serialization_of_t : 'a t DynaMoW.symb -> string val cas_ref_of_t : 'a t DynaMoW.symb -> string val pp : Format.formatter -> 'a t DynaMoW.symb -> unit val pretty_code_of_t : 'a t DynaMoW.symb -> DynaMoW.CAS.pretty_code val latex_of_t : 'a t DynaMoW.symb -> DynaMoW.CAS.latex val cas_code_of_bool : bool -> cas_code val reset : unit -> unit end # let a = <:int< degree(normal((x^10 - 1) / (x - 1))) >> ;; val a : int = 9 # <:bool< x^$(int:a) = x^9 >> ;; - : bool = true #
A most complete programmer's manual is available [html | pdf].
See also the white paper on DynaMoW (published as an experience report at ICFP'11, [bib]).
We have used DynaMoW for two applications: the ECS and the DDMF.
The ECS describes
combinatorial structures. Compare the form for the generating
functions given in the sections 4
of ECS #34:
Cycles of cycles and
Planar trees, respectively: depending on the mathematics, we
provide different forms of output. In ECS #34, the explicit form
involves logarithms, but satisfies no linear differential equations;
in ECS #93, we can supply a linear differential equation. By
itself, these sections 4 are the result of evaluating a service
GeneratingFunction, whose implementation is
given here, together with
The DDMF provides
information on various special functions of mathematical analysis.
All articles describe one function and are built on the same
structure. This is the result of a service
SpecialFunction, whose implementation is
its interface. On
each page, the short paragraph One gets a polynomial…
is the result of the case analysis in a service
TaylorTruncation, whose implementation is