Chỉnh sửa: Điều này hiện đã có trong 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
Câu trả lời cũ hơn cho thấy công việc khác
Vì vậy, sau khi xem xét một lúc, đây là những gì tôi đã tìm thấy.
Câu trả lời hiện tại cho câu hỏi cụ thể của tôi là "Không, không có hệ thống hiện tại nào có thể trả lời câu hỏi này". Tuy nhiên, có một vài điều dường như đến gần.
Đầu tiên, Matt Knepley và Lagerbaer đều chỉ ra làm việc bởi Diego Fabregat và Paolo Bientinesi . Công việc này cho thấy cả tầm quan trọng tiềm năng và tính khả thi của vấn đề này. Đó là một đọc tốt. Thật không may, tôi không chắc chắn chính xác cách thức hệ thống của anh ấy hoạt động hoặc khả năng của nó (nếu có ai biết về các tài liệu công khai khác về chủ đề này thì hãy cho tôi biết).
Thứ hai, có một thư viện đại số tenor được viết cho Mathicala gọi là xAct xử lý các đối xứng và một cách tượng trưng. Nó làm một số điều rất tốt nhưng không phù hợp với trường hợp đặc biệt của đại số tuyến tính.
Thứ ba, các quy tắc này được viết chính thức trong một vài thư viện cho Coq , một trợ lý chứng minh định lý tự động (tìm kiếm Google cho đại số tuyến tính / ma trận coq để tìm một số). Đây là một hệ thống mạnh mẽ mà không may đòi hỏi sự tương tác của con người.
Sau khi nói chuyện với một số người hoạt động theo định lý, họ đề nghị xem xét lập trình logic (ví dụ Prolog, mà Lagerbaer cũng đề xuất) cho loại điều này. Theo hiểu biết của tôi điều này chưa được thực hiện - tôi có thể chơi với nó trong tương lai.
Cập nhật: Tôi đã thực hiện điều này bằng hệ thống Maude . Mã của tôi được lưu trữ trên github