Меня интересует следующий вопрос. Я, очевидно, не ожидаю каких-либо практических решений, но я был бы признателен любому разработчику за мысли по этому поводу:
Было бы теоретически возможно иметь программу, которая открывает другие программы (в качестве аргумента, скажем, она открывает файлы .exe) и определяет, выполняется ли конкретный исполняемый файл при выполнении (с фиксированным вводом и состоянием компьютера) играет в шахматы (среди других задач, которые он может выполнять).
Под «игрой в шахматы» я имею в виду некоторое представление шахматной доски и фигур, применение последующих ходов для черного и белого, происходящих из встроенного механизма шахматного ИИ.
Такая теоретическая «программа обнаружения шахмат» может содержать эмулятор виртуальной машины или ПК или что-либо еще, чтобы фактически имитировать отсканированный исполняемый файл, если это необходимо. Мы можем предположить, что он работает на произвольно быстром компьютере с тем же оперативным памяти.
(Правка) Что касается проблемы остановки, я могу решить ее следующим образом:
Загрузить программу на виртуальной машине, которая имеет N битов (жесткий диск, память и регистры процессора в целом). Эта виртуальная машина может принимать не более 2 ^ N различных состояний.
Выполнить программу в виртуальной машине шаг за шагом. После каждого шага проверяйте, остановился ли он.
Если да: проблема решена (результат: да, она останавливается).
Если нет: возьмите текущее состояние виртуальной машины и посмотрите, существует ли это состояние в списке состояний, с которыми мы уже сталкивались ранее. Если да: проблема решена (результат: нет, она будет работать вечно). Если нет: добавьте это состояние в список и продолжайте.
Поскольку может иметь место не более 2 ^ N различных состояний, этот алгоритм будет определять, останавливается ли программа с уверенностью в конечное время или нет.
(Edit2) Кажется, существует некоторая двусмысленность относительно (не) конечности сканируемого исполняемого файла или (виртуальной) машины, на которой он запущен. Допустим, сканируемые исполняемые файлы могут занимать не более 1 ГБ (этого должно быть достаточно, поскольку большинство шахматных программ значительно меньше) и должны работать на ПК (или ВМ) с 10 ГБ оперативной памяти.
Наша теоретическая программа обнаружения шахмат может использовать произвольное количество овна.