
- •Глава 1. Логика высказываний
- •1.1 Логика высказываний
- •1.2 Алгебра логики
- •Законы логики:
- •Алгоритм преобразования:
- •Методы правильных рассуждений:
- •1.3 Исчисление высказываний – формальная аксиоматическая теория.
- •1.Схема аксиом Гильберта и Анкермана
- •2.Схема аксиом Чёрча.
- •1.4 Логический вывод
- •Метод математической индукции.
- •Метод обратного вывода от цели
- •Метод Дэвиса и Патнема.
- •Алгоритм логического вывода по методу Дэвиса и Патнема
- •1.Исключение тавтологий
- •2.Однолитерные дизъюнкты l
- •Алгоритм логического вывода с применением правила резолюций.
- •1.Исключение тавтологий
- •Глава 2. Логика предикат
- •2.1 Одноместные предикаты, определение события
- •2.2 Одномерные предикаты определяющие свойства.
- •Многоместные предикаты (мп)
- •Интерпретация формул в теорий граф.
- •Применение в реляционных базах данных.
- •Интерпретация формул логики в теории функциональных отношений.
- •Применение в теории алгоритмов.
- •Нормальные формулы с предикатами.
- •Логический вывод в исчислений предикат.
- •Правила вывода.
- •Применение вывода для получения новой информации.
- •Общие принципы логических программ. Выполнение программ.
Применение в теории алгоритмов.
Логическое отношение алгоритмов может быть сформулировано на основе неформального описания (например, блок-схемы алгоритмов, граф-схемы). Блок-схемы используются для описания «предшествующих» алгоритмов («вычислить - х» алгоритмов). Описание состоит из последовательности шагов – операторов и инструкции. Предписывающие алгоритмы исполняются (интерпретируются) неймановской машиной и является программой: предикатный символ Qi(t1, . . . tn).
В программе выбираются контрольные точки (узлы), которые ставят в соответствие предикаты, обозначающие состояние программы в i-том узле.
ti – термы, обозначение состояния (значения) i-той переменной.
Порядок записи уравнения:
1)
еслиi
и j
– это вход и выход операторной вершины
(смотри рисунок S
– оператор с инструкцией на выполнение
преобразования). Переход из i
в j
– это дуга, которая определяется
формулой: Qi(t1t2
. . . tn)
Qj(l1l2
. . .ln)
где lj = f(f1 . . . fn)
2)
еслиi
и j
– вход и выход условной вершины. Тогда
дуге «i
j»
ставится в соответствие формула с
контрольным предикатом:
Qi & P Qi, P = P(t1 . . . tn)
3) начало программы Q0 - - местный предикат - высказывание
4) конец программы Qk.
Пример: программа «умножение» х,у – целые
x
– множимое; у – множитель
x значит «ввод х»; z «вывод z»
Контрольные формулы вводятся:
Q3 (x,y,z) & (z > 0) Q5 (x,y - 1,z + x) & (z > x)
Q3 (x,y,z) & (z = 0) Q5 (x,y - 1, x)
Пример
задачи:
1 xy Q6 (x,y) & (y = 0)
- если эта формула выводится, то программа завершена.
2. Интерпретация
формул для конкретных чисел данных
обозначает исполнение алгоритма.
Интерпретация включает:
1) подстановка значений переменных после ввода данных.
2) интерпретация формул после подстановки значений переменных.
3) запуск итерационного процесса (Q1=T) который выполняется с формулами пока Fi+1 не равно Fi.
Формулы можно упорядочить для ускорения итерации. Формулы можно интерпретировать параллельно – это логическое программирование – запись алгоритмов в виде формул и исполнение алгоритмов осуществляется машиной, интерпретирующей формулу.
3. Символическое тестирование – при неполностью определенных данных с целью тестирования алгоритма, в результате интерпретации при частично определенных данных будет получена формула, которая совпадает с исходным определением метода вычисления.
Задаемся множимым х = а; и множителем у = 3.
Интерпретация: подстановки
Q0Q1(x = a, y = 3, z = )
Q2(a, 3, )Q3(a, 3, )
Q5(a, y = 2, z = z + a)
Q2(a, 3, a)
Q5(a, y = 1, z = a + a)
Q2(a, 1, a + a)
Q5(a, y = , z = a + a + a)
Q2(a, , a + a + a)
Q4(a, , a + a + a)
Qk(a, ) - конец программы.
Подтверждается:
4. Частичные вычисления при ограниченных условиях. При интерпретации сохраняется только те формулы, которые применимы при ограниченных данных. Программа адаптируется для конкретных условий работы.
5. В традиционном программирований в неймановской машине используется контрольные формулы, в которых проверяется свойства данных в конкретных точках программы. Практически во всех процедурных языках программирования используется оператор assert(формула), сохраняется признак ( и 1), по которым можно судить о наличии ошибки.