Последнее время заинтересовался компьютерной проверкой доказательств. Я решил взять маленькую, но, как мне кажется, самодостаточную часть - алгебру множеств. Как известно, есть определенное количество операций над множествами, которые разным образом связаны друг с другом. Эти связи можно записать в виде различных соотношений. Например, можно взять такое
![$$\bigcup\limits_{i \in I}^{}\bigcap\limits_{j \in J}^{}S_{i,j}\subset\bigcap\limits_{j \in J}^{}\bigcup\limits_{i \in I}^{}S_{i,j}$$ $$\bigcup\limits_{i \in I}^{}\bigcap\limits_{j \in J}^{}S_{i,j}\subset\bigcap\limits_{j \in J}^{}\bigcup\limits_{i \in I}^{}S_{i,j}$$](https://dxdy-03.korotkov.co.uk/f/2/3/8/238817dc24841cbfb62189d44e4c687282.png)
(просто оно мне нравится, поэтому я его и взял). Я хочу акцентировать, что я допускаю подобные "сложные" формулы, а не просто бинарные в духе
![$A \cup B = B \cup A$ $A \cup B = B \cup A$](https://dxdy-02.korotkov.co.uk/f/5/1/6/516246fd4cc4aae1fdc67a2efb5fddcf82.png)
. Есть хорошая статья в википедии
List of set identities and relations, чтобы было представление, какие формулы я имею в виду.
Так вот. Мой план максимум - сделать компьютерную программу. Программа должна уметь следующее:
1. В ней должен быть механизм определения операции. Т.е. чтобы можно было определить операции объединения, пересечения, декартова произведения, разности и т.д. Хотелось бы, чтобы механизм был универсальный и чтобы можно было определять любые операции, какие вздумается. Ну я не знаю, допустим 10-арную операцию
![$\circ_{i = 1}^{10} A_i = (\bigcap\limits_{i = 1}^{9}A_i) \triangle A_{10}$ $\circ_{i = 1}^{10} A_i = (\bigcap\limits_{i = 1}^{9}A_i) \triangle A_{10}$](https://dxdy-04.korotkov.co.uk/f/f/5/6/f56571d17e0fd3e61f1d1487ec019b3c82.png)
(где
![$\triangle$ $\triangle$](https://dxdy-03.korotkov.co.uk/f/e/2/6/e2664d5e0ab76eb41a5a492641e7038782.png)
- симметрическая разность). Думаю, что у меня получилось написать достаточно абсурдную операцию, чтобы показать, что я хочу.
2. Она должна сама уметь доказывать формулы алгебры множеств. Грубо говоря, я ей кидаю на вход любую формулу из той статьи в википедии, и она говорит мне, правильная формула или нет. Ну или любую какую-нибудь мою странную формулу.
В принципе, этих двух пунктов мне достаточно. Конечно, маловероятно, что я действительно смогу написать такую программу. Но я для начала готов просто узнать общую информацию. Я хочу узнать, а вообще, теоретически, такую программу можно сделать? Есть ли алгоритм, который будет делать то, что мне надо? (а то вдруг тут есть какие-нибудь проблемы с алгоритмической разрешимостью, хотя интуитивно кажется, что не должно)
Навскидку выглядит не очень сложно. К тому же, кажется, что я бы смог руками доказать любую такую формулу. Никакого творчества здесь не прослеживается. Так почему компьютер не сможет?
В общем, интересно все, что связано с такой задачей.