- •Функции и графы
- •Вычислимость и разрешимость
- •Программы и схемы программ
- •Базис класса стандартных схем программ
- •Графовая форма стандартной схемы
- •Линейная форма стандартной схемы
- •Интерпретация стандартных схем программ
- •Эквивалентность, тотальность, пустота, свобода
- •Свободные интерпретации
- •Согласованные свободные интерпретации
- •Логико-термальная эквивалентность
- •Одноленточные автоматы
- •Многоленточные автоматы
- •Двухголовочные автоматы
- •1.4.3.1. Проблемы пустоты и эквивалентности.
- •1.4.3.2. Двоичный двухголовочный автомат
- •1.4.3.3. Построение схемы, моделирующей автомат
- •Рекурсивное программирование
- •Определение рекурсивной схемы
- •Трансляция обогащенных схем
- •О сравнении классов схем
- •Схемы с процедурами
- •Классы обогащенных схем
- •Трансляция обогащенных схем
- •Структурированные схемы
- •Описание смысла программ
- •Операционная семантика
- •Аксиоматическая семантика
- •2.1.2.1. Краткое введение в исчисление высказываний
- •2.1.2.2. Преобразователь предикатов
- •2.1.2.3. Аксиоматическое определение операторов языка программирования в терминах wp.
- •Денотационная семантика
- •Декларативная семантика
- •Методы доказательства правильности программ
- •Использование высказываний в программах
- •Правила верификации к. Хоара
- •Определения
- •Реализация процессов
- •Протоколы
- •Операции над протоколами
- •Протоколы процесса
- •Спецификации
- •Взаимодействие
- •Параллелизм
- •Задача об обедающих философах
- •I.Встаёт праваЯi).
- •Помеченные процессы
- •Множественная пометка
- •Ввод и вывод
- •Взаимодействия
- •Подчинение
- •Поочередное использование
- •Общая память
- •Кратные ресурсы
- •Планирование ресурсов
- •Основные понятия
- •Многопоточная обработка
- •Условные критические участки
- •Мониторы
- •Instanсе ракетa: счет; р.
- •Обмен сообщениями
- •Параллелизм данных
- •Модель общей памяти
- •Теоретико-множественное определение сетей Петри
- •Графы сетей Петри
- •Маркировка сетей Петри
- •Правила выполнения сетей Петри
- •События и условия
- •Одновременность и конфликт
- •Моделирование параллельных систем взаимодействующих процессов
- •Свойства сетей Петри
- •Методы анализа
1.4.3.3. Построение схемы, моделирующей автомат
Двоичное слово b1b2 … bn согласовано со свободной интерпретацией базисаB, если для любогоi, 1in,I(p) (‘f ia’) =bi, гдеp- единственный предикатный символ базисаB.
Пример 1.3.Слово 101010100 согласовано с любой свободной интерпретациейI такой, что для всехi9I(p) (‘f ia’) = 1 еслиiнечетно и меньше 9, иI(p)(‘f ia’) = 0, еслиiчетно или равно 9. Свободная интерпретацияIтакая, что для всехiI(p) (‘f ia’) = 0, согласована с любым словом, не содержащим 1.
Для того чтобы свести проблему пустоты ДДКА к проблеме пустоты стандартных схем покажем, что для любого двоичного автомата Аможно построить схемуS, которая моделирует автоматАв следующем смысле. Если на ленту автоматаАподано произвольное двоичное словоа, то программа(S, I), гдеI — любая свободная интерпретация базисаВ, согласованная са, останавливается в том и только в том случае, когда автомат допускает словоа.
Лемма.ДДКА пуст в том и только в том случае, если пуста моделирующая его стандартная схема.
Лемма.Для любого ДДКА можно построить моделирующую его стандартную схему.
Теорема (Лакхэм - Парк - Патерсон).Проблема пустоты стандартных схем не является частично разрешимой.
Теорема (Лакхэм - Парк - Патерсон, Летичевский).Проблема функциональной эквивалентности стандартных схем не является частично разрешимой.
Теорема (Лакхэм - Парк - Патерсон).Проблема тотальности стандартных схем частично разрешима.
Теорема (Патерсон).Проблема свободы стандартных схем не является частично разрешимой.
Рекурсивные схемы
Рекурсивное программирование
Среди упомянутых выше методов формализации понятия вычислимой функции метод Тьюринга — Поста основан на уточнении понятия процесса вычислений, для чего используются абстрактные «машины», описанные в точных математических терминах. Другой подход (метод Черча — Клини) основан на понятии рекурсивной функции, рекурсивная функция задается с помощью рекурсивных определений. Рекурсивное определение позволяет связать искомое значение функции для заданных аргументов с известными значениями той же функции при некоторых других аргументах. Эта связь устанавливается с помощью универсального механизма рекурсии, дающего механическую процедуру поиска значений функции. Двум подходам к определению вычислимых функций соответствуют два метода программирования этих функций — операторное и рекурсивное программирование. При операторном методе программа представляет собой явно выписанную последовательность, описаний действий гипотетической вычислительной машины (последовательность операторов, команд и т. п.).
Язык Фортран — типичный представитель операторных языков. С другой стороны, рекурсивная программа — это совокупность рекурсивных определений, задающих рекурсивную функцию, для которой аргументами служат начальные данные программы, а значением — результат выполнения программы. Известный язык рекурсивного программирования — язык Лисп — предназначен для обработки символьной информации. В других зыках комбинируют оба метода программирования. Так, Паскаль — операторный язык с возможностью рекурсивного программирования, предоставляемой механизмом рекурсивных процедур и функций.
Примером рекурсивно определяемой функции является факториальная функция FACT: Nat → Nat:
FACT(х) = 1, еслих= 0,FACT(х) =х FACT(х- 1),еслих> 0.
Операторные программы, вычисляющие значения этой функции, приведены в п. 1.1.3. Эту же функцию можно запрограммировать в некотором рекурсивном языке, базирующемся на механизме рекурсивных функций языка Паскаль:
FACT(a),
FACT(х) = ifх = 0 then1 else х FACT(х - 1),
где а— некоторое целое неотрицательное число.
Выполнение этой программы для некоторого значения а (пустьа= 4) может быть осуществлено следующим образом. В обе части рекурсивного определения вместох подставляется 4, после чего вычисляется правая часть определения. Вычисление правой части начинается с вычисления логического выражения. Если его значение 1 (истина), то вычисляется левое функциональное выражение (стоящее после то), а если его значение 0 (ложь) — вычисляется правое выражение (стоящее послеelse). Вычисление функционального выражения сводится к его упрощению, т. е. выполнению всех возможных вычислений. Если в упрощенном выражения остается вхождение символа определяемой функцииFACT, то осуществляется переход к новому шагу выполнения программы. На этом шаге вхождениеFACT(m), гдеm — значение внутри скобок после упрощения, заменяется левым (m = 0) или правым (m> 0) функциональным выражением, в котором все вхождениях заменены наm. Упрощения продолжаются до тех пор, пока не будет получено выражение, не содержащееFACT (в нашем случае это выражение — число).
Вычисление рекурсивной программы может завершиться за конечное число шагов с результатом, равным значению запрограммированной функции для заданных аргументов (начальных значений переменных), но может и продолжаться бесконечно. В последнем случае значение функции не определено.