% BH-GRN grammar for semantic translation
% semsgram.pl

:-op(1100, xfx, --->).
:-op(1100, xfx, ===>).
:-op(400, yfx, *).

term_expansion((LHS ---> RHS, Code),(LHS ---> RHS, Code) ).
term_expansion((LHS ===> RHS, Code),(LHS ===> RHS, Code) ).
term_expansion((LHS ---> RHS),(LHS ---> RHS, no_code) ).
term_expansion((LHS ===> RHS),(LHS ===> RHS, no_code) ).

s(S_trans)   ---> [np(NP_trans), vp(VP_trans)],
                  {beta_reduce(NP_trans*VP_trans, S_trans)}.
vp(Vi_trans) ---> [vi(Vi_trans)].
vp(VP_trans) ---> [vt(Vt_trans), np(NP_trans)],
                  {beta_reduce(Vt_trans*NP_trans, VP_trans)}.
np(NP_trans) ---> [det(Det_trans), nbar(Nbar_trans)],
                  {beta_reduce(Det_trans*Nbar_trans, NP_trans)}.
np(Pname_trans) ---> [pname(Pname_trans)].
nbar(N_trans) ---> [n(N_trans)].

det(Q^P^for_all(X, Q*X => P*X)) ===> [every].
n(X^soldier1(X))                ===> [soldier].
np(P^(P*d))                     ===> [duncan].
np(P^(P*m))                     ===> [macbeth].
vi(X^died1(X))                  ===> [died].
vt(NP1^Y^(NP1*X^killed1(Y, X)))    ===> [killed].
