Содержание
-
Введение в Пролог
-
В октябре 1981 года Японское министерство международной торговли и промышленности объявило о создании исследовательской организации — Института по разработке методов создания компьютеров нового поколения (InstituteforNewGenerationComputerTechnologyResearchCenter). Целью данного проекта было создание систем обработки информации, базирующихся на знаниях. Предполагалось, что эти системы будут обеспечивать простоту управления за счет возможности общения с пользователями при помощи естественного языка. Эти системы должны были самообучаться, использовать накапливаемые в памяти знания для решения различного рода задач, предоставлять пользователям экспертные консультации, причем от пользователя не требовалось быть специалистом в информатике. Предполагалось, что человек сможет использовать ЭВМ пятого поколения так же легко, как любые бытовые электроприборы типа телевизора, магнитофона и пылесоса. Вскоре вслед за японским стартовали американский и европейский проекты.
-
Появление таких систем могло бы изменить технологии за счет использования баз знаний и экспертных систем. Основная суть качественного перехода к пятому поколению ЭВМ заключалась в переходе от обработки данных к обработке знаний. Японцы надеялись, что им удастся не подстраивать мышление человека под принципы функционирования компьютеров, а приблизить работу компьютера к тому, как мыслит человек, отойдя при этом от фон неймановской архитектуры компьютеров. В 1991 году предполагалось создать первый прототип компьютеров пятого поколения
-
В качестве основной методологии разработки программных средств для проекта ЭВМ пятого поколения было избрано логическое программирование, ярким представителем которого является язык Пролог. В настоящее время Пролог остается наиболее популярным языком искусственного интеллекта в Японии и Европе (в США, традиционно, более распространен другой язык искусственного интеллекта —язык функционального программирования Лисп).
-
Название языка "Пролог"происходит от слов ЛОГическоеПРОграммирование (PROgrammationenLOGique во французском варианте и PROgramminginLOGic — в английском). Пролог основывается на таком разделе математической логики, как исчисление предикатов.
-
Традиционно под программой понимают последовательность операторов (команд, выполняемых компьютером). Этот стиль программирования принято называть императивным. Программируя в императивном стиле, программист должен объяснить компьютеру, как нужно решать задачу. Противоположный ему стиль программирования — так называемый декларативный стиль, в котором программа представляет собой совокупность утверждений, описывающих фрагмент предметной области или сложившуюся ситуацию. Программируя в декларативном стиле, программист должен описать, что нужно решать.
-
Соответственно и языки программирования делят на императивные и декларативные. Императивные языки основаны на фон неймановской модели вычислений компьютера. Решая задачу, императивный программист вначале создает модель в некоторой формальной системе, а затем переписывает решение на императивный язык программирования в терминах компьютера. Но, во-первых, для человека рассуждать в терминах компьютера довольно неестественно. Во-вторых, последний этап этой деятельности (переписывание решения на язык программирования) по сути дела не имеет отношения к решению исходной задачи. Очень часто императивные программисты даже разделяют работу в соответствии с двумя описанными выше этапами. Одни люди, постановщики задач, придумывают решение задачи, а другие, кодировщики, переводят это решение на язык программирования.
-
В основе декларативных языков лежит формализованная человеческая логика. Человек лишь описывает решаемую задачу, а поиском решения занимается императивная система программирования. В итоге получаем значительно большую скорость разработки приложений, значительно меньший размер исходного кода, легкость записи знаний на декларативных языках, более понятные, по сравнению с императивными языками, программы.
-
Основные области применения Пролога:
быстрая разработка прототипов прикладных программ; автоматический перевод с одного языка на другой; создание естественно-языковых интерфейсов для существующих систем; символьные вычисления для решения уравнений, дифференцирования и интегрирования; проектирование динамических реляционных баз данных; экспертные системы и оболочки экспертных систем; автоматизированное управление производственными процессами; автоматическое доказательство теорем; полуавтоматическое составление расписаний; системы автоматизированного проектирования; базирующееся на знаниях программное обеспечение; организация сервера данных или, точнее, сервера знаний, к которому может обращаться клиентское приложение, написанное на каком-либо языке программирования
-
Области, для которых Пролог не предназначен: большой объем арифметических вычислений (обработка аудио, видео и т.д.); написание драйверов.
-
Имена конкретных объектов, отношений, свойств образуются по определенным правилам, зависящим от версии языка Пролог, и называются символическими именами. Символическое имя (атом) – это неразрывная цепочка букв, цифр и символа подчеркивания, начинающаяся со строчной латинской (русской) буквы. Для именования объектов и их свойств могут использоваться строки – последовательности любых символов, заключенные в двойные кавычки. Например: стол, студент,table_1, «группа 408». Для описания в программе некоторого объекта, принадлежащего определенному классу, используется переменная. Переменная в программе представляется своим именем. Имя переменной в Прологе – это латинских букв или цифр, начинающихся с прописной латинской буквы или символа подчеркивания. Примеры имен переменных: D, X,Y,_P, Leda
-
Чтобы описать отношение, необходимо указать его имя и перечислить либо классы объектов, либо конкретные объекты, связываемые этим отношением (, , …,) Для описания отношений в программе на Прологе используются предикаты. Предикат – это логическая функция от nаргументов, имеющая только два значения «истина» или «ложь»: , , …,)
-
Знания о предметной области выражаются на языке Пролог в виде предложений, называемых утверждениями (СLAUSES). . /*факт*/ или :-./*правило*/ где заголовок является предикатом и полностью характеризует описываемое отношение. Тело утверждения состоит либо из одного предиката либо из списка предикатов, разделенных знаками “,”“;”, “not”, соответствующими логическим операциям И, ИЛИ, НЕ .
-
DOMAINS /*описание типов данных*/ name = string FACTS /*описание динамической базы данных*/ закуска (name) мясо (name) рыба (name) десерт (name) СLAUSES /*утверждения (факты и правила) БЗ*/ закуска («артишоки_в_белом_соусе»). закуска («трюфели_в_шампанском»). закуска («салат_с_яйцом»). мясо («говяжье_жаркое»). мясо («цыпленок_в_соусе»). рыба («окунь_во_фритюре»). рыба(«фаршированный_судак»). десерт(«грушевое_мороженое»).
-
-
Программа начинает выполняться, если в неё ввести те вопросы, ответы на которые хочет получить пользователь. Для этого предназначен раздел GOAL (Цель). В нем записываются необходимые вопросы – третий тип утверждений в программе на Прологе GOAL рыба (*окунь_во_фритюре*). yes
-
GOAL закуска (Х). Х= артишоки_в_белом_соусе Х= трюфели_в_шампанском Х= салат_с_тунцом
-
PREDICATES /*Определение предиката блюдо*/ блюдо (name) СLAUSES блюдо(Y):-мясо(Y) блюдо(Y):-рыба (Y)
-
GOAL блюдо(Y). Y=говяжье_жаркое Y=цыпленок_в_соусе Y=окунь_во_фритюре Y=фаршированный_судак
-
/*Определение отношения «обед»*/ обед (X,Y,Z):- закуска (X), блюдо(Y), десерт(Z). обед (X,Y, Z). программа выдаст список всех возможных комбинаций из трех блюд: X = артишоки_в_белом_соусе, Y = говяжье_жаркое, Z= грушевое_мороженое … GOAL обед (X,Y, Z), рыба (Y). GOAL
-
-
Примеры правил:
любит (X, «баскетбол»):- любит (X, «бег»). можно купить (X) :-есть в магазине(X,V),VV2.
-
Варианты студентов
Нравится(Х, "пироженое»):-любит (Х, «сладкое) Выше (Х1,Х2):-рост(Х1,У1), рост (Х2,У2),У1>У2 Нужно закупать(х):-есть на складе(х),хУ2
-
Нравится(Х, “Mercedes”):-нравится(Х,” немецкий автопром”) Опытнее(Х1,Х2):-стаж(Х1,V1),стаж(X2, V2), V1>V2
-
DOMAINS /*описание типов данных*/ kol_vo= integer FACTS /*описание динамической базы данных*/ калории (name,kol_vo ) СLAUSES /*утверждения (факты и правила) БЗ*/ калории(«артишоки_в_белом_соусе», 150). калории («трюфели_в_шампанском», 212 ). калории («салат_с_яйцом», 202). калории(«говяжье_жаркое», 532). калории(«цыпленок_в_соусе», 400). калории(«окунь_во_фритюре», 270). калории(«фаршированный_судак», 254). калории(«грушевое_мороженое», 223). калории («земляника _со_сливками», 289).
-
GOAL закуска (Х), калории(X,Y). PREDICATES значение (name, name, name, kol_vo) сбалансированный_обед(name, name, name) СLAUSES /*Определение отношения «калорийность обеда»*/ значение (X,Y,Z,V):- калории(X,E), калории(Y, P), калории(Z,D), V=E+P+D сбалансированный_обед(X,Y,Z):-обед (X,Y, Z), значение (X,Y,Z,V),V
-
PREDICATES /*Определение предикатов*/ СLAUSES /*утверждения (факты и правила) БЗ*/ GOAL DOMAINS /*описание типов данных*/ FACTS ( DATABASE) /*описание динамической базы данных*/
-
Структура раздела утверждений программы
База знаний (программа на языке Пролог) Определение отношения 1 Утверждение 1 Утверждение 2 Утверждение n факт Правило Определение отношения 2 Определение отношения n
-
symbol – символическое имя string - строка char - отдельный символ, заключенный в апострофы Integer целое число в диапазоне от -32768 до 32767 byte - целое число в диапазоне от 0 до 255 word целое число в диапазоне от 0 до 65535 real- любое число
-
Пять основных операций определяют реляционную алгебру:
Объединение Симметрическая разность Декартово произведение Проекция Выборка
-
Объединение
r_unon_s(X1,X2,…, Xn) :- r(X1,X2,…, Xn). r_unon_s(X1,X2,…, Xn) :- s(X1,X2,…, Xn). Пример: блюдо(Y):-мясо(Y). блюдо(Y):-рыба (Y).
-
Симметрическая разность
r_diff_s( X1,X2,…, Xn) :- r(X1,X2,…, Xn), not s(X1,X2,…, Xn). r_diff_s(X1,X2,…, Xn) :- s(X1,X2,…, Xn), not r(X1,X2,…, Xn). Пример: футболист_либо_волейболист(X) :- футболист(X), not волейболист(X). футболист_либо_волейболист() :- волейболист(X), not футболист(X)
-
Декартово произведение
r_x_s(X1,X2,…,Xn, Y1,Y2,…,Yn):- r(X1,X2,…Xn), s(Y1,Y2,…,Yn). Пример: /*Определение отношения «обед»*/ обед (X,Y,Z):- закуска (X), блюдо(Y), десерт(Z).
-
Проекция
r7(X1, X3):- r(X1,X2, …, Xn). Пример: аптека( 6, «Цвиллинга, 6», «264-67-66»). телефон_аптеки(NomApt,TelApt):- аптека(NomApt, _, TelApt).
-
Выборка
rv(X1, X3):- r(X1,X2,X3), X2>X1 Пример: аптека( 6, «Цвиллинга, 6», «264-67-66»). телефон_аптеки(NomApt,TelApt):- аптека(NomApt, _, TelApt), NomApt
-
-
name, child, grandchild – string Parent(name, child) nondetermed Grandparent(name, grandchild) Parent(Pam,Bob) Parent(Tom,Bob) Parent(Tom,Liz) Parent(Bob,Ann) Parent(Bob,Pat) Parent(Pat,Jim) Grandparent(Pam, Ann) Grandparent(Tom, Ann) Grandparent(Bob, Jim) Grandparent(Pam, Pat) Grandparent(Tom,Pat )
-
-
-
-
-
-
-
-
-
-
-
-
Рассмотрим следующие предложения на естественном языке:
«Маше нравятся цветы» «Аня любит сына» Сын Ани любит Машу «Оля любит всех, кого любит Аня» «Нам нравится всё, что нравится человеку, которого мы любим» Как можно записать эти предложения в виде фактов ?
-
нравится (маша, цветы) любит (аня, сын(аня)) любит (сын(аня), маша)
-
Четвертое предложение задает правило: «Для любого Х, если любит (аня, Х), то из этого следует, что любит (оля, Х)» Запишем это правило в виде импликации: любит (оля, Х) любит (аня, Х),
-
Антон, Миша и Женя – члены альпинклуба. Каждый член альпинклуба или горнолыжник, или скалолаз или и то, и другое. Никто из скалолазов не любит дождь. Все горнолыжники любят снег. Миша любит всё, что не любит Антон, и не любит всё, что любит Антон. Антон любит снег и дождь. Есть ли член альпинклуба, который является скалолазом и не является горнолыжником? И Кто он?
-
Вариант Ивана Пименова
DOMAINS Name string PREDICATES Горнолыжник (Name) Скалолаз (Name) Любит_дождь (Name) Любит_снег (Name) FACTS горнолыжник (Name):-любит_снег (Name) скалолаз (Name):- notлюбит_дождь (Name) CLAUSES Любит_снег(Антон) Любит_дождь(Антон) Любит_снег(Миша):- not Любит_снег(Антон) Любит_дождь(Миша):- not Любит_дождь(Антон) Not Любит_снег(Миша):-Любит_снег(Антон) Not Любит_дождь(Миша):-Любит_дождь(Антон) GOAL ? Скалолаз(Name), not горнолыжник(name)
-
DOMAINS /*задание областей данных*/ Name = anton;misha;jenia /*Область Name это или anton или misha или jenia */ Weather = rain;snow /*Определение области Weather */ Spec = skalolaz;gornolysnik /*Определение области Spec */
-
PREDICATES /*Определение предикатов*/ club (Name) /* Name является членом клуба*/ nlike (Name, Weater) /* Name не нравится Weater*/ like (Name, Weater) /* Name нравится Weater*/ is (Name, Spec) /* Name по специализации Spec */ question /*Теорема, которую нужно доказать*/
-
Факты и правила
CLAUSES club(anton). club(misha). club(jenia). like(anton, snow). like(anton, rain). like(misha,X) :- not(like(anton,X)). nlike(X,Y):-not(like(X,Y)). nlike(misha,Y):-like(anton,Y). is (X, gornolysnik):- club(X), like(X,snow). is (X, skalolaz):-club(X), not(like(X,rain)).
-
Выясняем имя того, кто является скалолазом и не является горнолыжником. Предикат неудачи – fail , заставляет перейти к следующему определению question
question:- readchar(), nl, is(Name, skalolas),not(is(Name,gornolysnik)), cursor(10,20), write(“Скалолаз,но не горнолыжник), wrute (Name), readchar(),nl,fail.
-
Выясняем имя того, кто является искалолазом и горнолыжником.
question:- nl, is(Name, skalolas),is(Name,gornolysnik), cursor(12,20), write(“Скалолаз и горнолыжник: “), wrute (Name), readchar(),nl,fail. Какая специализация у Антона question:- nl, is(anton, Spec), cursor(14,20), write(“anton -“, Spec), readchar(),nl,fail.
-
question:- nl, is(Name, gornolysnik), not (is(Name,skalolas)), cursor(16,20), write(“Не скалолаз, но горнолыжник: “), wrute (Name), readchar(),nl,fail. GOAL question.
-
Король думает, что королева думает, что она не в своем уме. В своем ли уме король?
DOMAINS /*Описание областей данных*/ Name = KL; KWA Swoystwo = wume;newume /* Swoystwoможет принимать значение wumeилиnewume*/ Mysly = imeet_mesto(Swoystwo, Swoystwo) /*Mysly- это то, о чем можно думать*/
-
PREDICATES /*Описание предикатов*/ mojetbyt (Swoystwo) /* mojetbyt - cвойство, принимающее значение из областиSwoystwo*/ imeet_mesto(Swoystwo, Swoystwo) dumaet (Swoystwo, Mysly) wopros
-
CLAUSES /*Описание предметной области*/ mojetbyt (wume). mojetbyt (newume). /*можно быть или « в своем уме» или «не в своем уме»*/
-
dumaet (wume, imeet_mesto(X,Y)):- imeet_mesto(X,Y). /*»в своем уме» думает то, что есть на самом деле*/
-
dumaet(newume, imeet_mesto(X,Y)):-not imeet_mesto(X,Y)). /*» не в своем уме» думает то, чего нет на самом деле*/
-
imeet_mesto(X,Y). /*на самом деле, есть то, что есть*/
-
wopros:- mojetbyt(KL), mojetbyt(KWA), dumaet (KL, dumaet(KWA, imeet_mesto(KWA, newume))), nl, write («Королева -», KWA, «король - », KL), nl, fail.
-
GOAL /*Запрос или теорема, которую нужно доказать*/ wopros
Нет комментариев для данной презентации
Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.