Edit: Ceci est maintenant dans 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
Réponse plus ancienne qui montre un autre travail
Donc, après avoir examiné cela pendant un moment, voici ce que j'ai trouvé.
La réponse actuelle à ma question spécifique est "Non, aucun système actuel ne peut répondre à cette question". Il y a cependant quelques petites choses qui semblent se rapprocher.
Matt Knepley et Lagerbaer ont tout d’abord évoqué les travaux de Diego Fabregat et Paolo Bientinesi . Ce travail montre à la fois l’importance potentielle et la faisabilité de ce problème. C'est une bonne lecture. Malheureusement, je ne sais pas exactement comment son système fonctionne ni de quoi il est capable (si quelqu'un connaît d'autres documents publics sur ce sujet, faites-le-moi savoir).
Deuxièmement, il existe une bibliothèque d'algèbre de tenseurs écrite pour Mathematica appelée xAct, qui traite les symétries et symboliquement. Il fait certaines choses très bien mais n'est pas adapté au cas particulier de l'algèbre linéaire.
Troisièmement, ces règles sont formellement écrites dans quelques bibliothèques pour Coq , un assistant de démonstration de théorèmes automatisé (recherche Google pour l’algèbre matricielle linéaire / matricielle pour en trouver quelques-unes). C'est un système puissant qui semble malheureusement nécessiter une interaction humaine.
Après avoir discuté avec des gens qui ont prouvé leur théorie, ils suggèrent de se pencher sur la programmation logique (c'est-à-dire Prolog, que Lagerbaer a également suggéré) pour ce genre de chose. À ma connaissance, cela n’a pas encore été fait - il est possible que je joue avec dans le futur.
Mise à jour: j'ai implémenté cela en utilisant le système Maude . Mon code est hébergé sur github