11.4.8 Implementing accessibility

Implementing accessibility following the formal definition to give its counterpart in Prolog.

What's left to do is implementing accessibility. In the previous section we gave a nice and clean recursive definition of accessibility. Perhaps surprisingly, we will not follow the formal definition to give its counterpart in Prolog. This is because the threading apparatus already gives us direct hands on accessibility. Recall that we don't just thread a single DRS along the nodes of the syntax tree - we use a list of DRSs. This list mirrors exactly the DRSs that are accessible from any given point in the syntax tree. A beautiful example of how this stacking of DRSs works was given in the DRS threading example for ``every man runs'' above.

Let's return to the semantic macro for pronouns and the constraint on anaphoric binding accessible(X,...). As we have seen, the constraints are handed through all combine/2 predicates and end up on the sentence level and finally on the discourse level. The rest of the story is easily told. On the discourse (d2) level, a recursive predicate checkConstraints/1 is called and handed over the list of constraints. They have the form of PROLOG predicate calls (e.g. accessible(X,[drs(D,C)|S])) and are simply called recursively:

combine(d2:Drs,[d1:D1]):-
   D1 = [drs:[in:[drs([],[])],out:[Drs]],ana:[in:[],out:Ana]],
   checkConstraints(Ana),
   bindingDrs(Drs).

checkConstraints([]).

checkConstraints([X|L]):-
   call(X),
   checkConstraints(L).

Finally, the predicate accessible/2 looks in the space of DRSs, and then picks out one of the discourse referents (simply by using member/2). Because the threading rules for universal quantification, disjunction, and negation are set up, we will be sure that these discourse referents are accessible.

accessible(X,Space):-
   member(drs(D,_),Space),
   member(X,D).


Aljoscha Burchardt, Stephan Walter, Alexander Koller, Michael Kohlhase, Patrick Blackburn and Johan Bos
Version 1.2.5 (20030212)