1/*  Copyright 1986-2020 David H. D. Warren and Fernando C. N. Pereira
    2
    3    Permission is hereby granted, free of charge, to any person obtaining a
    4    copy of this software and associated documentation files (the
    5    "Software"), to deal in the Software without restriction, including
    6    without limitation the rights to use, copy, modify, merge, publish,
    7    distribute, sublicense, and/or sell copies of the Software, and to
    8    permit persons to whom the Software is furnished to do so, subject to
    9    the following conditions:
   10
   11    The above copyright notice and this permission notice shall be included
   12    in all copies or substantial portions of the Software.
   13
   14    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   15    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   16    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   17    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   18    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   19    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   20    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   21*/
   22
   23sentence(B,C,D,E,F) :-
   24   declarative(B,C,G,E,H),
   25   terminator(.,G,D,H,F).
   26sentence(B,C,D,E,F) :-
   27   wh_question(B,C,G,E,H),
   28   terminator(?,G,D,H,F).
   29sentence(B,C,D,E,F) :-
   30   topic(C,G,E,H),
   31   wh_question(B,G,I,H,J),
   32   terminator(?,I,D,J,F).
   33sentence(B,C,D,E,F) :-
   34   yn_question(B,C,G,E,H),
   35   terminator(?,G,D,H,F).
   36sentence(B,C,D,E,F) :-
   37   imperative(B,C,G,E,H),
   38   terminator(!,G,D,H,F).
   39
   40
   41pp(B,C,D,E,F,F,G,H) :-
   42   virtual(pp(B,C,D,E),G,H).
   43pp(pp(B,C),D,E,F,G,H,I,J) :-
   44   prep(B,G,K,I,L),
   45   prep_case(M),
   46   np(C,N,M,O,D,E,F,K,H,L,J).
   47
   48
   49topic(B,C,D,x(gap,nonterminal,pp(E,compl,F,G),H)) :-
   50   pp(E,compl,F,G,B,I,D,J),
   51   opt_comma(I,C,J,H).
   52
   53
   54opt_comma(B,C,D,E) :-
   55   ~(',',B,C,D,E).
   56opt_comma(B,B,C,C).
   57
   58
   59declarative(decl(B),C,D,E,F) :-
   60   s(B,G,C,D,E,F).
   61
   62
   63wh_question(whq(B,C),D,E,F,G) :-
   64   variable_q(B,H,I,J,D,K,F,L),
   65   question(I,J,C,K,E,L,G).
   66
   67
   68np(B,C,D,E,F,G,H,I,I,J,K) :-
   69   virtual(np(B,C,D,E,F,G,H),J,K).
   70np(np(B,C,[]),B,D,def,E,F,G,H,I,J,K) :-
   71   is_pp(F),
   72   pers_pron(C,B,L,H,I,J,K),
   73   empty(G),
   74   role(L,decl,D).
   75np(np(B,C,D),B,E,F,G,H,I,J,K,L,M) :-
   76   is_pp(H),
   77   np_head(C,B,F+N,O,D,J,P,L,Q),
   78   np_all(R),
   79   np_compls(N,B,G,O,R,I,P,K,Q,M).
   80np(part(B,C),3+D,E,indef,F,G,H,I,J,K,L) :-
   81   is_pp(G),
   82   determiner(B,D,indef,I,M,K,N),
   83   ~(of,M,O,N,P),
   84   s_all(Q),
   85   prep_case(R),
   86   np(C,3+plu,R,def,F,Q,H,O,J,P,L).
   87
   88
   89variable_q(B,C,D,E,F,G,H,x(gap,nonterminal,np(I,C,E,J,K,L,M),N)) :-
   90   whq(B,C,I,D,F,G,H,N),
   91   do_trace(L,M).
   92variable_q(B,C,compl,D,E,F,G,x(gap,nonterminal,pp(pp(H,I),compl,J,K),L)) :-
   93   prep(H,E,M,G,N),
   94   whq(B,C,I,O,M,F,N,L),
   95   do_trace(J,K),
   96   compl_case(D).
   97variable_q(B,C,compl,D,E,F,G,x(gap,nonterminal,adv_phrase(pp(H,np(C,np_head(int_det(B),[],I),[])),J,K),L)) :-
   98   context_pron(H,I,E,F,G,L),
   99   do_trace(J,K),
  100   verb_case(D).
  101variable_q(B,C,compl,D,E,F,G,x(gap,nonterminal,pred(adj,value(H,wh(B)),I),J)) :-
  102   ~(how,E,K,G,L),
  103   adj(quant,H,K,F,L,J),
  104   empty(I),
  105   verb_case(D).
  106
  107
  108adv_phrase(B,C,D,E,E,F,G) :-
  109   virtual(adv_phrase(B,C,D),F,G).
  110adv_phrase(pp(B,C),D,E,F,G,H,I) :-
  111   loc_pred(B,F,J,H,K),
  112   pp(pp(prep(of),C),compl,D,E,J,G,K,I).
  113
  114
  115pred(B,C,D,E,E,F,G) :-
  116   virtual(pred(B,C,D),F,G).
  117pred(B,C,D,E,F,G,H) :-
  118   adj_phrase(C,D,E,F,G,H).
  119pred(neg,B,C,D,E,F,G) :-
  120   s_all(H),
  121   pp(B,compl,H,C,D,E,F,G).
  122pred(B,C,D,E,F,G,H) :-
  123   s_all(I),
  124   adv_phrase(C,I,D,E,F,G,H).
  125
  126
  127whq(B,C,D,undef,E,F,G,H) :-
  128   int_det(B,C,E,I,G,J),
  129   s_all(K),
  130   np(D,C,L,M,subj,K,N,I,F,J,H).
  131whq(B,3+C,np(3+C,wh(B),[]),D,E,F,G,H) :-
  132   int_pron(D,E,F,G,H).
  133
  134
  135int_det(B,3+C,D,E,F,G) :-
  136   whose(B,C,D,E,F,G).
  137int_det(B,3+C,D,E,F,G) :-
  138   int_art(B,C,D,E,F,G).
  139
  140
  141np_head0(B,C,D,E,E,F,G) :-
  142   virtual(np_head0(B,C,D),F,G).
  143np_head0(name(B),3+sin,def+proper,C,D,E,F) :-
  144   name(B,C,D,E,F).
  145np_head0(np_head(B,C,D),3+E,F+common,G,H,I,J) :-
  146   determiner(B,E,F,G,K,I,L),
  147   adjs(C,K,M,L,N),
  148   noun(D,E,M,H,N,J).
  149np_head0(B,C,def+proper,D,E,F,x(nogap,nonterminal,gen_marker,G)) :-
  150   poss_pron(B,C,D,E,F,G).
  151np_head0(np_head(B,[],C),3+sin,indef+common,D,E,F,G) :-
  152   quantifier_pron(B,C,D,E,F,G).
  153
  154
  155gen_marker(B,B,C,D) :-
  156   virtual(gen_marker,C,D).
  157gen_marker(B,C,D,E) :-
  158   ~('''',B,F,D,G),
  159   an_s(F,C,G,E).
  160
  161
  162whose(B,C,D,E,F,x(nogap,nonterminal,np_head0(wh(B),C,proper),x(nogap,nonterminal,gen_marker,G))) :-
  163   ~(whose,D,E,F,G).
  164
  165
  166question(B,C,D,E,F,G,H) :-
  167   subj_question(B),
  168   role(subj,I,C),
  169   s(D,J,E,F,G,H).
  170question(B,C,D,E,F,G,H) :-
  171   fronted_verb(B,C,E,I,G,J),
  172   s(D,K,I,F,J,H).
  173
  174
  175det(B,C,D,E,E,F,G) :-
  176   virtual(det(B,C,D),F,G).
  177det(det(B),C,D,E,F,G,H) :-
  178   terminal(I,E,F,G,H),
  179   det(I,C,B,D).
  180det(generic,B,generic,C,C,D,D).
  181
  182
  183int_art(B,C,D,E,F,x(nogap,nonterminal,det(G,C,def),H)) :-
  184   int_art(B,C,G,D,E,F,H).
  185
  186
  187subj_question(subj).
  188
  189
  190subj_question(undef).
  191
  192
  193yn_question(q(B),C,D,E,F) :-
  194   fronted_verb(nil,G,C,H,E,I),
  195   s(B,J,H,D,I,F).
  196
  197
  198verb_form(B,C,D,E,F,F,G,H) :-
  199   virtual(verb_form(B,C,D,E),G,H).
  200verb_form(B,C,D,E,F,G,H,I) :-
  201   terminal(J,F,G,H,I),
  202   verb_form(J,B,C,D).
  203
  204
  205neg(B,C,D,D,E,F) :-
  206   virtual(neg(B,C),E,F).
  207neg(aux+B,neg,C,D,E,F) :-
  208   ~(not,C,D,E,F).
  209neg(B,pos,C,C,D,D).
  210
  211
  212fronted_verb(B,C,D,E,F,x(gap,nonterminal,verb_form(G,H,I,J),x(nogap,nonterminal,neg(K,L),M))) :-
  213   verb_form(G,H,I,N,D,O,F,P),
  214   verb_type(G,aux+Q),
  215   role(B,J,C),
  216   neg(R,L,O,E,P,M).
  217
  218
  219imperative(imp(B),C,D,E,F) :-
  220   imperative_verb(C,G,E,H),
  221   s(B,I,G,D,H,F).
  222
  223
  224imperative_verb(B,C,D,x(nogap,terminal,you,x(nogap,nonterminal,verb_form(E,imp+fin,2+sin,main),F))) :-
  225   verb_form(E,inf,G,H,B,C,D,F).
  226
  227
  228s(s(B,C,D,E),F,G,H,I,J) :-
  229   subj(B,K,L,G,M,I,N),
  230   verb(C,K,L,O,M,P,N,Q),
  231   empty(R),
  232   s_all(S),
  233   verb_args(L,O,D,R,T,P,U,Q,V),
  234   minus(S,T,W),
  235   my_plus(S,T,X),
  236   verb_mods(E,W,X,F,U,H,V,J).
  237
  238
  239subj(there,B,C+be,D,E,F,G) :-
  240   ~(there,D,E,F,G).
  241subj(B,C,D,E,F,G,H) :-
  242   s_all(I),
  243   subj_case(J),
  244   np(B,C,J,K,subj,I,L,E,F,G,H).
  245
  246
  247np_head(B,C,D,E,F,G,H,I,J) :-
  248   np_head0(K,L,M,G,N,I,O),
  249   possessive(K,L,M,P,P,B,C,D,E,F,N,H,O,J).
  250
  251
  252np_compls(proper,B,C,[],D,E,F,F,G,G) :-
  253   empty(E).
  254np_compls(common,B,C,D,E,F,G,H,I,J) :-
  255   np_all(K),
  256   np_mods(B,C,L,D,E,M,K,N,G,O,I,P),
  257   relative(B,L,M,N,F,O,H,P,J).
  258
  259
  260possessive(B,C,D,[],E,F,G,H,I,J,K,L,M,N) :-
  261   gen_case(K,O,M,P),
  262   np_head0(Q,R,S,O,T,P,U),
  263   possessive(Q,R,S,V,[pp(poss,np(C,B,E))|V],F,G,H,I,J,T,L,U,N).
  264possessive(B,C,D,E,F,B,C,D,E,F,G,G,H,H).
  265
  266
  267gen_case(B,C,D,x(nogap,terminal,the,E)) :-
  268   gen_marker(B,C,D,E).
  269
  270
  271an_s(B,C,D,E) :-
  272   ~(s,B,C,D,E).
  273an_s(B,B,C,C).
  274
  275
  276determiner(B,C,D,E,F,G,H) :-
  277   det(B,C,D,E,F,G,H).
  278determiner(B,C,D,E,F,G,H) :-
  279   quant_phrase(B,C,D,E,F,G,H).
  280
  281
  282quant_phrase(quant(B,C),D,E,F,G,H,I) :-
  283   quant(B,E,F,J,H,K),
  284   number(C,D,J,G,K,I).
  285
  286
  287quant(B,indef,C,D,E,F) :-
  288   neg_adv(G,B,C,H,E,I),
  289   comp_adv(G,H,J,I,K),
  290   ~(than,J,D,K,F).
  291quant(B,indef,C,D,E,F) :-
  292   ~(at,C,G,E,H),
  293   sup_adv(I,G,D,H,F),
  294   sup_op(I,B).
  295quant(the,def,B,C,D,E) :-
  296   ~(the,B,C,D,E).
  297quant(same,indef,B,B,C,C).
  298
  299
  300neg_adv(B,not+B,C,D,E,F) :-
  301   ~(not,C,D,E,F).
  302neg_adv(B,B,C,C,D,D).
  303
  304
  305sup_op(least,not+less).
  306sup_op(most,not+more).
  307
  308
  309np_mods(B,C,D,[E|F],G,H,I,J,K,L,M,N) :-
  310   np_mod(B,C,E,G,O,K,P,M,Q),
  311   do_trace(R),
  312   my_plus(R,O,S),
  313   minus(G,S,T),
  314   my_plus(O,G,U),
  315   np_mods(B,C,D,F,T,H,U,J,P,L,Q,N).
  316np_mods(B,C,D,D,E,E,F,F,G,G,H,H).
  317
  318
  319np_mod(B,C,D,E,F,G,H,I,J) :-
  320   pp(D,C,E,F,G,H,I,J).
  321np_mod(B,C,D,E,F,G,H,I,J) :-
  322   reduced_relative(B,D,E,F,G,H,I,J).
  323
  324
  325verb_mods([B|C],D,E,F,G,H,I,J) :-
  326   verb_mod(B,D,K,G,L,I,M),
  327   do_trace(N),
  328   my_plus(N,K,O),
  329   minus(D,O,P),
  330   my_plus(K,D,Q),
  331   verb_mods(C,P,Q,F,L,H,M,J).
  332verb_mods([],B,C,C,D,D,E,E).
  333
  334
  335verb_mod(B,C,D,E,F,G,H) :-
  336   adv_phrase(B,C,D,E,F,G,H).
  337verb_mod(B,C,D,E,F,G,H) :-
  338   is_adv(C),
  339   adverb(B,E,F,G,H),
  340   empty(D).
  341verb_mod(B,C,D,E,F,G,H) :-
  342   pp(B,compl,C,D,E,F,G,H).
  343
  344
  345adjs([B|C],D,E,F,G) :-
  346   pre_adj(B,D,H,F,I),
  347   adjs(C,H,E,I,G).
  348adjs([],B,B,C,C).
  349
  350
  351pre_adj(B,C,D,E,F) :-
  352   adj(G,B,C,D,E,F).
  353pre_adj(B,C,D,E,F) :-
  354   sup_phrase(B,C,D,E,F).
  355
  356
  357sup_phrase(sup(most,B),C,D,E,F) :-
  358   sup_adj(B,C,D,E,F).
  359sup_phrase(sup(B,C),D,E,F,G) :-
  360   sup_adv(B,D,I,F,J),
  361   adj(quant,C,I,E,J,G).
  362
  363
  364comp_phrase(comp(B,C,D),E,F,G,H,I) :-
  365   comp(B,C,F,J,H,K),
  366%  np_no_do_trace(L),		% JW: Not defined
  367   prep_case(M),
  368   np(D,N,M,O,compl,L,E,J,G,K,I).
  369
  370
  371comp(B,C,D,E,F,G) :-
  372   comp_adv(B,D,H,F,I),
  373   adj(quant,C,H,J,I,K),
  374   ~(than,J,E,K,G).
  375comp(more,B,C,D,E,F) :-
  376   rel_adj(B,C,G,E,H),
  377   ~(than,G,D,H,F).
  378comp(same,B,C,D,E,F) :-
  379   ~(as,C,G,E,H),
  380   adj(quant,B,G,I,H,J),
  381   ~(as,I,D,J,F).
  382
  383
  384relative(B,[C],D,E,F,G,H,I,J) :-
  385   is_pred(D),
  386   rel_conj(B,K,C,F,G,H,I,J).
  387relative(B,[],C,D,D,E,E,F,F).
  388
  389
  390rel_conj(B,C,D,E,F,G,H,I) :-
  391   rel(B,J,K,F,L,H,M),
  392   rel_rest(B,C,J,D,K,E,L,G,M,I).
  393
  394
  395rel_rest(B,C,D,E,F,G,H,I,J,K) :-
  396   conj(C,L,D,M,E,H,N,J,O),
  397   rel_conj(B,L,M,G,N,I,O,K).
  398rel_rest(B,C,D,D,E,E,F,F,G,G).
  399
  400
  401rel(B,rel(C,D),E,F,G,H,I) :-
  402   xopen(F,J,H,K),
  403   variable(B,C,J,L,K,M),
  404   s(D,N,L,O,M,P),
  405   do_trace(Q),
  406   minus(N,Q,E),
  407   close(O,G,P,I).
  408
  409
  410variable(B,C,D,E,F,x(gap,nonterminal,np(np(B,wh(C),[]),B,G,H,I,J,K),L)) :-
  411   ~(that,D,E,F,L),
  412   do_trace(J,K).
  413variable(B,C,D,E,F,x(gap,nonterminal,np(G,H,I,J,K,L,M),N)) :-
  414   wh(C,B,G,H,I,D,E,F,N),
  415   do_trace(L,M).
  416variable(B,C,D,E,F,x(gap,nonterminal,pp(pp(G,H),compl,I,J),K)) :-
  417   prep(G,D,L,F,M),
  418   wh(C,B,H,N,O,L,E,M,K),
  419   do_trace(I,J),
  420   compl_case(O).
  421
  422
  423wh(B,C,np(C,wh(B),[]),C,D,E,F,G,H) :-
  424   rel_pron(I,E,F,G,H),
  425   role(I,decl,D).
  426wh(B,C,np(D,E,[pp(F,G)]),D,H,I,J,K,L) :-
  427   np_head0(E,D,M+common,I,N,K,O),
  428   prep(F,N,P,O,Q),
  429   wh(B,C,G,R,S,P,J,Q,L).
  430wh(B,C,D,E,F,G,H,I,J) :-
  431   whose(B,C,G,K,I,L),
  432   s_all(M),
  433   np(D,E,F,def,subj,M,N,K,H,L,J).
  434
  435
  436reduced_relative(B,C,D,E,F,G,H,I) :-
  437   is_pred(D),
  438   reduced_rel_conj(B,J,C,E,F,G,H,I).
  439
  440
  441reduced_rel_conj(B,C,D,E,F,G,H,I) :-
  442   reduced_rel(B,J,K,F,L,H,M),
  443   reduced_rel_rest(B,C,J,D,K,E,L,G,M,I).
  444
  445
  446reduced_rel_rest(B,C,D,E,F,G,H,I,J,K) :-
  447   conj(C,L,D,M,E,H,N,J,O),
  448   reduced_rel_conj(B,L,M,G,N,I,O,K).
  449reduced_rel_rest(B,C,D,D,E,E,F,F,G,G).
  450
  451
  452reduced_rel(B,reduced_rel(C,D),E,F,G,H,I) :-
  453   xopen(F,J,H,K),
  454   reduced_wh(B,C,J,L,K,M),
  455   s(D,N,L,O,M,P),
  456   do_trace(Q),
  457   minus(N,Q,E),
  458   close(O,G,P,I).
  459
  460
  461reduced_wh(B,C,D,E,F,x(nogap,nonterminal,np(np(B,wh(C),[]),B,G,H,I,J,K),x(nogap,nonterminal,verb_form(be,pres+fin,B,main),x(nogap,nonterminal,neg(L,M),x(nogap,nonterminal,pred(M,N,O),P))))) :-
  462   neg(Q,M,D,R,F,S),
  463   pred(M,N,O,R,E,S,P),
  464   do_trace(J,K),
  465   subj_case(G).
  466reduced_wh(B,C,D,E,F,x(nogap,nonterminal,np(np(B,wh(C),[]),B,G,H,I,J,K),x(nogap,nonterminal,verb(L,M,N,O),P))) :-
  467   participle(L,N,O,D,E,F,P),
  468   do_trace(J,K),
  469   subj_case(G).
  470reduced_wh(B,C,D,E,F,x(nogap,nonterminal,np(G,H,I,J,K,L,M),x(gap,nonterminal,np(np(B,wh(C),[]),B,N,O,P,Q,R),S))) :-
  471   s_all(T),
  472   subj_case(I),
  473   verb_case(N),
  474   np(G,H,U,J,subj,T,V,D,E,F,S),
  475   do_trace(L,M),
  476   do_trace(Q,R).
  477
  478
  479verb(B,C,D,E,F,F,G,H) :-
  480   virtual(verb(B,C,D,E),G,H).
  481verb(verb(B,C,D+fin,E,F),G,H,C,I,J,K,L) :-
  482   verb_form(M,D+fin,G,N,I,O,K,P),
  483   verb_type(M,Q),
  484   neg(Q,F,O,R,P,S),
  485   rest_verb(N,M,B,C,E,R,J,S,L),
  486   verb_type(B,H).
  487
  488
  489rest_verb(aux,have,B,C,[perf|D],E,F,G,H) :-
  490   verb_form(I,past+part,J,K,E,L,G,M),
  491   have(I,B,C,D,L,F,M,H).
  492rest_verb(aux,be,B,C,D,E,F,G,H) :-
  493   verb_form(I,J,K,L,E,M,G,N),
  494   be(J,I,B,C,D,M,F,N,H).
  495rest_verb(aux,do,B,active,[],C,D,E,F) :-
  496   verb_form(B,inf,G,H,C,D,E,F).
  497rest_verb(main,B,B,active,[],C,C,D,D).
  498
  499
  500have(be,B,C,D,E,F,G,H) :-
  501   verb_form(I,J,K,L,E,M,G,N),
  502   be(J,I,B,C,D,M,F,N,H).
  503have(B,B,active,[],C,C,D,D).
  504
  505
  506be(past+part,B,B,passive,[],C,C,D,D).
  507be(pres+part,B,C,D,[prog],E,F,G,H) :-
  508   passive(B,C,D,E,F,G,H).
  509
  510
  511passive(be,B,passive,C,D,E,F) :-
  512   verb_form(B,past+part,G,H,C,D,E,F),
  513   verb_type(B,I),
  514   passive(I).
  515passive(B,B,active,C,C,D,D).
  516
  517
  518participle(verb(B,C,inf,D,E),F,C,G,H,I,J) :-
  519   neg(K,E,G,L,I,M),
  520   verb_form(B,N,O,P,L,H,M,J),
  521   participle(N,C,D),
  522   verb_type(B,F).
  523
  524
  525passive(B+trans).
  526passive(B+ditrans).
  527
  528
  529participle(pres+part,active,[prog]).
  530participle(past+part,passive,[]).
  531
  532
  533close(B,B,C,D) :-
  534   virtual(close,C,D).
  535
  536
  537xopen(B,B,C,x(gap,nonterminal,close,C)).
  538
  539
  540verb_args(B+C,D,E,F,G,H,I,J,K) :-
  541   advs(E,L,M,H,N,J,O),
  542   verb_args(C,D,L,F,G,N,I,O,K).
  543verb_args(trans,active,[arg(dir,B)],C,D,E,F,G,H) :-
  544   verb_arg(np,B,D,E,F,G,H).
  545verb_args(ditrans,B,[arg(C,D)|E],F,G,H,I,J,K) :-
  546   verb_arg(np,D,L,H,M,J,N),
  547   object(C,E,L,G,M,I,N,K).
  548verb_args(be,B,[void],C,C,D,E,F,G) :-
  549   terminal(there,D,E,F,G).
  550verb_args(be,B,[arg(pred,C)],D,E,F,G,H,I) :-
  551   pred_conj(J,C,E,F,G,H,I).
  552verb_args(be,B,[arg(dir,C)],D,E,F,G,H,I) :-
  553   verb_arg(np,C,E,F,G,H,I).
  554verb_args(have,active,[arg(dir,B)],C,D,E,F,G,H) :-
  555   verb_arg(np,B,D,E,F,G,H).
  556verb_args(B,C,[],D,D,E,E,F,F) :-
  557   no_args(B).
  558
  559
  560object(B,C,D,E,F,G,H,I) :-
  561   adv(J),
  562   minus(J,D,K),
  563   advs(C,L,K,F,M,H,N),
  564   obj(B,L,D,E,M,G,N,I).
  565
  566
  567obj(ind,[arg(dir,B)],C,D,E,F,G,H) :-
  568   verb_arg(np,B,D,E,F,G,H).
  569obj(dir,[],B,B,C,C,D,D).
  570
  571
  572pred_conj(B,C,D,E,F,G,H) :-
  573   pred(I,J,K,E,L,G,M),
  574   pred_rest(B,J,C,K,D,L,F,M,H).
  575
  576
  577pred_rest(B,C,D,E,F,G,H,I,J) :-
  578   conj(B,K,C,L,D,G,M,I,N),
  579   pred_conj(K,L,F,M,H,N,J).
  580pred_rest(B,C,C,D,D,E,E,F,F).
  581
  582
  583verb_arg(np,B,C,D,E,F,G) :-
  584   s_all(H),
  585   verb_case(I),
  586   np(B,J,I,K,compl,H,C,D,E,F,G).
  587
  588
  589advs([B|C],D,E,F,G,H,I) :-
  590   is_adv(E),
  591   adverb(B,F,J,H,K),
  592   advs(C,D,E,J,G,K,I).
  593advs(B,B,C,D,D,E,E).
  594
  595
  596adj_phrase(B,C,D,E,F,G) :-
  597   adj(H,B,D,E,F,G),
  598   empty(C).
  599adj_phrase(B,C,D,E,F,G) :-
  600   comp_phrase(B,C,D,E,F,G).
  601
  602
  603no_args(trans).
  604no_args(ditrans).
  605no_args(intrans).
  606
  607
  608conj(conj(B,C),conj(B,D),E,F,conj(B,E,F),G,H,I,J) :-
  609   conj(B,C,D,G,H,I,J).
  610
  611
  612noun(B,C,D,E,F,G) :-
  613   terminal(H,D,E,F,G),
  614   noun_form(H,B,C).
  615
  616
  617adj(B,adj(C),D,E,F,G) :-
  618   terminal(C,D,E,F,G),
  619   adj(C,B).
  620
  621
  622prep(prep(B),C,D,E,F) :-
  623   terminal(B,C,D,E,F),
  624   prep(B).
  625
  626
  627rel_adj(adj(B),C,D,E,F) :-
  628   terminal(G,C,D,E,F),
  629   rel_adj(G,B).
  630
  631
  632sup_adj(adj(B),C,D,E,F) :-
  633   terminal(G,C,D,E,F),
  634   sup_adj(G,B).
  635
  636
  637comp_adv(less,B,C,D,E) :-
  638   ~(less,B,C,D,E).
  639comp_adv(more,B,C,D,E) :-
  640   ~(more,B,C,D,E).
  641
  642
  643sup_adv(least,B,C,D,E) :-
  644   ~(least,B,C,D,E).
  645sup_adv(most,B,C,D,E) :-
  646   ~(most,B,C,D,E).
  647
  648
  649rel_pron(B,C,D,E,F) :-
  650   terminal(G,C,D,E,F),
  651   rel_pron(G,B).
  652
  653
  654name(B,C,D,E,F) :-
  655   opt_the(C,G,E,H),
  656   terminal(B,G,D,H,F),
  657   name(B).
  658
  659
  660int_art(B,plu,quant(same,wh(B)),C,D,E,F) :-
  661   ~(how,C,G,E,H),
  662   ~(many,G,D,H,F).
  663int_art(B,C,D,E,F,G,H) :-
  664   terminal(I,E,F,G,H),
  665   int_art(I,B,C,D).
  666
  667
  668int_pron(B,C,D,E,F) :-
  669   terminal(G,C,D,E,F),
  670   int_pron(G,B).
  671
  672
  673adverb(adv(B),C,D,E,F) :-
  674   terminal(B,C,D,E,F),
  675   adverb(B).
  676
  677
  678poss_pron(pronoun(B),C+D,E,F,G,H) :-
  679   terminal(I,E,F,G,H),
  680   poss_pron(I,B,C,D).
  681
  682
  683pers_pron(pronoun(B),C+D,E,F,G,H,I) :-
  684   terminal(J,F,G,H,I),
  685   pers_pron(J,B,C,D,E).
  686
  687
  688quantifier_pron(B,C,D,E,F,G) :-
  689   terminal(H,D,E,F,G),
  690   quantifier_pron(H,B,C).
  691
  692
  693context_pron(prep(in),place,B,C,D,E) :-
  694   ~(where,B,C,D,E).
  695context_pron(prep(at),time,B,C,D,E) :-
  696   ~(when,B,C,D,E).
  697
  698
  699number(nb(B),C,D,E,F,G) :-
  700   terminal(H,D,E,F,G),
  701   number(H,B,C).
  702
  703
  704terminator(B,C,D,E,F) :-
  705   terminal(G,C,D,E,F),
  706   terminator(G,B).
  707
  708
  709opt_the(B,B,C,C).
  710opt_the(B,C,D,E) :-
  711   ~(the,B,C,D,E).
  712
  713
  714conj(B,list,list,C,D,E,F) :-
  715   terminal(',',C,D,E,F).
  716conj(B,list,end,C,D,E,F) :-
  717   terminal(B,C,D,E,F),
  718   conj(B).
  719
  720
  721loc_pred(B,C,D,E,F) :-
  722   terminal(G,C,D,E,F),
  723   loc_pred(G,B).
  724
  725
  726~(B,C,D,E,F) :-
  727   terminal(B,C,D,E,F),
  728   ~