
% Grammar 7.10 A BH-GRN grammar that achieves simplified Cooper storage

:-op(1100, xfx, --->).
:-op(1100, xfx, ===>).
:-op(400, yfx, *).
:-op(510, xfy, =>).
:-op(500, xfy, &).
:-op(500, xfy, #).
:-op( 30, fy, ~).


s(Smx, Store0-Store) ---> 
  [np(NPmx, Store0-Store1), vp(VPmx, Store1-Store)],
  {beta_reduce(NPmx*VPmx, Smx)}.

vp(Vimx, Store) ---> 
  [vi(Vimx, Store)].
vp(VPmx, Store0-Store) ---> 
  [vt(Vtmx, Store0-Store1), np(NPmx, Store1-Store)],
  {beta_reduce(Vtmx*NPmx, VPmx)}.

np(P^(P*Z), [stored(NPmx, Z) | Store0]-Store) ---> 
  [det(Detmx, Store0-Store1), nbar(Nbarmx, Store1-Store)],
  {beta_reduce(Detmx*Nbarmx, NPmx)}.
np(PNamemx, Store) ---> 
  [pname(PNamemx, Store)].

nbar(Nmx, Store) --->
   [n(Nmx, Store)].

det(Q^P^for_all(X, Q*X => P*X), S-S) ===> [every].
det(Q^P^exists(X, Q*X & P*X), S-S)   ===> [some].
n(X^soldier1(X), S-S)                ===> [soldier].
n(X^witch1(X), S-S)                  ===> [witch].
pname(P^(P*d), S-S)                  ===> [duncan].
vi(X^died1(X), S-S)                  ===> [died].
vt(NP^Y^(NP*X^killed1(Y, X)), S-S)     ===> [killed].



