hd-spec-rule := birule-hdfinal &
 [ SYN [ SPR < >,
         COMPS #comps ],
   NH1 #nonhead, 
   H [ SYN [ SPR < #nonhead >,
             COMPS #comps & < > ] ] ].

hd-comp-rule := birule-hdfirst & 
 [ SYN [ SPR #spr,  
	 COMPS < > ], 
   H [ SYN [ SPR #spr,
	     COMPS < #nonhead > ] ],
   NH1 #nonhead & [ SYN [ COMPS < > ] ] ].

hd-two-comp-rule := trirule-hdfirst & 
 [ SYN [ SPR #spr,  
	 COMPS < > ], 
   H [ SYN [ SPR #spr,
	     COMPS < #nonhead1, #nonhead2 > ] ],
   NH1 #nonhead1 & [ SYN [ COMPS < > ] ],
   NH2 #nonhead2 & [ SYN [ COMPS < > ] ] ].

hd-mod-rule := birule-hdfirst & 
 [ SYN [ SPR #spr,  
	 COMPS #comps ], 
   H #mod & [ SYN [ SPR #spr,
                    COMPS #comps & < >,
                    MODIFIED false ] ],
   NH1 phrase &
       [ SYN [ HEAD [ MOD < #mod > ],
               COMPS < > ] ] ].

mod-hd-rule := birule-hdfinal & 
 [ SYN [ SPR #spr,  
	 COMPS #comps,
         MODIFIED true ], 
   H #mod & [ SYN [ SPR #spr,
                    COMPS #comps & < > ] ],
   NH1 [ SYN [ HEAD [ MOD < #mod >,
                      PRED false ],
               COMPS < > ] ] ].

bare-pl-rule := unary-hd-rule &
 [ SYN [ SPR < >,
         COMPS #comps ],
   SEM [ RESTR [ LIST [ FIRST quant_pred & 
                              [ BV #index,
                                RELN r_bare-pl ],
                        REST #rlist ],
                 LAST #rlast ],
         INDEX #index ],
   H [ SYN [ HEAD noun,
             SPR < synsem-struc >,
             COMPS #comps & < > ],
       SEM [ RESTR [ LIST #rlist,
                     LAST #rlast ],
             INDEX #index ] ] ].