s(s(NP,VP), P0, P) <=
   [np(NP, P0, P1), vp(VP, P1, P)].
np(np(Det,N,Rel), P0, P) <=
   [det(Det, P0, P1), 
    n(N, P1, P2), 
    optrel(Rel, P2, P)].
np(np(PN), P0, P) <= [pn(PN, P0, P)].
det(gen(NP), P0, P) <=
   [np(NP, P0, P1), connects('''s', P1, P)].
det(Det, P0, P) <= [art(Det, P0, P)].
vp(vp(TV,NP), P0, P) <=
   [tv(TV, P0, P1), np(NP, P1, P)].
vp(vp(IV), P0, P) <= [iv(IV, P0, P)].
optrel(rel(epsilon), P, P) <= [].
optrel(rel(that,VP), P0, P) <=
   [connects(that, P0, P1), vp(VP, P1, P)].

pn(pn(terry), P0, P) <= [connects(terry, P0, P)].
pn(pn(shrdlu), P0, P) <= [connects(shrdlu, P0, P)].
iv(iv(halts), P0, P) <= [connects(halts, P0, P)].
art(art(a), P0, P) <= [connects(a, P0, P)].
n(n(program), P0, P) <= [connects(program, P0, P)].
tv(tv(writes), P0, P) <= [connects(writes, P0, P)].
