Jump to content

Синтаксис и семантика логического программирования

Логическое программирование — это парадигма программирования , включающая языки, основанные на формальной логике, включая Datalog и Prolog . В этой статье описываются синтаксис и семантика чисто декларативного подмножества этих языков. Как ни странно, название «логическое программирование» также относится к конкретному языку программирования, который примерно соответствует декларативному подмножеству Пролога. К сожалению, в этой статье этот термин следует использовать в обоих смыслах.

Программы декларативной логики полностью состоят из правил вида

H :- B1, ..., BN.

Каждое такое правило можно прочитать как импликацию :

что означает «Если каждый верно, тогда верно». Логические программы вычисляют набор фактов, подразумеваемых их правилами.

Пролога Многие реализации Datalog, Prolog и родственных языков добавляют процедурные функции, такие как оператор вырезания , или экстралогические функции, такие как интерфейс внешней функции . Формальная семантика таких расширений выходит за рамки этой статьи.

Ученый-компьютерщик

[ редактировать ]

Datalog — простейший широко изученный язык логического программирования. Существует три основных определения семантики Datalog, и все они эквивалентны. Синтаксис и семантика других языков логического программирования являются расширениями и обобщениями языка Datalog.

Синтаксис

[ редактировать ]

Программа Datalog состоит из списка правил ( предложений Хорна ). [1] Если константа и переменная представляют собой два счетных набора констант и переменных соответственно, а отношение представляет собой счетный набор символов-предикатов , то следующая грамматика BNF выражает структуру программы регистрации данных:

<program> ::= <rule> <program> | ""
<rule> ::= <atom> ":-" <atom-list> "."
<atom> ::= <relation> "(" <term-list> ")"
<atom-list> ::= <atom> | <atom> "," <atom-list> | ""
<term> ::= <constant> | <variable>
<term-list> ::= <term> | <term> "," <term-list> | ""

Атомы также называют литералами . Атом слева от :- символ называется главой правила; атомы справа — это тело . Каждая программа Datalog должна удовлетворять условию, согласно которому каждая переменная, появляющаяся в заголовке правила, также появляется и в теле (это условие иногда называют ограничением диапазона ). [1] [2]

Правила с пустым телом называются фактами . Например, фактом является следующее правило:

r(x) :- .

Синтаксический сахар

[ редактировать ]

Многие реализации логического программирования расширяют приведенную выше грамматику, позволяя записывать факты без :-, вот так:

r(x).

Многие также позволяют писать 0-арные отношения без скобок, например:

p :- q.

Это просто аббревиатуры ( синтаксический сахар ); они не влияют на семантику программы.

Следующая программа вычисляет соотношение path, что является транзитивным замыканием отношения edge.

edge(x, y).
edge(y, z).
path(A, B) :- 
  edge(A, B).
path(A, C) :- 
  path(A, B), 
  edge(B, C).

Семантика

[ редактировать ]

Существует три широко используемых подхода к семантике программ Datalog: теоретико-модельный , с фиксированной точкой и теоретико-доказательный . Можно доказать, что эти три подхода эквивалентны. [3]

Атом называется основным , если ни один из его подчленов не является переменным. Интуитивно каждая семантика определяет смысл программы как набор всех основных атомов, которые можно вывести из правил программы, исходя из фактов.

Теоретическая модель

[ редактировать ]
Диаграмма Хассе интерпретаций Эрбрана программы Datalog
e(x, y).
e(y, z).
p(A, B) :-
  e(A, B).
p(A, C) :- 
  p(A, B),
  e(B, C).
Интерпретация — минимальная модель Эрбрана. Все интерпретации выше него также являются моделями, все интерпретации ниже него не являются моделями.

Правило называется заземленным, если все его атомы (головка и тело) заземлены. Основное правило R 1 является основным примером другого правила R 2 , если R 1 является результатом замены констант для всех переменных в R 2 .

Базой Эрбрана программы Datalog является набор всех основных атомов, которые можно создать с помощью констант, представленных в программе. Интерпретация ) — (также известная как экземпляр базы данных это подмножество базы Эрбрана. Основной атом истинен в интерпретации I, он является элементом I. если Правило истинно в интерпретации I , если для каждого основного экземпляра этого правила все положения тела истинны в I , то глава правила также истинна I. в

Модель это программы регистрации данных P интерпретация I P , которая содержит все основные факты P и делает все правила P истинными в I. Теоретико-модельная семантика утверждает, что смыслом программы Datalog является ее минимальная модель (т. е. пересечение всех ее моделей). [4]

Например, эта программа:

edge(x, y).
edge(y, z).
path(A, B) :- 
  edge(A, B).
path(A, C) :- 
  path(A, B), 
  edge(B, C).

есть эта вселенная Эрбрана: x, y, z

и эта база Эрбрана: edge(x, x), edge(x, y), ..., edge(z, z), path(x, x), ..., path(z, z)

и эта минимальная модель Эрбрана: edge(x, y), edge(y, z), path(x, y), path(y, z), path(x, z)

Фиксированная точка

[ редактировать ]

Пусть I — набор интерпретаций программы Datalog P , то есть I = P ( H ) , где H — база Эрбрана P , а P оператор набора степеней . Оператором непосредственного следствия для P является следующая карта T от I до I : Для каждого основного экземпляра каждого правила в P , если каждое предложение в теле находится во входной интерпретации, добавьте заголовок основного экземпляра к выходной интерпретации. . Это отображение T монотонно заданного относительно частичного порядка, включением подмножества в T . По теореме Кнастера – Тарского это отображение имеет наименьшую неподвижную точку; по теореме Клини о неподвижной точке неподвижная точка является верхней границей цепи . Наименее неподвижная точка M совпадает с минимальной моделью программы Эрбрана. [5]

Семантика фиксированной точки предлагает алгоритм вычисления минимальной модели Эрбрана: начните с набора основных фактов в программе, затем неоднократно добавляйте последствия правил, пока не будет достигнута фиксированная точка. Этот алгоритм называется наивной оценкой .

теоретико-доказательный

[ редактировать ]
Дерево доказательств, показывающее происхождение основного атома path(x, z) из программы
edge(x, y).
edge(y, z).
path(A, B) :- 
  edge(A, B).
path(A, C) :- 
  path(A, B), 
  edge(B, C).

Для данной программы P дерево доказательства основного атома A представляет собой дерево с корнем, помеченным A , листьями, помеченными основными атомами из голов фактов в P , и ветвями с дочерними элементами. помечены основными атомами G, так что существует основной экземпляр

G :- A1, ..., An.

правила в P . Теоретико-доказательная семантика определяет смысл программы Datalog как набора основных атомов, которые можно выделить из таких деревьев. Это множество совпадает с минимальной моделью Эрбрана. [6]

Кто-то может заинтересоваться, появляется ли конкретный основной атом в минимальной модели Эрбрана программы Datalog или нет, возможно, не особо заботясь об остальной части модели. Чтение сверху вниз деревьев доказательств, описанных выше, подсказывает алгоритм вычисления результатов таких запросов , такое чтение информирует алгоритм разрешения SLD , который формирует основу для оценки Пролога .

Другие подходы

[ редактировать ]

Семантика Datalog также изучалась в контексте фиксированных точек над более общими полукольцами . [7]

Логическое программирование

[ редактировать ]

Хотя название «логическое программирование» используется для обозначения всей парадигмы языков программирования, включая Datalog и Prolog, при обсуждении формальной семантики оно обычно относится к расширению Datalog с помощью функциональных символов . Логические программы также называются предложений Хорна программами . Логическое программирование, обсуждаемое в этой статье, тесно связано с «чистым» или декларативным подмножеством Пролога .

Синтаксис

[ редактировать ]

Синтаксис логического программирования расширяет синтаксис журнала данных функциональными символами. Логическое программирование снимает ограничение диапазона, позволяя переменным появляться в заголовках правил, которые не появляются в их телах. [8]

Семантика

[ редактировать ]

Благодаря наличию функциональных символов модели логических программ Эрбрана могут быть бесконечными. Однако семантика логической программы по-прежнему определяется как ее минимальная модель Эрбрана. Соответственно, неподвижная точка оператора непосредственного следствия может не сходиться за конечное число шагов (или к конечному множеству). Однако любой основной атом в минимальной модели Эрбрана будет иметь конечное дерево доказательств. Вот почему Пролог оценивается сверху вниз. [8] Как и в Datalog, можно доказать, что три семантики эквивалентны.

Отрицание

[ редактировать ]

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

Синтаксис

[ редактировать ]

Отрицание написано notи может располагаться перед любым атомом в тексте правила.

<atom-list> ::= <atom> | "not" <atom> | <atom> "," <atom-list> | ""

Семантика

[ редактировать ]

Расслоенное отрицание

[ редактировать ]

Логическая программа с отрицанием является стратифицированной когда можно отнести каждое отношение к некоторому слою , так что если отношение R оказывается отрицаемым в теле отношения S , то R находится в более низком слое, чем S. , [9] Теоретико-модельная семантика Datalog и семантика фиксированной точки могут быть расширены для обработки послойного отрицания, и такие расширения могут быть признаны эквивалентными.

Во многих реализациях Datalog используется восходящая модель оценки, основанная на семантике фиксированной точки. Поскольку эта семантика может обрабатывать послойное отрицание, некоторые реализации Datalog реализуют послойное отрицание.

Хотя стратифицированное отрицание является распространенным расширением Datalog, существуют разумные программы, которые не могут быть стратифицированы. Следующая программа описывает игру для двух игроков, в которой игрок побеждает, если у его противника нет ходов: [10]

move(a, b).
win(X) :- move(X, Y), not win(Y).

Эта программа не стратифицирована, но кажется разумным предположить, что a должен выиграть игру.

Семантика завершения

[ редактировать ]

Идеальная семантика модели

[ редактировать ]

Стабильная семантика модели

[ редактировать ]

Семантика стабильной модели определяет условие для вызова определенных моделей Эрбрана программы стабильной . Интуитивно, стабильные модели — это «возможные наборы убеждений, которых мог бы придерживаться рациональный агент, учитывая [программу]» в качестве предпосылок. [11]

Программа с отрицанием может иметь много стабильных моделей или не иметь стабильных моделей. Например, программа

p :- not q.
q :- not p.

имеет две стабильные модели , . Программа с одним правилом

p :- not p.

не имеет стабильных моделей.

Каждая стабильная модель является минимальной моделью Эрбрана. Программа Datalog без отрицания имеет единственную стабильную модель, которая в точности является ее минимальной моделью Эрбрана. Семантика стабильной модели определяет смысл логической программы с отрицанием, которая является ее стабильной моделью, если она существует. Однако может быть полезно исследовать все (или хотя бы несколько) стабильных моделей программы; это цель программирования набора ответов .

Хорошо обоснованная семантика

[ редактировать ]

Дальнейшие расширения

[ редактировать ]

Было предложено и изучено несколько других расширений Datalog, включая варианты с поддержкой целочисленных констант и функций (включая DatalogZ ), [12] [13] ограничения неравенства в телах правил и агрегатные функции .

Программирование логики ограничений позволяет ограничениям в таких областях, как действительные или целые числа, появляться в телах правил.

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Jump up to: а б Кери, Готтлоб и Танка 1989 , с. 146.
  2. ^ Эйснер, Джейсон; Филардо, Натаниэль В. (2011). де Моор, Оге; Готтлоб, Георг; Фурче, Тим; Селлерс, Эндрю (ред.). Dyna: расширение журнала данных для современного искусственного интеллекта . Datalog Reloaded, Первый международный семинар, Datalog 2010, Оксфорд, Великобритания, 16–19 марта 2010 г. Конспекты лекций по информатике. Том. 6702. Берлин, Гейдельберг: Springer. стр. 181–220. дои : 10.1007/978-3-642-24206-9_11 . ISBN  978-3-642-24206-9 .
  3. ^ ван Эмден, Миннесота; Ковальский, Р.А. (1 октября 1976 г.). «Семантика логики предикатов как языка программирования» . Журнал АКМ . 23 (4): 733–742. дои : 10.1145/321978.321991 . ISSN   0004-5411 . S2CID   11048276 .
  4. ^ Кери, Готтлоб и Танка 1989 , стр. 149.
  5. ^ Кери, Готтлоб и Танка 1989 , стр. 150.
  6. ^ Абитбул, Серж (1996). Основы баз данных . Аддисон-Уэсли. ISBN  0-201-53771-0 . OCLC   247979782 .
  7. ^ Хамис, Махмуд Або; Нго, Хунг К.; Пихлер, Рейнхард; Сучу, Дэн; Ван, Ису Реми (01 февраля 2023 г.). «Сходимость регистрации данных по (предварительным) полукольцам». arXiv : 2105.14435 [ cs.DB ].
  8. ^ Jump up to: а б Абитебул 1996 , с. 299.
  9. ^ Халеви, Алон Ю.; Мумик, Индерпал Сингх; Сагив, Иегошуа; Шмуэли, Одед (1 сентября 2001 г.). «Статический анализ в расширениях журналов данных» . Журнал АКМ . 48 (5): 971–1012. дои : 10.1145/502102.502104 . ISSN   0004-5411 . S2CID   18868009 .
  10. ^ Леоне, Н; Рулло, П. (1 января 1992 г.). «Безопасное вычисление обоснованной семантики запросов журнала данных» . Информационные системы . 17 (1): 17–31. дои : 10.1016/0306-4379(92)90003-6 . ISSN   0306-4379 .
  11. ^ Гельфонд, Майкл; Лифшиц, Владимир (1988). «Семантика стабильной модели для логического программирования». Ковальски, Роберт; Боуэн, Кеннет (ред.). Материалы Международной конференции и симпозиума по логическому программированию . МТИ Пресс. стр. 1070–1080.
  12. ^ Камински, Марк; Грау, Бернардо Куэнка; Костылев Егор Владимирович; Мотик, Борис; Хоррокс, Ян (12 ноября 2017 г.). «Основы декларативного анализа данных с использованием программ предельной регистрации данных». arXiv : 1705.06927 [ cs.AI ].
  13. ^ Грау, Бернардо Куэнка; Хоррокс, Ян; Камински, Марк; Костылев Егор Владимирович; Мотик, Борис (25 февраля 2020 г.). «Предельный журнал данных: декларативный язык запросов для анализа данных» . Запись ACM SIGMOD . 48 (4): 6–17. дои : 10.1145/3385658.3385660 . ISSN   0163-5808 . S2CID   211520719 .

Источники

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6a37c885e8156190e4fc963fdadd732f__1707721620
URL1:https://arc.ask3.ru/arc/aa/6a/2f/6a37c885e8156190e4fc963fdadd732f.html
Заголовок, (Title) документа по адресу, URL1:
Syntax and semantics of logic programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)