Bearbeiten: Dies ist jetzt in SymPy
$ isympy
In [1]: A = MatrixSymbol('A', n, n)
In [2]: B = MatrixSymbol('B', n, n)
In [3]: context = Q.symmetric(A) & Q.positive_definite(A) & Q.orthogonal(B)
In [4]: ask(Q.symmetric(B*A*B.T) & Q.positive_definite(B*A*B.T), context)
Out[4]: True
Ältere Antwort, die andere Arbeit zeigt
Nach einer Weile habe ich das gefunden.
Die aktuelle Antwort auf meine spezielle Frage lautet "Nein, es gibt kein aktuelles System, das diese Frage beantworten kann." Es gibt jedoch ein paar Dinge, die nahe zu kommen scheinen.
Zunächst wiesen Matt Knepley und Lagerbaer beide auf Arbeiten von Diego Fabregat und Paolo Bientinesi hin . Diese Arbeit zeigt sowohl die potenzielle Bedeutung als auch die Machbarkeit dieses Problems. Es ist eine gute Lektüre. Leider weiß ich nicht genau, wie sein System funktioniert oder wozu es in der Lage ist (falls jemand anderes öffentliches Material zu diesem Thema kennt, lass es mich wissen).
Zweitens gibt es eine für Mathematica geschriebene Tensor-Algebra-Bibliothek namens xAct, die Symmetrien und dergleichen symbolisch handhabt. Es macht einige Dinge sehr gut, ist aber nicht auf den Spezialfall der linearen Algebra zugeschnitten.
Drittens werden diese Regeln in einigen Bibliotheken für Coq formell niedergeschrieben , einen Assistenten zur Prüfung von Theoremen (Google-Suche nach coq linear / matrix algebra, um einige zu finden). Dies ist ein mächtiges System, das leider menschliche Interaktion zu erfordern scheint.
Nach einem Gespräch mit einigen Theorembeweisern schlagen sie vor, sich mit Logikprogrammierung (dh Prolog, das auch Lagerbaer vorschlug) für diese Art von Dingen zu befassen. Soweit ich weiß, ist dies noch nicht geschehen - ich werde vielleicht in Zukunft damit spielen.
Update: Ich habe dies mit dem Maude-System implementiert . Mein Code wird auf Github gehostet