Let's first look at the rule that builds sentences out of an NP and a VP. (Think of a sentence like ``John walks'' for now; we'll get to quantifiers later.) The combine rule for this syntax rule is as follows:

combine(s1:S,[np2:NP,vp2:VP]):-
        NP = usr([NPRoot|_],_,_,_),
        VP = usr([VPRoot|_],_,_,_),
        NewUsr = usr([Root],[Root:(VPRoot@NPRoot)],[],[]),
        mergeUSR(merge(NewUsr,merge(NP,VP)),S).

Let's first look at the rule that builds sentences out of an NP and a VP. (Think of a sentence like ``John walks'' for now; we'll get to quantifiers later.) The combine rule for this syntax rule is as follows:

combine(s1:S,[np2:NP,vp2:VP]):-
        NP = usr([NPRoot|_],_,_,_),
        VP = usr([VPRoot|_],_,_,_),
        NewUsr = usr([Root],[Root:(VPRoot@NPRoot)],[],[]),
        mergeUSR(merge(NewUsr,merge(NP,VP)),S).

Again, it may be helpful to look at the graph representation of this rule.

As you can see, the new constraint graph describes -structures in which the VP meaning is applied to the NP meaning. This is basically like our very first naive analysis of how NPs and VPs are combined semantically. It still works because the trick that we developed in order to get a uniform treatment of the NP semantics in -calculus is now compiled into the combine rule for NPs, which we'll deal with in a minute. For now, just observe that we combine the verb phrase and the noun phrase straightforwardly and according to our intuitions: The verb phrase is the functor and the noun phrase its argument. The results we get (after -reduction) are the same as with Montague Semantics.

More technically, the clause of combine/2 first extracts the roots of the constraint graphs for the two constituents, NPRoot and VPRoot. It then introduces a new node and a new labeling constraint, and merges it with the subgraphs of the constituents.

For the example we suggested above, "John walks", the following happens. First, the semantic macros provide the semantics on the lexical level:

John

usr([x1],[x1:john],[],[])

walks

usr([x2],[x2:walk],[],[])

And here is the result of the combine-rule:

John walks

usr([x0,x1,x2],[x0:(x2@x1),x1:john,x2:walk],[],[])

This graph describes the -structure representing the -term , or written in a more familiar way, .


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