Assuming the Principles-and-Parameters theory supplied in the standard distribution of PAPPI, the changes necessary to implement the theory of double object constructions described in (Pesetsky 95) are documented in the sections below.Here is a brief summary of the modules affected:
Phrase Structure: internal structure of VPs and PPs must be changed.
Lexicon: introduce the empty preposition G. Also theta-grid changes for double-object verbs and prepositions like to.
Theta Theory: theta role assignment
Case Theory: for inherent Case assignment, prevent P from assigning inherent Case to its specifier.
Government: extend government to allow the verb to govern down into spec-P.
Phrase Structure | ||
These assumptions are specified in xbar.pl
as follows:
head(n). head(v). head(a). head(p). head(i). head(c). head(neg). bar(n1). bar(v1). bar(a1). bar(p1). bar(i1). bar(c1). bar(neg1). bar(v2). max(np). max(vp). max(ap). max(pp). max(i2). max(c2). max(negp). %% for category labels X & Y, proj(X,Y) holds if Y is the %% immediate projection of X. proj(n,n1). proj(n1,np). proj(v,v1). proj(v1,v2). proj(v2,vp). proj(a,a1). proj(a1,ap). proj(p,p1). proj(p1,pp). proj(c,c1). proj(c1,c2). proj(i,i1). proj(i1,i2). proj(neg,neg1). proj(neg1,negp). %% head(X,Y) holds if Y is the head of X. %% NB. Reflexive relation. head(n,n). head(n1,n). head(np,n). head(v,v). head(v1,v). head(v2,v). head(vp,v). head(a,a). head(a1,a). head(ap,a). head(p,p). head(p1,p). head(pp,p). head(c,c). head(c1,c). head(c2,c). head(i,i). head(i1,i). head(i2,i). head(neg,neg). head(neg1,neg). head(negp,neg). |
No intermediate V2 projection is required for the new double object theory since indirect objects are no longer placed directly under VP. Hence we can delete references to V2, resulting in a simplified and more regularized X-bar system.
head(v). bar(v1). max(vp). proj(v,v1). proj(v1,vp). head(v,v). head(v1,v). head(vp,v). |
The X-bar rule system can also be simplified. Rule schemata for the V2 bar-level (highlighted below) can be eliminated.
rule XP -> [XB|spec(XB)] ordered specFinal st max(XP), proj(XB,XP). rule spec(XB) -> [Y] st overtSpec(XB,Y). rule spec(XB) -> [] st nullSpec(XB). rule XB2 -> [XB1|icompl(XB1)] ordered headInitial(X0) st bar(XB2), proj(XB1,XB2), bar(XB1), head(XB2,X0), head(X0). rule icompl(XB) -> [] st lexicalProperty(XB,subcat(_,_),_). rule icompl(XB) -> [] st lexicalProperty(XB,grid(_,Roles),no2ndRole(Roles),_). rule icompl(XB) -> [Y] st lexicalProperty(XB,grid(_,Roles),csr2nd(Roles,Y),Y). rule XB -> [X|compl(X)] ordered headInitial(X) st bar(XB), proj(X,XB), head(X). rule compl(X) -> [] st lexicalProperty(X,grid(_,Roles),no1stRole(Roles),_). rule compl(X) -> [Y] st compl(X,Y). rule compl(X) -> [Y] st lexicalProperty(X,grid(_,Roles),csr1st(Roles,Y),Y). rule compl(X) -> [Y] st lexicalProperty(X,subcat(Y$_,_),Y). |
This results in the compact X-bar rule schemata shown below. The new
VP-internal structure assumed for double objects is now [VP
V PP], where PP is headed by a dyadic preposition that can accommodate
two theta roles. This is explicitly encoded by a rule (highlighted
below) specifying that a complement of X can be a PP provided X has
the lexical property of having a theta-grid that satisfies the
predicate has2ndRole/1
.
rule XP -> [XB|spec(XB)] ordered specFinal st max(XP), proj(XB,XP). rule spec(XB) -> [Y] st overtSpec(XB,Y). rule spec(XB) -> [] st nullSpec(XB). rule XB -> [X|compl(X)] ordered headInitial(X) st bar(XB), proj(X,XB), head(X). rule compl(X) -> [] st lexicalProperty(X,grid(_,Roles),no1stRole(Roles),_). rule compl(X) -> [Y] st compl(X,Y). rule compl(X) -> [Y] st lexicalProperty(X,grid(_,Roles),csr1st(Roles,Y),Y). rule compl(X) -> [pp] st lexicalProperty(X,grid(_,Roles),has2ndRole(Roles),_). rule compl(X) -> [Y] st lexicalProperty(X,subcat(Y$_,_),Y). |
The predicate has2ndRole/1
is defined as follows:
has2ndRole(Roles) :- secondRole(Roles,_), !. % green |
Implementation Notes:
The PP selected by a V in this fashion also needs to be explicitly
labelled as a subcategorized position for structural primitives
like complement_of/2
to work. This is done by augmenting
the phrase structure rule with RHS [V,PP] with the
goal scPos/1
(which adds a subcategorized flag to the PP
position when it is created).
rhs [v(V),pp(PP)] ordered headInitial(v) app_goals [scPos(PP)]. |
Finally, a parse-time version of has2ndRole/1
is
needed. By convention, it is called schas2ndRole/1
and is
defined as follows:
schas2ndRole(Item) :- Item has_feature grid(_,IRoles), has2ndRole(IRoles). |
spec(p1,np). spec(p1,[]). |
The NP specifier of PP must be an A-position. This is specified by a
phrase structure modification rule that adds a call
to aPos/1
for all rules matching RHS [NP,P1], more
specifically, the rule PP -> [NP,P1].
rhs [np(NP),p1(P1)] ordered specInitial app_goals [aPos(NP),specPP(NP,P1)]. |
For computational efficiency, in order to control phrase structure
over-generation, we also modify the grammar to allow [NP,P1] to
project to PP only if P has an external theta-role; this is encoded by
the call to specPP/2
above. specPP/2
is
defined below:
specPP(_NP,P1) :- P1 has_feature grid([_],_). |
To control over-generation, we also add a requirement via the phrase structure rule modification system that [PP P1] cannot be projected when P has an external theta-role:
lhs pp & rhs [p1(P1)] app_goals [noExtRole(P1)]. noExtRole(X) :- X has_feature grid([],_). |
That is, a rule PP -> P1 can only apply if noExtRole/1
can be satisfied. And noExtRole(X)
can only be satisfied
if there is no external theta role specified in X's theta-grid.