語順とprolog

要は、前の記事の続きである。
次のような、prologファイルを作ろう。

%%%%%%%%%%%%%%%%%%%%%
% 事実の宣言
は(ニワトリ,生む).
で(庭,生む).
を(卵,生む).
は(学生,読む).
で(図書館,読む).
を(本,読む).
% ルール
は(X,で(Y,を(Z,A))) :- は(X,A),で(Y,A),を(Z,A).
は(X,を(Z,で(Y,A))) :- は(X,A),で(Y,A),を(Z,A).
で(Y,を(Z,は(X,A))) :- は(X,A),で(Y,A),を(Z,A).
で(Y,は(X,を(Z,A))) :- は(X,A),で(Y,A),を(Z,A).
を(Z,は(X,で(Y,A))) :- は(X,A),で(Y,A),を(Z,A).
を(Z,で(Y,は(X,A))) :- は(X,A),で(Y,A),を(Z,A).
%%%%%%%%%%%%%%%%%%%%

要するに、構文解析で、すべてが最終フレーズにかかっている、先の例の場合、語順をどう変えても、意味は通じるということを示しているのである。

例えば、

?- は(学生,を(本,で(図書館,読む))).
?- で(図書館,を(本,は(学生,読む))).
?- を(本,は(学生,で(図書館 ,読む))).

は、すべて「true」となる。ただし、この三つの言葉は、ほとんど同じ意味なのだが、逆に、微妙に違ってもいる。それは、表現できていない。