第十章 语义分析

  
10.12 索引算子

  自然语言的句子所描述的情景总伴随着一定的时间和处所,这就是情景语义学所说的一种伴随的时空域。如果我们说:
  John saw Mary.(约翰看见了玛丽)
  past (see(john,mary)).

实际上是说,在现今之前存在着一个时空位置.使关系see(john,mary)为真。如果我们说:
  John toured Greece.(约翰游览了希腊)
  This took 3 weeks.(这持续了三周)

其中的"this"指什么?显然,我们希望它指称第一个句子中所描述的同一个特定事件(情景),而不是约翰游览希腊的一般关系。McCord曾提议在逻辑式中使用"事件变量"作为谓词的附加变元,以便描述事件或状态。因此tour(E,X,Y)表示宣是一个X对Y所作的一次游览事件。E的值可以想象为一个唯一的名字,用它来识别不同的事件。利用这样的定义,上面两个句子可以表达为:
  exist(E,tour(E,john,greece)&past(E)&
      duration(E,3.week)).

但是如果我们说:
  Dr.Smith saw each of his patients.
  (史密斯大夫诊视了他的每个病人)
  This took 6 hours.(这用了6小时)

首先,这里的"seeing"关系是指医生对病人的诊视(用谓词seeconsult表示)。其次,医生在同一时间里只能对一个病人进行诊视,但是"this"在这里显然不是指一个单独的诊视事件,而是指整个诊视序列。在LFI中我们可以对整个逻辑式使用索引算子,于是分析结果可以表为
  past(each(patient(X,dr.smith),
       see-consult(dr.smith,X))):E
  & duration(E,6.hour).

  在前面几节中已经看到了利用索引算子来描写包含聚焦功能的逻辑式的例子。这里不妨回顾一下:
  John always buys books at Smith's.
  always((book(X)&buy(john,X)):E,at(smith,E)).

  John ran fastest yeterday.
  fastest(run(john):E,yesterday(B)).

利用这种索引方法,可以保证得到对同一情景的指称。
  在某些自然语言的应用中(特别是某些数据库的应用中),我们面临的是一个“没有时间”关系的世界.在这个世界里语景不起作用了。在这种领域中,我们可以把P:E看作是P在某一特例下为真,而E被约束为这个特例。因此可以在这类应用中用下面的Prolog规则来定义索引算子":",
      P:P:-P.
  为了说明当时空语景成为重要因素时我们应当怎么表达它们,暂时假设我们只关心时间这一因素,并假设所有事件都是瞬时事件。于是当我们说"John sees Mary"(或"John saw Mary"),我们真正的意思是说,在某一时刻see(john,mary)为真,同时我们可以建立一个Prolog的数据库,它由逻辑式hold(P,T)的若干条目组成,意思是在时刻T,P为真。
  hold(see(john,mary),10:00).
  hold(see(bill,joe),11:00).
  …

现在让我们来考虑句子:
  John saw Mary.(约翰看见了玛丽)
  This was before 11:00.(这发生在11点之前)

于是其逻辑式(为了方便起见,暂时忽略时态)可以写成:
  see(john,mary):E & before(11:00,E).
为了在Prolog中直接进行推理,我们可以将上式进一步翻译成:
  hold(see(john,mary),T)& T<11:0O.