20.1.3 Gamma

We now turn to the indexed family of binary grammatical principles. We will implement it using a case statement dispatching on the role type.

<DG: Gamma>=
proc {Gamma R W1 W2}
   W2.roleLabel = R
   case R of unit then skip 
   
<DG Gamma: role> 
   end 
   
<DG Gamma: constraints> 
end

We equip a lexical node with a roleLabel feature. This serves no other purpose than convenience for display purposes. It indicates the label on the incoming dependency edge if any.

<DG Word2Node: features>= <<
roleLabel  : _

A subject must be a nominative NP and must agree with its mother

<DG Gamma: role>= >>
[] subject then 
   {FS.include W2.cat CATS_NP}
   W1.agr = W2.agr
   {FS.include W2.agr AGRS_NOM}

<DG: Encoded Values>= << >>
CATS_NP   = {Lex.cats.encode [n pro]}
AGRS_NOM  = {Lex.agrs.encode [nom]}

For a nominative complement (e. g. with sein) the conditions are the same except that agreement is not required.

<DG Gamma: role>= << >>
[] nominative then 
   {FS.include W2.cat CATS_NP}
   {FS.include W2.agr AGRS_NOM}

An object complement must be an accusative NP

<DG Gamma: role>= << >>
[] object then 
   {FS.include W2.cat CATS_NP}
   {FS.include W2.agr AGRS_ACC}

<DG: Encoded Values>= << >>
AGRS_ACC  = {Lex.agrs.encode [acc]}

A dative complement must be a dative NP

<DG Gamma: role>= << >>
[] dative then 
   {FS.include W2.cat CATS_NP}
   {FS.include W2.agr AGRS_DAT}

<DG: Encoded Values>= << >>
AGRS_DAT  = {Lex.agrs.encode [dat]}

A det (determiner) complement must have category det and agree with its mother. Also, it must occur left-most in the yield of the mother (i. e. it must the minimum element).

<DG Gamma: role>= << >>
[] det then 
   W2.cat = CAT_DET
   W1.agr = W2.agr
   W2.index = {FS.int.min W1.yield}

<DG: Encoded Values>= << >>
CAT_DET   = {Lex.cat.encode det}

A ``zu'' particle must have category part (particle), must be the word zu (this should really be encoded), and must immediately precede its mother.

<DG Gamma: role>= << >>
[] zu then 
   W2.cat   = CAT_PART
   W2.word  = 'zu' 
   W1.index = W2.index+1

<DG: Encoded Values>= << >>
CAT_PART  = {Lex.cat.encode part}

A separable verb prefix must have category vpref and must be the prefix expected by the mother. Furthermore, it can only occur separated at the end of the mittelfeld, and its mother must be root.

<DG Gamma: role>= << >>
[] vpref then 
   W2.cat = CAT_VPREF
   {FS.include Lex.vpref.val2int.(W2.word) W1.vpref}
   W2.index = {FS.int.max W2.field.mf}
   W1.index = W1.field.root

<DG: Encoded Values>= << >>
CAT_VPREF = {Lex.cat.encode vpref}

A vp_zu complement is an infinitive with zu: W2 must be an infinitive verb and it must have a ``zu'' as indicated by its zu feature.

<DG Gamma: role>= << >>
[] vp_zu then 
   W2.cat   = CAT_VINF
   W2.haszu = 1

<DG: Encoded Values>= << >>
CAT_VINF  = {Lex.cat.encode vinf}

A vp_inf complement is an infinitive without zu: W2 must be an infinitive verb and it must have no ``zu'' as indicated by its zu feature.

<DG Gamma: role>= << >>
[] vp_inf then 
   W2.cat   = CAT_VINF
   W2.haszu = 0

A vp_past complement is a past participle. The auxiliary it expects must correspond to the mother. Further, since we are not treating relative clauses here, we can impose the restriction that if the mother is root, then then complement must occur at the end of the mittelfeld.

<DG Gamma: role>= << >>
[] vp_past then 
   W2.cat = CAT_VPAST
   {FS.card {FS.intersect W1.aux W2.marks}} >: 0
   (W2.index=:{FS.int.max W2.field.mf})=(W1.index=:W1.field.root)

<DG: Encoded Values>= << >>
CAT_VPAST = {Lex.cat.encode vpast}

For an adj (adjective) modifier, its category must be adj and its mother must be a noun. The adjective must agree with the noun.

<DG Gamma: role>= << >>
[] adj then 
   W1.cat = CAT_N
   W2.cat = CAT_ADJ
   W1.agr = W2.agr

<DG: Encoded Values>= << >>
CAT_N     = {Lex.cat.encode n}
CAT_ADJ   = {Lex.cat.encode adj}

For an adv (adverb) modifier, the mother must be a verb. Furthermore, if W1 is not root, then both must be in the same field.

<DG Gamma: role>= << >>
[] adv then 
   {FS.include W1.cat CATS_V}
   W2.cat = CAT_ADV
   (W1.index\=:W1.field.root)=<:(W1.fieldIndex=:W2.fieldIndex)

<DG: Encoded Values>= << >>
CATS_V    = {Lex.cats.encode [vinf vfin vpast]}
CAT_ADV   = {Lex.cat.encode adv}

For a pp_np (PP) modifier, it must have category prep (yes, we consider the preposition to be head of the PP) and the mother must be an NP or a verb. Further, the preposition must be left-most in its own yield.

<DG Gamma: role>= <<
[] pp_np then 
   W2.cat = CAT_PREP
   {FS.include W1.cat CATS_NPV}
   {FS.int.min W2.yield W2.index}

<DG: Encoded Values>= <<
CATS_NPV  = {FS.union CATS_NP CATS_V}
CAT_PREP  = {Lex.cat.encode prep}

Now some additional constraints that it pays off to inject locally. If W2 is in the Nachfeld, then either its mother W1 is also in the Nachfeld, or W1 is an infinitive verb (no relative clauses yet).

<DG Gamma: constraints>=
{FS.reified.include W2.index W2.field.nf}=<: 
{FS.reified.include W1.index W1.field.nf}+ 
(W2.cat=:CAT_VINF)


Denys Duchier, Claire Gardent and Joachim Niehren
Version 1.3.99 (20050412)