Сторонники логического программирования начали с того, что разработали язык программирования Пролог, основанный на процедурной интерпретации импликации, которая уже рассматривалась в настоящей статье в связи с Плэнером. Пример, который мы приводили: «Для того чтобы доказать, что х смертен, сделай подцелью доказательство, что х—человек», — на Прологе записывается следующим образом:
смертен (х) :— человек (х).
Вначале язык Пролог был намного проще, чем Плэнер, что обеспечивало ему значительное преимущество с точки зрения его изучения и реализации на ЭВМ. Однако к настоящему времени Пролог—как это было раньше с языками типа Плэнера — распался на ряд несовместимых диалектов, базирующихся на процедурной интерпретации логики, вызове процедур по образцу, теории обмена сообщениями и на системах описания.
Помимо общих ограничений, присущих логическому программированию в целом, о которых говорилось выше, Пролог имеет собственные, присущие только ему недостатки. Предположение о замкнутости мира является гипотезой, утверждающей полноту локально доступного знания, иначе говоря, если высказывание не следует из локальной базы знаний, оно может считаться ложным. В Плэнере также можно было воспользоваться предположением о замкнутости мира, переходя к рассмотрению плана (теоремы) при условии полной невозможности достичь какую-то цель. Эта возможность, в частности, широко использовалась Виноградом в SHRDLU.
В Пролог это предположение вошло в очень сильной форме — в виде принципа «отрицание как неудача», взятого в качестве основного постулата языка программирования. (Реляционные базы данных построены на аналогичной строгой гипотезе: если в гэеляционной таблице не найден соответствующий элемент, то отношение считается ложным.)
Столь сильное использование предположения о замкнутости мира в Прологе не соответствует требованию открытых систем о непрерывном пополнении базы знаний новыми фактами и объектами.