Плэнер

Planner

Плэнер (Planner) был одним из первых языков программирования для искусственного интеллекта, который обеспечил решение задач поиска по цели, не требуя при этом отдельного описания пространства состояний. Этот язык основывался на следующих принципах:

  1. Доступность информации. Плэнер создавался как максимально гибкая система, позволяющая при решении задач использовать любые имеющиеся знания, даже отрывочные и эвристические.
  2. Вызов процедур по образцу. Процедуры в Плэнере можно вызывать по образцу предполагаемого задания. Предположим, у вас засорилась раковина. Во-первых, вы можете решить эту проблему, зная имя сантехника, которого нужно вызвать. Другой способ (который больше похож на «вызов по образцу») заключается в том, чтобы «объявить» о том, что у вас засорена раковина и что нужен специалист, чтобы ее прочистить. В Плэнере это реализуется путем превращения такого «объявления» (т. е. обобщенной картины задания) в цель.
  3. Процедурная интерпретация логических высказываний.

Одна иp основных идей, реализуемых в Плэнере, состоит в использовании двойственной природы некоторых декларативных и императивных предложений. Рассмотрим высказывание «из А следует В». Это явно декларативное высказывание. Но оно может использоваться в Плэнере и как императивное. Оно может означать, что мы должны вызвать процедуру, которая проверит, есть ли в базе знаний А, и если есть, выяснит, надо ли внести в нее В. Более того, в Плэнере можно задать процедуру, которая проследит, является ли нашей целью вывод В, и если так, то не следует ли сделать А подцелью. Такие же соображения можно высказать об утверждении, обратном утверждению «из А следует В». Высказывания с кванторами всеобщности, конъюнкциями, дизъюнкциями и т. д. тоже могут использоваться двояко. Теоремы Плэнера используются императивно —как процедуры и декларативно—как данные.

Плэнер представлял собой шаг вперед по сравнению с универсальными процедурами доказательств, которые использовались в распространенных в то время системах доказательства теорем методом резолюций. Плэнер, разработанный автором настоящей статьи, был реализован Сассманом, Виноградом и Чарняком. Виноград использовал его для своей диалоговой программы понимания естественного языка SHRDLU в искусственном «мире кубиков».

Чтобы понять, как работает процедурная интерпретация, рассмотрим некое логическое утверждение:

(Для всех х ((х—человек) следует (х—смертен))).

Это—импликация. Она имеет две части: антецедент, т. е. условие «х—человек», и следствие — «х смертен». Здесь говорится: для всех х, если х — человек, то х смертен.

Логические правила позволяют сделать из этого высказывания определенные выводы. Например, то, что Сократ смертен, можно вывести из предпосылки о том, что Сократ— человек:

(Сократ человек)/(Сократ смертен)

Я предложил интерпретировать импликации типа «все люди смертны» как процедуры языка программирования. В Плэннере есть две интерпретации. В первой интерпретации, по фактам (она называется антецедентной), из факта «х— человек» следует «х смертен».

Это можно выразить так:

(когда (уверен (человек х), делай
           (уверен (смертен х))).

При другой интерпретации, от цели (в Плэннере она называлась «консеквентной»), из цели «х смертен» логически выводится подцель «х—человек»:

(когда (цель (смертен х), делай
           (показатель (человек х))).

Идеи Плэнера были обобщены и развиты в более поздних языках программирования для искусственного интеллекта. Однако они не предназначались специально для нужд открытых систем.