序言中命题逻辑的困难

问题描述

我需要将以下命题转换为序言代码,但我不了解运算符的工作原理。我一般用java。

“牛仔裤只是休闲,正装裤只是正式,kakis只是半正式,腰带不休闲,黑色袜子任何时候都可以接受。 休闲 = C,半正式 = SF,正式 = F,牛仔裤 = J,正装裤 = DP,Kakis = K,腰带 = B,黑色袜子 = BS。 J -> C,DP -> F,K -> SF,B -> !C,BS -> (C v SF v F)"

这是我已有的代码

casual(jeans).
formal(dress_pants,belt,black_socks).
semiFormal(khakis).
formal(belt).
semiFormal(belt).
casual(black_socks).
formal(black_socks).
semiFormal(black_socks).

解决方法

非正式地,一元谓词p可以被视为集合P,因此,文字p(X)可以被视为集合成员测试X ∈P。因此,目标 p(X) 将是 truefalse(即命题),取决于 X 是否属于集合P 与否。

句子“牛仔裤只是休闲,正装裤只是正式,kakis只是半正式,腰带不休闲,黑色袜子随时可以接受。”可以表示为:

  • 休闲 = {牛仔裤,black_socks}。
  • 正式 = {dress_pants腰带black_socks}
  • semi_formal = {卡其布腰带黑色袜子}

这些集合可以在 Prolog 中用事实表示:

casual(jeans).
casual(black_socks).

formal(dress_pants).
formal(belt).
formal(black_socks).

semi_formal(khakis).
semi_formal(belt).
semi_formal(black_socks).

以下是有关这些事实的一些 Prolog 查询:

?- casual(jeans).
true.

?- casual(belt).
false.

?- casual(X).
X = jeans ;
X = black_socks.

?- formal(X).
X = dress_pants ;
X = belt ;
X = black_socks.

?- semi_formal(X).
X = khakis ;
X = belt ;
X = black_socks.