Редагувати: це зараз у 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
Старіша відповідь, що показує іншу роботу
Отож, вивчивши це деякий час, це те, що я знайшов.
Поточна відповідь на моє конкретне запитання - «Ні, немає діючої системи, яка могла б відповісти на це питання». Однак є кілька речей, які, здається, наближаються.
По-перше, Метт Кнеплі та Лагербаер вказали на роботу Дієго Фабрегата та Паоло Бієтінезі . Ця робота показує як потенційну важливість, так і доцільність цієї проблеми. Це добре читати. На жаль, я не впевнений, як саме працює його система чи на що вона здатна (якщо хтось знає про інші публічні матеріали на цю тему, то дайте мені знати).
По-друге, існує бібліотека алгебри тензорів, написана для Mathematica під назвою xAct, яка обробляє симетрії і таке символічно. Деякі речі це дуже добре, але не пристосовані до особливого випадку лінійної алгебри.
По-третє, ці правила формально записуються в пару бібліотек для Coq , автоматизованого помічника, що підтверджує теорему (пошук Google для лінійної / матричної алгебри coq, щоб знайти їх декілька). Це потужна система, яка, на жаль, вимагає взаємодії людини.
Після розмови з деякими людьми, які підтверджують теорему, вони пропонують вивчити логічне програмування (тобто Пролог, який також запропонував Лагербаєр) для подібних речей. Наскільки мені відомо, це ще не зроблено - я можу зіграти з цим у майбутньому.
Оновлення: я реалізував це за допомогою системи Maude . Мій код розміщений на github