A small language for Matrix Expressions written in Maude.
defines an algebra for matrix expressions, i.e.
transpose(Y X) Y + A B
This language includes multiplies, adds, backsolves, transposes, and inverses
defines rules for predicates like
X is symmetric , Y is orthogonal
We group these predicates into contexts (here called Facts) and declare rules like the following
ceq Facts => X Y is invertible = true if Facts => X is invertible and Facts => Y is invertible .
We include predicates like symmetric, orthogonal, invertible, singular, positive-definite, triangular, diagonal, etc.... If you are interested it is very easy to add more. The existing code should provide enough examples.
combines these two and includes simplification rules like
ceq simplify(X transpose(X) with Facts) = I with Facts if Facts => X is orthogonal .
Other than a few Maude keywords (like
ceq) this code is intended to look like
mathematical statements. This allows for easy extensibility (you can contribute
to this project without knowing Maude) and for easy verifiability (the code is
simplify-sys.maude contains simplification rules that include branching
paths. I.e. for
X Y Z there are two ways in which we could group terms
(X Y) Z or
X (Y Z). This requires a search mechanism rather than
straightforward equational rewriting.
rl [right] : simplify(X (Y Z) with C) => simplify(X with C) simplify(Y Z with C) .` rl [left] : simplify(X (Y Z) with C) => simplify(X Y with C) simplify(Z with C) .
As a result of all of this we can perform simplifications like the following
simplify(transpose(Y X) Y + A B with X is symmetric , Y is orthogonal)
X + A B with X is symmetric
src/tests directory contains a number of examples that are used to verify
the correctness of this code. It is a good place to start.
After you have Maude installed you may run the tests as follows
You can clone this repository with
$ git clone git://github.com/mrocklin/matrix-algebra.git
You will need the Maude system which is available by apt using
$ sudo apt-get install maude
This code is under a BSD style license (see LICENSE in this directory.)
There is a file,
compute.maude, which is the starting point to translate
matrix expressions into BLAS calls. The goal of this project is to wrap and
isolate the complexity of the BLAS and LAPACK libraries so that users can write
A x with A is symmetric , x is vector and have the correct
written for them. Additionally, using the search mechanism in Maude it should
be possible to consider more complex expressions / contexts and select optimal
computation strategies. This is a work in progress.