Что такое 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.
- Силён в задачах на отношения и поиск, слаб в тяжёлых числовых и системных вычислениях.
- Это символьный ИИ (правила), а не машинное обучение.