Modifica: questo è ora 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
Risposta precedente che mostra altri lavori
Quindi dopo aver esaminato questo per un po ', questo è quello che ho trovato.
La risposta attuale alla mia domanda specifica è "No, non esiste un sistema attuale in grado di rispondere a questa domanda". Vi sono tuttavia alcune cose che sembrano avvicinarsi.
In primo luogo, Matt Knepley e Lagerbaer hanno entrambi indicato di lavorare di Diego Fabregat e Paolo Bientinesi . Questo lavoro mostra sia la potenziale importanza che la fattibilità di questo problema. È una buona lettura Sfortunatamente non sono sicuro di come funzioni il suo sistema o di cosa sia capace (se qualcuno sa di altro materiale pubblico su questo argomento fammelo sapere).
In secondo luogo, esiste una libreria di algebra tensoriale scritta per Mathematica chiamata xAct che gestisce simmetrie e simbolicamente. Fa alcune cose molto bene, ma non è adattato al caso speciale dell'algebra lineare.
Terzo, queste regole sono scritte formalmente in un paio di librerie di Coq , un assistente dimostratore di teoremi automatizzato (Google cerca qualche algebra lineare / matrice di coq per trovarne alcune). Questo è un sistema potente che purtroppo sembra richiedere l'interazione umana.
Dopo aver parlato con alcune persone che dimostrano teoremi , suggeriscono di esaminare la programmazione logica (cioè Prolog, che anche Lagerbaer ha suggerito) per questo genere di cose. Per quanto ne so, questo non è ancora stato fatto - potrei giocarci in futuro.
Aggiornamento: l'ho implementato usando il sistema Maude . Il mio codice è ospitato su github