Sunting: Ini sekarang di 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
Jawaban yang lebih lama yang menunjukkan pekerjaan lain
Jadi setelah melihat ini sebentar, inilah yang saya temukan.
Jawaban saat ini untuk pertanyaan spesifik saya adalah "Tidak, tidak ada sistem saat ini yang dapat menjawab pertanyaan ini." Namun ada beberapa hal yang tampaknya mendekati.
Pertama, Matt Knepley dan Lagerbaer sama-sama menunjuk karya Diego Fabregat dan Paolo Bientinesi . Karya ini menunjukkan kepentingan potensial dan kelayakan masalah ini. Ini bacaan yang bagus. Sayangnya saya tidak yakin persis bagaimana sistemnya bekerja atau apa yang mampu dilakukannya (jika ada yang tahu materi publik lainnya tentang topik ini, beri tahu saya).
Kedua, ada perpustakaan aljabar tensor yang ditulis untuk Mathematica yang disebut xAct yang menangani simetri dan semacam itu secara simbolis. Itu melakukan beberapa hal dengan sangat baik tetapi tidak disesuaikan dengan kasus khusus aljabar linier.
Ketiga, aturan-aturan ini ditulis secara formal di beberapa perpustakaan untuk Coq , asisten pembuktian teorema otomatis (pencarian Google untuk aljabar linear / aljabar matriks untuk menemukan beberapa). Ini adalah sistem yang kuat yang sayangnya tampaknya membutuhkan interaksi manusia.
Setelah berbicara dengan beberapa teorema orang yang mereka sarankan melihat ke pemrograman logika (yaitu Prolog, yang Lagerbaer juga menyarankan) untuk hal semacam ini. Setahu saya ini belum dilakukan - saya bisa bermain dengannya di masa depan.
Pembaruan: Saya sudah menerapkan ini menggunakan sistem Maude . Kode saya dihosting di github