% Signature % ========= bot sub [cat,synsem,syn,sem_obj,list_quant]. cat sub [] intro [synsem:synsem, qstore:list_quant]. synsem sub [functional, basic]. functional sub [forward,backward] intro [arg:synsem, res:synsem]. forward sub []. backward sub []. basic sub [] intro [syn:syn, sem:sem_obj]. syn sub [np,s,n]. np sub []. s sub []. n sub []. sem_obj sub [individual, proposition, property]. individual sub [j,m]. j sub []. m sub []. property sub [] intro [ind:individual, body:proposition]. proposition sub [logical,quant,run,hit,nominal]. logical sub [and,or]. and sub [] intro [conj1:proposition, conj2:proposition]. or sub [] intro [disj1:proposition, disj2:proposition]. quant sub [every,some] intro [var:individual, restr:proposition, scope:proposition]. every sub []. some sub []. run sub [] intro [runner:individual]. hit sub [] intro [hitter:individual, hittee:individual]. nominal sub [kid,toy,big,red] intro [arg1:individual]. kid sub []. toy sub []. big sub []. red sub []. list_quant sub [e_list, ne_list_quant]. e_list sub []. ne_list_quant sub [] intro [hd:quant, tl:list_quant]. % Lexicon % ======= kid ---> @ cn(kid). toy ---> @ cn(toy). big ---> @ adj(big). red ---> @ adj(red). every ---> @ gdet(every). some ---> @ gdet(some). john ---> @ pn(j). runs ---> @ iv((run,runner:Ind),Ind). hits ---> @ tv(hit). % Grammar % ======= forward_application rule (synsem:Z, qstore:Qs) ===> cat> (synsem:(forward, arg:Y, res:Z), qstore:Qs1), cat> (synsem:Y, qstore:Qs2), goal> append(Qs1,Qs2,Qs). backward_application rule (synsem:Z, qstore:Qs) ===> cat> (synsem:Y, qstore:Qs1), cat> (synsem:(backward, arg:Y, res:Z), qstore:Qs2), goal> append(Qs1,Qs2,Qs). s_quantifier rule (synsem:(syn:s, sem:(Q, scope:Phi)), qstore:QsRest) ===> cat> (synsem:(syn:s, sem:Phi), qstore:Qs), goal> select(Qs,Q,QsRest). % Macros % ====== cn(Pred) macro synsem:(syn:n, sem:(body:(Pred, arg1:X), ind:X)), @ quantifier_free. gdet(Quant) macro synsem:(forward, arg: @ n(Restr,Ind), res: @ np(Ind)), qstore:[@ quant(Quant,Ind,Restr)]. quant(Quant,Ind,Restr) macro (Quant, var:Ind, restr:Restr). adj(Rel) macro synsem:(forward, arg: @ n(Restr,Ind), res: @ n((and, conj1:Restr, conj2:(Rel, arg1:Ind)), Ind)), @ quantifier_free. n(Restr,Ind) macro syn:n, sem:(body:Restr, ind:Ind). np(Ind) macro syn:np, sem:Ind. pn(Name) macro synsem: @ np(Name), @ quantifier_free. iv(Sem,Arg) macro synsem:(backward, arg: @ np(Arg), res:(syn:s, sem:Sem)), @ quantifier_free. tv(Rel) macro synsem:(forward, arg:(syn:np, sem:Y), res:(backward, arg:(syn:np, sem:X), res:(syn:s, sem:(Rel, hitter:X, hittee:Y)))), @ quantifier_free. quantifier_free macro qstore:[]. % Definite Clauses % ================ append([],Xs,Xs) if true. append([X|Xs],Ys,[X|Zs]) if append(Xs,Ys,Zs). select([Q|Qs],Q,Qs) if true. select([Q1|Qs1],Q,[Q1|Qs2]) if select(Qs1,Q,Qs2).