Я расширю ответ Firestand по генетическому программированию.
Уже были такие идеи, как ваша; хотя они почти всегда были ограничены какой-то искусственной средой.
Мой друг написал систему для автоматического (с использованием генетического программирования) развития программ для среды CoreWars . Эти программы не длинные (от десятков до сотен инструкций по сборке), и набор юридических инструкций не очень велик, поэтому пространство возможных программ намного меньше, чем у полнофункциональных приложений с графическим интерфейсом для x86. В начале боты едва ли сражались друг с другом; но с каждым поколением в наборе появлялись все лучшие и лучшие бойцы.
Подробнее об этой концепции вы можете прочитать в исследовательской работе (PDF) .
Было бы не очень легко применить эту идею к x86, набор инструкций здесь велик, а взаимодействия между ними иногда очень сложны. Однако теоретически вы можете построить виртуальную машину с упрощенным набором инструкций и разработать программы для нее. Я где-то читал об этом, но не могу вспомнить, где.
Тем не менее, проверка всех возможных комбинаций нецелесообразна даже для очень очень простого кода. Вы действительно хотите использовать эвристическую стратегию, например, генетическое программирование.
У вашей идеи есть еще один недостаток. Вы предполагаете, что можете строго указать все требования для своих программ, чтобы все требования можно было протестировать автоматически. Это невозможно или очень близко к невозможному. Предполагая, что вы хотите найти программу, которая добавляет два числа типа int32, чтобы быть уверенным, что программа работает правильно, вы должны проверить все возможные входные данные, поэтому 2 ^ 64 возможностей. Попробуйте представить, сколько сценариев вам нужно проверить, если вы пишете финансовую программу.
Вы можете попытаться использовать «интеллектуальную» систему, чтобы найти доказательства правильности своих программ ... но поскольку вы не ограничены каким-то подмножеством программ (вы можете просто сгенерировать все, что можно запустить на процессоре), Вы не можете рассуждать обо всех программах из-за проблемы Halting . Проще говоря, невозможно определить, правильно ли работают некоторые программы, не проверив все возможные данные.