Формулировка английских операторов как набора операторов логики первого порядка

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

У меня есть английские заявления, а также мои попытки FOL на каждом. Мне просто интересно, есть ли кто-нибудь, кто может сообщить мне, если и где я мог ошибиться с ними, спасибо.

АНГЛИЙСКИЙ ЗАЯВЛЕНИЯ

  1. Высокий мужчина может достать высокий крюк.

  2. Маленький человек может достать низкий крючок.

  3. Высокий крюк свободен.

  4. Человек повесит свое пальто, если есть свободный крючок для одежды, и человек может достать этот крючок для одежды.

  5. Пол высокий человек.

  6. Джон невысокий мужчина.

  7. Кто может повесить свое пальто на каком крючке?

ПЕРВАЯ ЗАКАЗ ЛОГИЧЕСКОГО ЗАЯВЛЕНИЯ

  1. Manx человек (X, высокий) -> досягаемость (X, высокий_крюк).

  2. Manx человек (X, маленький) -> reach_hook(X, low_hook).

  3. бесплатно (high_hook).

  4. ∀x, y свободен (X) ^ достать_крюк (Y,X) -> повесить пальто (Y, X).

  5. человек (Paul, высокий).

  6. мужчина (Джон, короткий).

  7. ? - повесить пальто (X,Y).

1 ответ

Я предполагаю, что вы имеете в виду Пролог, когда вы говорите FOL. Они не одно и то же.

Общие комментарии: переменные Пролога неявно универсально (все) количественно определены, поэтому вам не нужен квантификатор,, поэтому у Пролога его нет. Экзистенциальный квантификатор записывается X^ как в

X^(man(X), tall(X))

но может использоваться только в телах предикатов. Если вы хотите сказать что-то вроде "есть высокий человек", вам нужно использовать атом, чтобы представить его, как в

tall(xyzzy001).
man(xyzzy001).

Итак, ваши примеры. В #1 и #2 и человек, и крючок четко определены количественно, но вы используете атом для крючка (или двух крючков). Также man/2 а также reach_hook/1 кажется, ad-hoc. У всех мужчин есть только одно свойство? Что такого особенного в достижении крючков, в отличие от полок, выступов, дверных ручек... Возможно, что-то вроде следующего может быть лучше.

reach(X,Y) :- man(X), tall(X), hook(Y), high(Y).
reach(X,Y) :- man(X), small(X), hook(Y), low(Y).

(Изменено, чтобы сделать его действительным синтаксисом.)

В #3 вы соответственно используете атом, но чтобы сохранить его в соответствии с предыдущими предложениями, мы могли бы вместо этого сказать

hook(xyzzy002).
high(xyzzy002).
free(xyzzy002).

Примеры № 5 и № 6 похожи. В #4 вы, кажется, упростили определение крючка как "вешалки", что, вероятно, не важно, и ваши предикаты могут быть более общими, например

hang(X,Z,Y) :- man(X), hook(Y), coat(Z), reach(X,Y), free(Y).

(Изменено, чтобы сделать его действительным синтаксисом.)

И, предполагая эту формализацию и заполненную базу данных, вопрос № 7 можно сформулировать как

?- hang(X,Z,Y), coat(Z), owns(X,Z).

А также owns/2 вероятно, должен быть включен в № 4 также.

Другие вопросы по тегам