Механизмы логического вывода. Прямая и обратная цепочки рассуждений.
Логи́ческое программи́рование — парадигма программирования, основанная на автоматическом доказательстве теорем, а также раздел дискретной математики, изучающий принципы логического вывода информации на основе заданных фактов и правил вывода. Логическое программирование основано на теории и аппарате математической логики с использованием математических принципов резолюций
Механизм логического вывода обеспечивает формирование заключений, воспринимая вводимые факты как элементы правил, отыскивая правила, в состав которых входят введенные факты, и актуализируя те части продукций, которым соответствуют введенные факты. Теоретической основой построения механизма логического вывода служит теория машины Поста.
Механизм логического вывода выполняет функции поиска в базе правил, последовательного выполнения операций над знаниями и получения заключений. Существует два способа проведения таких заключений – прямые выводы и обратные выводы.
Прямым выводам (прямой цепочке рассуждений) соответствует движение от посылок к следствиям.
Механизм логического вывода, использующий прямые выводы, в качестве образца выбирает введенный в базу данных (рабочую память) факт и если при сопоставлении он согласуется с посылкой правила, то делается заключение , которое тоже помещается в базу данных как факт, описывающий состояние предметной области. Последовательно выводятся новые результаты, начиная с уже известных. Однако отсутствие связи между фактами и может привести к обрыву процедуры и конечный результат не может быть получен. Это считается основным недостатком прямых механизмов логического вывода и требует от пользователя знания всей структуры модели предметной области. Особенно явно этот недостаток проявляется при включении в базу знаний новых фактов и правил: если они не связаны в цепочку с имеющимися фактами, то они становятся балластом – механизм логического вывода никогда их не найдет. С этой точки зрения использование обратной цепочки рассуждений предпочтительнее.
Обратным выводам (обратной цепочке рассуждений) соответствует движение от цели (факта, который требуется установить) к предпосылкам. В обратном механизме логического вывода работа начинается от поставленной цели. Если цель согласуется с консеквентом (заключением) продукции, то антецедент (посылка) принимается за подцель и делается попытка подтверждения истинности этого факта. Процесс повторяется до тех пор, пока не будут просмотрены все правила, имеющие в качестве заключения требуемый факт.
Так, в приведенном примере движение от заключения приводит к необходимости подтверждения факта . Факт может подтвердиться, если подтверждается . Если не подтверждается, то механизм логического вывода отыщет правило, связывающее с и перейдет на анализ второй цепочки правил. Дойдя до правила , система запросит базу данных (рабочую память) или пользователя о справедливости факта . Если факт подтверждается, то происходит возвратное движение по правилам, все факты актуализируются (считаются справедливыми) и цель достигается успешно. В противном случае система явно указывает причину недоказанности выводов, что, в отличие от прямой цепочки рассуждений, облегчает работу пользователя.
- Язык программирования. Общие принципы построения и использования языков программирования.
- Стандарты языков программирования.
- Лямбда-исчисление. Аппликация, абстракция, редукция, преобразование.
- Списки и функциональные выражения в функциональных языках программирования.
- Механизмы и средства взаимодействия программы с операционной системой.
- Функциональное программирование. Основные положения. Основные отличия от других типов языков программирования.
- Классификация языков программирования. Близость языков программирования к естественному языку.
- Унификация и хорновский клоз в логических языках программирования.
- Модель вычислений функциональных языков программирования.
- Языки программирования низкого уровня.
- Средства разработки графического интерфейса пользователя. Эргономические свойства человеко-машинного интерфейса.
- Процедурные языки программирования. Основные отличия от других типов языков.
- Обоснование выбора языка программирования.
- Перегрузка в языках программирования.
- Логические языки программирования. Основные положения и понятия. Основные отличия от других типов языков программирования.
- Объектно-ориентированные языки программирования (ооп). Основные отличия от других концепций языков программирования.
- Полиморфизм в ооп. Виртуальные функции. Таблицы виртуальных функций.
- Структура языка программирования. Синтаксис и семантика языка программирования. Расширенная форма Бэкуса-Наура.
- Наследование в ооп. Множественное наследование. Проблемы множественного наследования.
- Инкапсуляция в ооп. Контроль доступа.
- Понятие класса и объекта в ооп. Атрибуты, методы, конструктор и деструктор, статические члены класса.
- Диаграммы классов uml. Основные элементы и обозначения.
- Данные. Средства описания данных. Типизация языка.
- Преобразования типов. Контроль соответствия типов данных.
- Ооп. Основные концепции ооп.
- Современные интегрированные схемы разработки программ. Основные компоненты среды программирования.
- Декомпозиция программ.
- Трансляторы. Интерпретация и компиляция.
- Макропроцессоры и макрогенераторы.
- Потоки и процессы. Сходства и различия.
- Мониторы и защищаемые переменные в параллельном программировании.
- Семафоры в параллельном программировании. Типы семафоров.
- Отладчики. Генераторы кода и приложений.
- Параллельная обработка данных и параллелизм. Параллельное и распределенное программирование.
- Основные проблемы параллельного и распределенного программирования.
- Оценка максимально возможного параллелизма.
- Основные модели параллельного программирования.
- Оптимизатор. Основные функции оптимизатора.
- Обработка исключительных ситуаций. Иерархия и виды исключительных ситуаций.
- Операторы обработки исключительных ситуаций в различных языках программирования.
- Элементарные типы данных.
- Перегрузка данных, операторов, методов.
- Составные типы данных.
- Механизмы логического вывода. Прямая и обратная цепочки рассуждений.
- Пространство имен, область видимости, время жизни переменных.
- Ошибки при работе с вещественными числами. Смешанная арифметика.
- Операторы выбора и условные операторы.
- Вещественные числа. Способы представления. Операции над вещественными числами.
- Оператор присваивания. Операторы цикла.
- Распределение памяти при выполнении программы.
- Динамические структуры данных. Реализация динамических структур данных с помощью указателей.
- Библиотеки программ и классов. Статические и динамические библиотеки. Критерии проектирования библиотек.
- Подпрограммы. Формальные и фактические параметры подпрограмм.
- Передача параметров подпрограмме.
- Программный стек и его изменение.
- Рекурсивный и итерационный методы решения задач. Виды рекурсий.
- Общая характеристика языков ассемблера: назначение, принципы построения и использования; структура языка.
- Сериализация и десериализация. Методы сериализации объектов в базу данных.