プログラム「四角形」


Quixote プログラムの例として、「四角形」を 紹介しましょう。

「四角形」とは、小学校の時に習った、以下の知識です。

「四角形のうち、向かい合う辺が平行なものは、平行四辺形です。
  平行四辺形のうち、4辺が等しいと菱形で、
		  4つの角が90度だと長方形です。
  更に、菱形でもあり、長方形でもあるものが正方形です。」

以下が「四角形」を Quixote で記述したプログラムです。

&program;; &subsumption;; 四角形 >= 平行四辺形;; 平行四辺形 >= {長方形, 菱形};; 正方形 =< {長方形, 菱形} ;; &rule;; 四辺形[記号=X]/[形 -> 平行四辺形] <= 四辺形[記号=X]/[角1=L1, 角2=L2,角3=L1, 角4=L2];; 四辺形[記号=X]/[形 -> 菱形] <= 四辺形[記号=X]/[形 -> 平行四辺形, 辺1=L, 辺2=L, 辺3=L, 辺4=L];; 四辺形[記号=X]/[形 -> 長方形] <= 四辺形[記号=X]/[形 -> 平行四辺形, 角1=90, 角2=90, 角3=90, 角4=90];; &end.

このプログラムは、 &subsumption;; (「基礎オブジェクト項間関係 」と 呼ばれています。)の部分で、

	平行四辺形は四角形である。
	長方形と菱形は、平行四辺形であり、
	正方形は、長方形と菱形である。
という、四角形、平行四辺形、長方形、菱形、正方形の関係を示しています。

次に &rule;; (「ルール定義」と 呼ばれています。)の部分で、

	向かい合う角の大きさが等しいものが平行四辺形
	平行四辺形のうち、隣合う辺が等しいと菱形
	平行四辺形のうち、90度の角を持つと長方形
を表しています。

普通は、「向かい合う辺が平行なもの」の方が平行四辺形の定義としては 馴染みがありますが、ここではそれと同じ意味で、計量的な 「向かい合う角の大きさが等しいもの」を記述しました。

これは皆が知っている簡単な例ですが、この例にもちゃんと 知識の特徴 が 含まれています。

さて、このプログラムに対して、例えば、以下の質問が考えられます。

?- 四辺形[記号=a]/[形=X]. ?- 四角形[記号=a]/[形=X];;
&program;;
&rule;;
四角形[記号=a]/[角2=80];;
&end.

最初の質問は、「四角形aの形は?」を表しています。

2番目の質問は、「角2が80度なら、四角形aの形は?」を表しています。 皆さんお気づきのことと思いますが、 「角2が80度なら、」の部分は仮説です。このように 仮説の付いた問合せ も、 Quixote では出すことができます。

1番目の答えは、

IF 四辺形[記号=a].角2=V, 四辺形[記号=a].角4=V
Then X -< 平行四辺形

Quixote から返されます。 これは、「角2と角4の大きさが同じなら、平行四辺形である」を 意味しています。 If の部分は仮定で、 Quixote は このように 仮定付き答え を返します。