Нужно написать программу, которая будет печатать бесконечный список всех пропозициональных тавтологий (наподобие
![$A \rightarrow A$ $A \rightarrow A$](https://dxdy-01.korotkov.co.uk/f/8/8/6/88653268ff8f183f4893bd3dfb4b1e7082.png)
). Причем нужно исключить случаи, когда очередная тавтология является частным случаем предыдущей (то есть получается из нее подстановкой каких-либо пропозициональных формул вместо пропозициональных переменных, например после
![$A \rightarrow A$ $A \rightarrow A$](https://dxdy-01.korotkov.co.uk/f/8/8/6/88653268ff8f183f4893bd3dfb4b1e7082.png)
не должно быть напечатано
![$B \rightarrow B$ $B \rightarrow B$](https://dxdy-03.korotkov.co.uk/f/a/2/7/a27c40a0f1a9cf2ea7ca1bc148d8428682.png)
или
![$(A \rightarrow B) \rightarrow (A \rightarrow B)$ $(A \rightarrow B) \rightarrow (A \rightarrow B)$](https://dxdy-02.korotkov.co.uk/f/5/9/8/5985a573930fc11c04c0f15c7c4745c382.png)
.
Я написал один вариант, но он работает медленно (точнее, с постепенным замедлением) из-за того, что каждая полученная формула проверяется на то, не является ли она частным случаем каждой из предыдущих. За день программа может напечатать всего около 10 тысяч тавтологий.
Интересует, существуют ли быстрые алгоритмы для этой задачи.