Editar: Esto ahora está en 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
Respuesta anterior que muestra otro trabajo
Entonces, después de analizar esto por un tiempo, esto es lo que he encontrado.
La respuesta actual a mi pregunta específica es "No, no hay un sistema actual que pueda responder esta pregunta". Sin embargo, hay algunas cosas que parecen acercarse.
Primero, Matt Knepley y Lagerbaer señalaron el trabajo de Diego Fabregat y Paolo Bientinesi . Este trabajo muestra tanto la importancia potencial como la viabilidad de este problema. Es una buena lectura. Lamentablemente, no estoy seguro exactamente de cómo funciona su sistema o de lo que es capaz (si alguien sabe de otro material público sobre este tema, hágamelo saber).
En segundo lugar, hay una biblioteca de álgebra tensorial escrita para Mathematica llamada xAct que maneja las simetrías y simbólicamente. Hace algunas cosas muy bien pero no se adapta al caso especial de álgebra lineal.
Tercero, estas reglas están escritas formalmente en un par de bibliotecas para Coq , un asistente de prueba de teorema automatizado (Google busca álgebra lineal / matricial de coq para encontrar algunas). Este es un sistema poderoso que desafortunadamente parece requerir la interacción humana.
Después de hablar con algunas personas probadores de teoremas , sugieren buscar en la programación lógica (es decir, Prolog, que Lagerbaer también sugirió) para este tipo de cosas. Que yo sepa, esto aún no se ha hecho, puedo jugar con él en el futuro.
Actualización: he implementado esto usando el sistema Maude . Mi código está alojado en github