Что такое Prolog и где он применяется

Урок рассказывает, откуда взялся Prolog, что означает его название, где он реально применяется и в чём его сильные и слабые стороны.

Prolog (от франц. PROgrammation en LOGique — «программирование в логике») — основной язык логического программирования, созданный в начале 1970-х для работы с отношениями, фактами и автоматическим логическим выводом.

Мы уже почувствовали дух декларативного подхода. Теперь полезно отступить и посмотреть на язык в целом: как он появился, для чего его придумали и почему спустя полвека он по-прежнему жив в определённых нишах. Понимание контекста помогает выбирать инструмент осознанно.

История: Марсель и логика

Prolog родился в 1972 году в Марселе. Его создали французский информатик Ален Колмероэ (Alain Colmerauer) и его коллега Филипп Руссель при участии логика Роберта Ковальски, чьи работы по процедурной интерпретации хорновских дизъюнктов дали теоретическую базу. Изначально язык создавался для обработки естественного языка — Колмероэ работал над системами, понимающими французский. Оказалось, что аппарат логики предикатов удобен не только для лингвистики, но и для широкого класса задач, и Prolog зажил самостоятельной жизнью.

Название прямо отражает суть: PROgrammation en LOGique. Программа — это логика, записанная исполнимо. В 1980-х Prolog получил мощный импульс: японский государственный проект «ЭВМ пятого поколения» сделал ставку именно на логическое программирование как на основу будущего искусственного интеллекта. Проект не достиг всех амбициозных целей, но закрепил Prolog в академической и исследовательской культуре.

Где Prolog применяется

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

  • Искусственный интеллект и символьные вычисления. Классическая ниша: рассуждения над символами и правилами, а не над числами.
  • Экспертные системы. Системы, которые ставят диагноз, дают рекомендации, проверяют соответствие нормам. База правил «если симптомы, то диагноз» ложится на Prolog один к одному.
  • Обработка естественного языка (NLP). Историческая родина языка. Грамматики удобно описывать декларативно; в Prolog для этого есть встроенный механизм DCG (определённо-клаузальные грамматики).
  • Базы знаний и онтологии. Хранение фактов и логический вывод новых фактов из имеющихся.
  • Верификация и анализ. Проверка ограничений, статический анализ, доказательство свойств, задачи на удовлетворение ограничений (планирование, расписания, головоломки).
  • IBM Watson. Знаменитая система, обыгравшая людей в Jeopardy!, использовала Prolog для разбора вопросов и сопоставления грамматических шаблонов — наглядный пример практической ценности языка в современной системе.

Маленький пример экспертной системы

Чтобы почувствовать естественность языка, взгляните на крошечную экспертную базу — упрощённый «определитель животного по признакам».

% Правила-гипотезы
zhivotnoe(gepard) :- mlekopitayushchee, hishchnik, ryzhij, pyatna.
zhivotnoe(zhiraf)  :- mlekopitayushchee, kopytnoe, dlinnaya_sheya.

% Признаки (факты), которые мы сообщаем системе
mlekopitayushchee.
kopytnoe.
dlinnaya_sheya.
?- zhivotnoe(Kto).

Вывод:

Kto = zhiraf.

Мы описали правила вывода в терминах «если признаки, то вид», сообщили наблюдаемые признаки — и система сама сделала заключение. Реальные экспертные системы устроены сложнее (диалог с пользователем, степени уверенности), но ядро именно такое.

Как работает под капотом

Prolog не «понимает» предметную область — он механически ищет доказательство запроса в базе правил методом перебора с возвратами. Когда вы спрашиваете zhivotnoe(Kto), движок берёт первое правило (gepard) и пытается доказать его тело: mlekopitayushchee — есть, hishchnik — нет такого факта, тупик. Откатывается, пробует второе правило (zhiraf): все три признака подтверждены — успех, Kto = zhiraf. Та самая комбинация унификации и backtracking, о которой шла речь раньше, и есть «интеллект» системы. Вся «экспертность» сосредоточена в правилах, которые написал человек.

Сильные и слабые стороны

Prolog силёнProlog неудобен
Задачи на отношения и правилаТяжёлые числовые вычисления
Поиск, перебор, ограниченияПроизводительный системный код
Символьная обработка, грамматикиИзменяемое состояние, ввод/вывод-тяжёлый код
Прототипирование баз знанийКомандная разработка крупных приложений

Иными словами, Prolog — это специализированный, а не универсальный инструмент. Его выбирают, когда задача по природе логическая. Для веб-сервера, обработки видео или числодробилки берут другие языки.

Частые ошибки

Считать Prolog «языком ИИ» в смысле нейросетей. Prolog относится к символьному ИИ (правила и логика), а не к машинному обучению. Это разные ветви: нейросети учатся на данных, Prolog рассуждает по заданным правилам.

Применять Prolog к любой задаче. Писать на нём числовой алгоритм или высоконагруженный сервис — значит бороться с языком. Сила Prolog узкая, но в своей нише глубокая.

Думать, что Prolog устарел и мёртв. Он не мейнстрим, но живёт в системах рассуждений, проверке ограничений, исследованиях и образовании; современные реализации вроде SWI-Prolog активно развиваются.

Итог

  • Prolog создан в 1972 году Аленом Колмероэ в Марселе; название — PROgrammation en LOGique.
  • Теоретическую базу заложил Роберт Ковальски (процедурная интерпретация хорновских дизъюнктов).
  • Применения: ИИ и символьные вычисления, экспертные системы, NLP, базы знаний, верификация; пример — IBM Watson.
  • Силён в задачах на отношения и поиск, слаб в тяжёлых числовых и системных вычислениях.
  • Это символьный ИИ (правила), а не машинное обучение.
Проверьте себя
1. Что означает название «Prolog»?
APROgram LOGic Gateway
BPROgrammation en LOGique — «программирование в логике»
CPROcedural LOGistics
DPROblem LOGarithm
2. Кто и когда создал Prolog?
AДжон Маккарти, 1958
BАлен Колмероэ, 1972, в Марселе
CДеннис Ритчи, 1972, в Bell Labs
DГвидо ван Россум, 1991
3. К какой ветви ИИ относится Prolog?
AГлубокое обучение на нейросетях
BСимвольный ИИ: рассуждение по заданным правилам и логике
CОбучение с подкреплением
DКомпьютерное зрение
4. В какой задаче Prolog обычно НЕ удобен?
AЭкспертная система с правилами
BВысоконагруженные числовые вычисления и системный код
CОбработка естественного языка
DПоиск решения головоломки с ограничениями