Открыть сервис

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

Логическое программирование — это парадигма программирования, основанная на представлении знаний в виде фактов и правил логического вывода. В отличие от императивного программирования, где программа описывает последовательность шагов для достижения результата, логическое программирование формулирует, что должно быть истинным, а интерпретатор (система логического вывода) сам ищет способ доказать или опровергнуть утверждение. Основу парадигмы составляет математическая логика, в частности — исчисление предикатов первого порядка.

История

Истоки логического программирования восходят к работам по автоматическому доказательству теорем в 1950–1960-х годах. Ключевой вклад внёс британский логик и программист Алан Робинсон, который в 1965 году разработал принцип резолюции — метод доказательства теорем в логике предикатов, ставший основой для выполнения логических программ.

В 1972 году группа исследователей во главе с Аленом Колмероэ и Филиппом Русселем в Марсельском университете (Франция) создала язык программирования Prolog (от фр. programmation en logique — программирование в логике). Именно Prolog стал первым и наиболее распространённым практическим воплощением логического программирования. В 1980-х годах в Японии была предпринята попытка создать «компьютеры пятого поколения», ориентированные на логическое программирование, в частности на Prolog, однако проект не достиг коммерческого успеха.

В последующие десятилетия логическое программирование развивалось в нескольких направлениях: появились расширения для работы с ограничениями (Constraint Logic Programming), базами данных (Datalog), а также методы распределённого вывода.

Основные принципы

Факты, правила и запросы

Программа в логическом программировании состоит из:

Логический вывод

Выполнение программы состоит в автоматическом доказательстве или опровержении запроса с помощью механизма резолюции и унификации. Унификация — это процесс сопоставления термов (объектов логического языка) для нахождения наиболее общего подстановки, при которой они становятся идентичными. Резолюция, как правило, применяется в виде SLD-резолюции (Selective Linear Definite clause resolution) — стратегии, используемой в Prolog.

Декларативность

Программист описывает логику задачи, а не алгоритм её решения. Интерпретатор или компилятор самостоятельно выбирает порядок и способ перебора вариантов. Это делает логическое программирование особенно удобным для задач, где естественно формулируются отношения, классификация, вывод на основе правил.

Языки логического программирования

Prolog

Prolog — стандартный и наиболее известный язык, реализующий логическое программирование. Существует несколько стандартов (Edinburgh Prolog, ISO Prolog). Основные диалекты: SWI-Prolog (распространённый с открытым кодом), GNU Prolog, Ciao Prolog, SICStus Prolog, Visual Prolog.

Datalog

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

Mercury

Mercury — функционально-логический язык программирования, наследующий идеи Prolog, но с более строгой типизацией, модульной системой и эффективной компиляцией. Разработан в Мельбурнском университете (Австралия) в 1990-х годах. Используется для разработки аналитических систем и компиляторов.

Отдельные системы

Применение

Искусственный интеллект и экспертные системы

Логическое программирование традиционно связано с разработкой экспертных систем — программ, моделирующих знания экспертов в узкой предметной области. В 1980–1990-х годах были созданы системы на Prolog для медицинской диагностики (MYCIN — одна из ранних, хотя она использовала другие подходы; более поздние: CADUCEUS, INTERNIST), геологоразведки, проектирования.

Обработка естественного языка

Prolog и языки на его основе применяются для синтаксического и семантического анализа предложений. На основе логического программирования реализованы грамматики, способные строить синтаксические деревья и интерпретировать смысл запросов на естественном языке.

Базы данных и дедуктивные системы

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

Компьютерная алгебра и символьные вычисления

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

Планирование и робототехника

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

Преимущества и недостатки

Преимущества

Недостатки

Сравнение с другими парадигмами

ПарадигмаПредставление задачиВыполнение
Императивное программированиеПоследовательность инструкцийОписанный алгоритм
Функциональное программированиеФункции без побочных эффектовКомпозиция функций
Логическое программированиеФакты и правилаЛогический вывод

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

Современное состояние

После всплеска интереса в 1980-х годах логическое программирование уступило позиции другим парадигмам в коммерческой разработке, однако продолжает активно развиваться в академических и прикладных областях: компьютерная лингвистика, анализ знаний, биоинформатика, верификация программ, анализ защищённости (Datalog для анализа потоков данных графа) и системы рекомендаций. С открытием принципов работы больших языковых моделей (трансформеров) интерес к гибридным системам, сочетающим нейросетевые представления и символьные логические выводы, возрождается: создаются модели, интегрирующие нейросети и логическое программирование (Neural-Symbolic AI). В России логическое программирование входит в учебные программы ряда вузов по направлениям «Прикладная математика» и «Информатика».

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →