Логическое программировыание Лекция 3 Основные понятия Пролога.

Презентация:



Advertisements
Похожие презентации
Логика первого порядка ХНУРЭ, кафедра ПО ЭВМ, Тел , Лекции Н.В. Белоус Факультет компьютерных наук Кафедра.
Advertisements

Логика первого порядка ХНУРЭ, кафедра ПО ЭВМ, Тел , Лекции Н.В. Белоус Факультет компьютерных наук Кафедра.
Предикаты и формулы. Интерпретации. Истинность и выполнимость формул. Нормальные формы.
Светлана Ахматова TVTB17. Содержание Введение Что такое логическое программирование? Planner Backtracking Стек Prolog 1.1 Пример программы: родственные.
Алексеева Е.В., учитель информатики и ИКТ, МОУ «Сланцевская СОШ 3» Основы логики.
Нормальные формы ХНУРЭ, кафедра ПО ЭВМ, Тел , Лекция 6 Н.В. Белоус Факультет компьютерных наук Кафедра ПО ЭВМ,
Логическое программировыание Презентация 5 Списки в Прологе.
1 Переменные Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно изменять во время работы программы. Значение Имя Поместится?
Сложные высказывания можно записывать в виде формул. Для этого простые логические высказывания нужно обозначить как логические переменные буквами и связать.
1 Кубенский А.А. Функциональное программирование. Глава 4. Основы лямбда-исчисления. Будем задавать функции с помощью «лямбда-выражений», которые будем.
Знакомство с языком Паскаль. Язык Pascal был создан в начале 70-х годов XX века Никлаусом Виртом. Основой для этого языка послужил широко распространенный.
Введение в формальные (аксиоматические) системы. Формальные системы - это системы операций над объектами, понимаемыми как последовательность символов.
Логическое программирование и язык Пролог. План лекции: 1.Понятие логического программирования. 2.Типы предложений в Прологе. 3.Объекты данных – термы.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Переменные и операторы УРОК 2. Переменные ПЕРЕМЕННАЯ – ?... контейнер для хранения данных. Переменная имеет имя – это….? последовательность букв, цифр.
Списки в языке Пролог. Определение Список упорядоченное множество объектов одинакового типа. Формально это определение соответствует определению массива.
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Сошников Д.В. Факультет инноваций и высоких технологий Московский физико-технический.
1 Программирование на языке Паскаль Тема 1. Введение Кулебякин В.В.
1 Программирование на языке Паскаль Тема 1. Введение.
Транксрипт:

Логическое программировыание Лекция 3 Основные понятия Пролога

Содержание Основные понятия Вводный пример программы Определения согласно нотации БНФ Факты Правила Вопросы Пример – генеалогическое дерево 2

Пример первой программы 3 % Программа: определение специальности (квалификации) студента % факты studied(petya,mathematics). studied(vasya,german). studied(petya,compscience). studied(vasya,literature). studied(petya,english). % правила studied_technical(X) :- studied(X,mathematics). studied_technical(X) :- studied(X,compscience). studied_languages(X) :- studied(X,english). studied_languages(X) :- studied(X,german). speciality(X,tech_translator) :- studied_languages(X), studied_technical(X). speciality(X,programmer) :- studied(X,mathematics), studied(X, compscience). speciality(X,lit_translator) :-studied_languages(X), studied(X,literature). % запросы % ?- speciality(vasya, X). % ?- speciality(X, lit_translator).

Механизм логического вывода 4

Дерево И - ИЛИ 5

Дерево вывода 6

Нормальная форма Бэкуса - Наура ( БНФ ) 3 Символ ::= читается как " по определению "," это ", " есть ". Слева объясняемое понятие, справа - конструкция, разъясняющая его. Пример : ::= Символ | означает в нотации БНФ " или ", он применяется для разделения различных альтернативных растолкований определяемого понятия. Пример : ::= 0|1|2|3|4|5|6|7|8|9 Часть синтаксической конструкции, заключенная в квадратные скобки, является необязательной ( может присутствовать или отсутствовать ); Пример : ::= [-] Символ * обозначает, что часть синтаксической конструкции может повторяться произвольное число раз ( ноль и более ). Пример. ::= [ ]*.

Механизм работы логического интерпретатора 8 Запрос (целевое утверждение) сопоставляется (унифицируется) с головами имеющихся в программе правил и фактов. Начиная с первого найденного правила, целевое утверждение подменяется правой частью правила (с учетом замены переменных) Если встречается неуспех (правило не находится), то происходит откат

Базовые термины Пролога 9 Предложение имеет вид : A:- B 1,..., B n где A называется заголовком или головой предложения, а B 1,..., B n - телом. В математической логике отношения принято называть предикатами. Факт констатирует, что между объектами выполнено некоторое отношение. Он состоит только из заголовка. Т. е. это предложение, у которого тело пустое. Пример : известный нам факт, что Наташа является мамой Даши, может быть записан так : mother('Наташа', 'Даша').

Предикат и его свойства 10 Если воспользоваться нормальной формой Бэкуса - Науэра, то предикат можно определить следующим образом : ::= | ( [, ]*), т. е. предикат состоит либо только из имени, либо из имени и следующей за ним последовательности аргументов, заключенной в скобки. Аргументом или параметром предиката может быть константа, переменная или составной объект. Число аргументов предиката называется его арностью или местностью. Константа получает свое значение в разделе описания констант, а переменная означивается в процессе работы программы.

Правила 11 Правило - это предложение, истинность которого зависит от истинности одного или нескольких предложений. Обычно правило содержит несколько хвостовых целей, которые должны быть истинными для того, чтобы правило было истинным. В нотации БНФ правило будет иметь вид : ::= :- [, ]* Пример. Известно, что бабушка человека - это мама его мамы или мама его папы. Соответствующие правила будут иметь вид : бабушка(X,Y):- мама(X,Z), мама(Z,Y). бабушка(X,Y):- мама(X,Z), папа(Z,Y).

Переменные 12 Переменные - данные, имеющие имя, представляющее собой набор букв и цифр, и обозначающие какой - либо объект / сущность. Имя переменной в Прологе может состоять из букв латинского алфавита, цифр, знаков подчеркивания и должно начинаться с прописной буквы или знака подчеркивания. Свободная переменная - это переменная, которая еще не получила значения. Она не равняется ни нулю, ни пробелу ; у нее вообще нет никакого значения. Такие переменные еще называют неконкретизированными. Переменная, которая получила какое - то значение и оказалась связанной с определенным объектом, называется связанной. Если переменная была конкретизирована каким - то значением и ей сопоставлен некоторый объект, то эта переменная уже не может быть изменена.

Вопросы 13 Вопрос состоит только из тела и может быть выражен с помощью БНФ в виде : ::= [, ]* Вопросы используют для выяснения выполнимости некоторого отношения между описанными в программе объектами. Система рассматривает вопрос как цель, к которой надо стремиться. Ответ на вопрос может оказаться положительным или отрицательным, в зависимости от того, может ли быть достигнута соответствующая цель.

Цели 14 Программа может содержать вопрос в себе ( внутренняя цель ). Если программа содержит внутреннюю цель, то после запуска программы на выполнение система проверяет достижимость заданной цели. Если внутренней цели в программе нет, то после запуска программы система выдает приглашение вводить вопросы в диалоговом режиме ( внешняя цель ). Если цель достигнута, система отвечает, что у нее есть информация, позволяющая сделать вывод об истинности вопроса ("Yes"). При этом если в вопросе содержатся переменные, то система либо выдает их значения, приводящие к решению, если решение существует, либо сообщает, что решений нет ("No solution"). Если достичь цели не удалось, система ответит, что у нее нет положительного ответа ("No").

Пример 15 Факты : mother('Наташа','Даша'). mother('Даша','Маша'). Вопросы : mother('Наташа','Маша'). => No mother(X, 'Даша').=> X='Наташа'; mother(X,Y).=> X='Наташа'; Y='Даша';X='Даша; Y='Маша'; mother(X,_). => X='Наташа'; X='Даша'; mother(_,_).=> Yes Новое правило: granny(X,Y):- mother(X,Z), mother (Z,Y). ?- granny('Наташа', X). X='Маша';

Классический пример … ( для лабоработрной работы 1) 16

Описание отношений родства 17

Пример правила : Отношение « родные брат / сестра » 18

Усовершенствованный пример 19

Отношение предки / потомки 20

Примеры отношений … 21 % Отношение родства – «родитель»; логическое «ИЛИ» rel(parent,X,Y) :- rel(mother,X,Y); rel(father,X,Y). ?- rel(X, nicolas_ii, olga_1). X = father % определяем одно отношение из другого («ребенок»): rel(child,X,Y) :- rel(parent,Y,X). % отчим (неродной отец); лгичекое «НЕ» rel(stepfather,X,Y):- mother(Z,Y), married(X,Z), not(father(X,Y)). % брат; логическое неравенство rel(brother,X,Y) :- rel(mother,A,X), rel(mother,A,Y), rel(father,B,X), rel(father,B,Y), X\=Y. ?- rel(X,nicolas_1,anna). X = brother

Выводы 22 Программы на прологе состоят из фактов и правил вывода новых фактов. Другое название правила (отношения) – Предикат, состоит из заголовка и тела Переменные бывают свободными (неконкретизированными) и связанными (конкретизированными). Освоить базовую технику работу с предикатами можно при решении задачи о родственных связях (л.р. 1) Задание: выполнить упражнение из л.р. 1 согласно своему номеру варианта; дополнить правила предиката rel определяемыми отношениями