Вопросы, которые вы задаете, на самом деле совсем другие.
Однако я не уверен, в какой степени это относится к реальным программным операциям, таким как операционные системы. Нуждаются ли эти типы программ в полной силе полноты по Тьюрингу?
Чтобы модель Тьюринга была полной, требуется очень мало. Например, различные модели со счетчиками могут моделировать машины Тьюринга. Если вы считаете, что вашему программному обеспечению требуется более двух счетчиков, которыми вы можете произвольно манипулировать, вы используете полный язык Тьюринга. Хотя целые числа машин априори ограничены, структуры данных, выделенные в куче, обычно нет. Если вашему программному обеспечению требуются списки, деревья и другие динамически размещаемые данные, вы используете полный язык Тьюринга.
Существуют ли более простые модели вычислений (например, PR), в которых эти приложения могут быть написаны? Если да, то в какой степени это позволяет разрешить правильность программы?
Важно признать, что мы не хотим проверять произвольные свойства нашего программного обеспечения. Проверка очень специфических, узких свойств (без переполнения буфера, без разыменования нулевого указателя, без бесконечных циклов и т. Д.) Значительно повышает качество и удобство использования программного обеспечения. Теоретически, такие проблемы все еще неразрешимы. На практике фокусирование на конкретных свойствах позволяет нам обнаруживать структуру в наших программах, которую мы часто можем использовать для решения проблемы.
В частности, вы можете изменить исходный вопрос на
Есть ли абстракция моего программного обеспечения, которую я могу эффективно анализировать в полной модели, не связанной с Тьюрингом?
Абстракция - это модель, которая включает в себя поведение исходного программного обеспечения и, возможно, множество дополнительных вариантов поведения. Существуют такие модели, как машины с одним счетчиком или системы опускания, которые не являются полными по Тьюрингу и которые мы можем проанализировать. Стандартный подход в верификации программ с помощью автоматизированных инструментов заключается в построении абстракции в такой модели и ее алгоритмической проверке.
Существуют приложения, в которых люди заботятся о сложных свойствах своего оборудования или программного обеспечения. Компании-производители оборудования хотят, чтобы их микросхемы правильно реализовывали арифметические алгоритмы, а компании-производители автомобилей и авионики - программное обеспечение с достоверной точностью. Если это так важно, вам лучше использовать (обученного) человека.