Ситуационное исчисление — это логический формализм, разработанный для представления и рассуждения о динамических областях. Впервые он был введен Джоном Маккарти в 1963 году. [1] Основная версия ситуационного исчисления, представленная в этой статье, основана на версии, введенной Рэем Рейтером в 1991 году. За ней следуют разделы о версии Маккарти 1986 года и формулировке логического программирования .
Ситуационное исчисление представляет изменяющиеся сценарии как набор формул логики первого порядка . Основные элементы исчисления:
Домен формализуется рядом формул, а именно:
В качестве примера будет смоделирован простой мир роботов. В этом мире есть один робот и несколько неодушевленных предметов. Мир размечен в соответствии с сеткой, так что местоположения могут быть указаны в терминах точек координат. Робот может перемещаться по миру, а также подбирать и ронять предметы. Некоторые предметы могут быть слишком тяжелыми для того, чтобы робот мог их поднять, или хрупкими, так что они разобьются, когда их уронят. Робот также может чинить любые сломанные предметы, которые он держит.
Основными элементами исчисления ситуаций являются действия, флюенты и ситуации. В описании мира обычно участвует также ряд объектов. Исчисление ситуаций основано на отсортированной области с тремя сортами: действия, ситуации и объекты, где объекты включают все, что не является действием или ситуацией. Могут использоваться переменные каждого сорта. В то время как действия, ситуации и объекты являются элементами области, флюенты моделируются либо как предикаты, либо как функции.
Действия формируют своего рода домен. Переменные действия сортировки могут быть использованы, а также функции, результатом которых является действие сортировки. Действия могут быть количественно определены. В примере мира роботов возможными терминами действия будут моделирование перемещения робота в новое место и моделирование подъема роботом объекта o . Специальный предикат Poss используется для указания того, когда действие является исполняемым.
В ситуационном исчислении динамический мир моделируется как прогрессирующий через ряд ситуаций в результате различных действий, выполняемых в мире. Ситуация представляет собой историю событий действия. В версии ситуационного исчисления Рейтера, описанной здесь, ситуация не представляет собой состояние, вопреки буквальному значению термина и вопреки первоначальному определению Маккарти и Хейса . Этот момент был резюмирован Рейтером следующим образом:
Ситуация до выполнения каких-либо действий обычно обозначается и называется начальной ситуацией. Новая ситуация, возникающая в результате выполнения действия, обозначается с помощью символа функции do (некоторые другие ссылки [3] также используют result ). Этот символ функции имеет ситуацию и действие в качестве аргументов, а также ситуацию в качестве результата, причем последняя является ситуацией, которая возникает в результате выполнения данного действия в данной ситуации.
Тот факт, что ситуации являются последовательностями действий, а не состояний, подтверждается аксиомой, гласящей, что равно тогда и только тогда, когда и . Это условие не имело бы смысла, если бы ситуации были состояниями, поскольку два разных действия, выполненные в двух разных состояниях, могут привести к одному и тому же состоянию.
В примере мира роботов, если первым действием робота является перемещение в местоположение , то первым действием является , а результирующая ситуация — . Если его следующим действием является взятие мяча, то результирующая ситуация — . Такие термины ситуаций, как и обозначают последовательности выполненных действий, а не описание состояния, возникающего в результате выполнения.
Утверждения, истинность которых может меняться, моделируются реляционными флюентами , предикатами, которые принимают ситуацию в качестве своего конечного аргумента. Также возможны функциональные флюенты , функции, которые принимают ситуацию в качестве своего конечного аргумента и возвращают зависящее от ситуации значение. Флюенты можно рассматривать как «свойства мира».
В этом примере флюент может использоваться для указания того, что робот несет определенный объект в определенной ситуации. Если изначально робот ничего не несет, то false, а true. Местоположение робота можно смоделировать с помощью функционального флюента , который возвращает местоположение робота в определенной ситуации.
Описание динамического мира кодируется в логике второго порядка с использованием трех видов формул: формул о действиях (предпосылок и следствий), формул о состоянии мира и основополагающих аксиом.
Некоторые действия могут быть невыполнимыми в данной ситуации. Например, невозможно положить предмет, если его не переносишь. Ограничения на выполнение действий моделируются литералами вида , где a — действие, s — ситуация, а Poss — специальный бинарный предикат, обозначающий выполнимость действий. В примере условие, что уронить предмет можно только при его переносе, моделируется следующим образом:
В качестве более сложного примера следующие модели показывают, что робот может переносить только один объект за раз, и что некоторые объекты слишком тяжелы для того, чтобы робот мог их поднять (на это указывает предикат heavy ):
Учитывая, что действие возможно в ситуации, необходимо указать эффекты этого действия на флюентах. Это делается с помощью аксиом эффекта. Например, тот факт, что поднятие объекта заставляет робота нести его, можно смоделировать следующим образом:
Также можно указать условные эффекты, которые зависят от текущего состояния. Следующие модели показывают, что некоторые объекты хрупкие (обозначаются предикатом fragile ) и их падение приводит к их поломке (обозначается текущим broken ):
Хотя эта формула правильно описывает эффект действий, ее недостаточно для правильного описания действия в логике из-за проблемы фрейма .
Хотя приведенные выше формулы кажутся подходящими для рассуждений о последствиях действий, у них есть критический недостаток — их нельзя использовать для вывода не-эффектов действий. Например, невозможно вывести, что после поднятия объекта местоположение робота остается неизменным. Для этого требуется так называемая аксиома фрейма, формула типа:
Необходимость указания аксиом фрейма давно признана проблемой аксиоматизации динамических миров и известна как проблема фрейма . Поскольку обычно существует очень большое количество таких аксиом, проектировщику очень легко пропустить необходимую аксиому фрейма или забыть изменить все соответствующие аксиомы при внесении изменений в описание мира.
Аксиомы состояния-последователя «решают» проблему фрейма в исчислении ситуаций. Согласно этому решению, проектировщик должен перечислить в качестве аксиом эффекта все способы, которыми может быть изменено значение конкретного флюента. Аксиомы эффекта, влияющие на значение флюента, можно записать в обобщенной форме как аксиома положительного и отрицательного эффекта:
Формула описывает условия, при которых действие a в ситуации s делает флюент F истинным в последующей ситуации . Аналогично, описывает условия, при которых выполнение действия a в ситуации s делает флюент F ложным в последующей ситуации.
Если эта пара аксиом описывает все способы, которыми текучая F может изменять значение, их можно переписать как одну аксиому:
На словах эта формула гласит: «Учитывая, что возможно выполнить действие a в ситуации s , текущее F будет истинным в результирующей ситуации тогда и только тогда, когда выполнение a в s сделает его истинным, или оно истинно в ситуации s , а выполнение a в s не сделает его ложным».
В качестве примера, значение текучего сломанного, введенного выше, задается следующей аксиомой состояния-преемника:
Свойства начальной или любой другой ситуации могут быть определены путем простого указания их в виде формул. Например, факт о начальном состоянии формализуется путем утверждения о (что является не состоянием, а ситуацией ). Следующие утверждения моделируют, что изначально робот ничего не несет, находится в месте , и нет сломанных объектов:
Основополагающие аксиомы ситуационного исчисления формализуют идею о том, что ситуации являются историями, имея . Они также включают другие свойства, такие как индукция второго порядка по ситуациям.
Регрессия [4] — это механизм доказательства следствий в исчислении ситуаций. [5] Он основан на выражении формулы, содержащей ситуацию , через формулу, содержащую действие a и ситуацию s , но не ситуацию . Повторяя эту процедуру, можно получить эквивалентную формулу, содержащую только исходную ситуацию S 0 . Доказывать следствия из этой формулы предположительно проще, чем из исходной.
GOLOG — это язык логического программирования, основанный на ситуационном исчислении. [6] [7]
Главное отличие между первоначальным ситуационным исчислением Маккарти и Хейза и тем, что используется сегодня, заключается в интерпретации ситуаций. В современной версии ситуационного исчисления ситуация — это последовательность действий. Первоначально ситуации определялись как «полное состояние вселенной в момент времени». С самого начала было ясно, что такие ситуации не могут быть полностью описаны; идея состояла в том, чтобы просто дать некоторые утверждения о ситуациях и вывести из них следствия. Это также отличается от подхода, который используется в текучем исчислении , где состояние может быть набором известных фактов, то есть, возможно, неполным описанием вселенной.
В оригинальной версии исчисления ситуаций флюенты не овеществляются. Другими словами, условия, которые могут меняться, представлены предикатами, а не функциями. На самом деле Маккарти и Хейз определили флюент как функцию, которая зависит от ситуации, но затем они всегда использовали предикаты для представления флюентов. Например, тот факт, что в месте x в ситуации s идет дождь, представлен литералом . В версии исчисления ситуаций Маккарти 1986 года используются функциональные флюенты. Например, положение объекта x в ситуации s представлено значением , где местоположение является функцией. Утверждения о таких функциях могут быть даны с использованием равенства: означает, что положение объекта x одинаково в двух ситуациях s и .
Выполнение действий представлено функцией result : выполнение действия a в ситуации s является ситуацией . Эффекты действий выражаются формулами, связывающими флюэнты в ситуации s и флюэнты в ситуациях . Например, то, что действие открытия двери приводит к тому, что дверь открывается, если она не заперта, представлено формулой:
Предикаты locked и open представляют условия запирания и открывания двери соответственно. Поскольку эти условия могут различаться, они представлены предикатами с аргументом ситуации. Формула гласит, что если дверь не заперта в ситуации, то дверь открыта после выполнения действия открытия, это действие представлено константой opens .
Эти формулы недостаточны для вывода всего, что считается правдоподобным. Действительно, флюенты в разных ситуациях связаны только в том случае, если они являются предварительными условиями и эффектами действий; если флюент не затронут действием, нет способа вывести, что он не изменился. Например, приведенная выше формула не подразумевает, что следует из , чего можно было бы ожидать (дверь не запирается, когда ее открывают). Для того чтобы инерция сохранялась, необходимы формулы, называемые аксиомами фрейма . Эти формулы определяют все неэффекты действий:
В первоначальной формулировке исчисления ситуаций начальная ситуация, позже обозначенная как , явно не идентифицирована. Начальная ситуация не нужна, если ситуации рассматриваются как описания мира. Например, представление сценария, в котором дверь была закрыта, но не заперта, и действие по ее открытию выполняется, формализуется путем принятия константы s для обозначения начальной ситуации и создания утверждений о ней (например, ). То, что дверь открыта после изменения, отражается формулой, которая выводится. Начальная ситуация вместо этого необходима, если, как в современном исчислении ситуаций, ситуация рассматривается как история действий, поскольку начальная ситуация представляет собой пустую последовательность действий.
Версия исчисления ситуаций, представленная Маккарти в 1986 году, отличается от оригинальной использованием функциональных флюентов (например, является термином, представляющим положение x в ситуации s ), а также попыткой использовать ограничение для замены аксиом фрейма.
Также возможно (например, Ковальски 1979, Апт и Безем 1990, Шанахан 1997) записать исчисление ситуаций в виде логической программы:
Здесь Holds — метапредикат, а переменная f ранжируется по флюентам. Предикаты Poss , Initiates и Terminates соответствуют предикатам Poss , и соответственно. Левая стрелка ← — это половина эквивалентности ↔. Другая половина подразумевается в завершении программы, в которой отрицание интерпретируется как отрицание как неудача . Аксиомы индукции также неявны и нужны только для доказательства свойств программы. Обратное рассуждение, как в разрешении SLD , которое является обычным механизмом, используемым для выполнения логических программ, неявно реализует регрессию.