% Starting from 3.12, PS p. 78., simple English grammar: % A German fragment with lots of agreement, by Eric Auer % --> exercise 3.21, 3.22 and 3.23, 12/13 maart 2002 % added 3.20 14 maart 2002 % *** DONE: *** % 3.20 prepositional phrases to modify VPs and N(P)s % comment: this IS ambiguous, and we COULD % augment it using things like "allows a tool" in % the verb lexicon and adding agreement for them % 3.21 subj/verb agreement and det/n agreement % comment: proper nouns are always singular in this % fragment. Pronouns are the only entries with full % person information. "sein" uses this most. Pronouns % are treated like proper nouns / names. % 3.22 rcHead/rcVerb agreement % 3.23 verb subcat: Vtr Vitr Vdtr *** (should be a LIST of % cases, simplified a bit here!) *** % ok: phrase(s,[die,autoren,treffen,die,studentin, % die,den,programmierer,trifft]). % ok: phrase(s,[einige,autoren,geben,jedem,studenten, % jedes,buch,das,ein,student,kennt]). % ok: phrase(s,[die,autoren, % treffen, % die,studentin,mit,dem,studenten, % die, % den,programmierer,fuer,die,autorin,mit,dem,buch, % trifft]). % *************************************** sentence(1) :- phrase(s,[die,autoren,treffen, die,studentin,mit,dem,studenten, die,den,programmierer,fuer,die,autorin, mit,dem,buch,trifft]). sentence(2) :- phrase(s,[jeder,student,liebt, einige,studentinnen]). sentence(3) :- phrase(s,[ich,liebe,mich]). sentence(4) :- phrase(s,[wir,lieben,uns]). sentence(5) :- phrase(s,[du, liebst,ich]). % ungrammatical sentence(6) :- phrase(s,[ich, liebe, du]). % same sentence(7) :- phrase(s,[ich, lieben, dich]). % same sentence(8) :- phrase(s,[ich, liebe, dich]). % ok! sentence(9) :- phrase(s,[er,liebt,die,studentin,mit,dem,buch]). sentence(10) :- phrase(s,[ein,programm,das,bertrand,betrifft, haelt]). sentence(11) :- phrase(s,[ein,programm,das,bertrand,betreffen, haelt]). sentence(12) :- phrase(s,[ich,bin,ein,student]). sentence(13) :- phrase(s,[ich,kenne,einen,studenten]). sentence(14) :- phrase(s,[das,buch,ist,einige,buecher]). % ? sentence(15) :- phrase(s,[das,buch,ist,ein,buch]). % Agreement uses 2 args: gender and person, % person being normally only the numerus... % *************************************** s --> np(Agr,Agr2,nom), vp(Agr,Agr2), optpp(_,_). s(Agr,Agr2) --> np(Agr,Agr2,nom), vp(Agr,Agr2), optpp(_,_). % (the second version is for the case that we are curious) optpp(_,_) --> []. optpp(Agr,Agr2) --> [mit], np(Agr,Agr2,dat), optpp(Agr,Agr2). optpp(Agr,Agr2) --> [fuer], np(Agr,Agr2,acc), optpp(Agr,Agr2). np(Agr,Agr2,Case) --> det(Agr,Agr2,Case), n(Agr,Agr2,Case), optpp(_,_), optrel(Agr,Agr2,_). % studenten, sigh... np(Agr,Agr2,Case) --> det(Agr,Agr2,Case), n(Agr,Agr2), optpp(_,_), optrel(Agr,Agr2,_). np(Agr,singular,_) --> pn(Agr). % names, proper nouns np(Agr,Agr2,Case) --> pron(Agr,Agr2,Case). % pronouns vp(Agr,Agr2) --> iv(Agr,Agr2), optpp(_,_). % "haelt..." vp(Agr,Agr2) --> tv(Agr,Agr2,Case), np(_,_,Case), optpp(_,_). % "kennt den studenten..." % default is thus: acc vp(Agr,Agr2) --> dv(Agr,Agr2,Case1,Case2), np(_,_,Case1), optpp(_,_), np(_,_,Case2), optpp(_,_). % "gibt dem studenten... den stock..." % default is thus: dat, acc % maybe tricky: "gibt dem studenten % mit der hand (att. ambig.!) % ein buch" optrel(_,_,_) --> []. optrel(Agr,Agr2,Case) --> relpron(Agr,Agr2,Case), iv(Agr,Agr2). optrel(Agr,Agr2,nom) --> relpron(Agr,Agr2,nom), np(_,_,acc), tv(Agr,Agr2,acc). % inversion, case-exclusive-or optrel(Agr,Agr2,acc) --> relpron(Agr,Agr2,acc), np(_,_,nom), tv(Agr,Agr2,acc). % inversion, case-exclusive-or optrel(Agr,Agr2,_) --> optpp(Agr,Agr2). % *************************************** relpron(Gend,Pers,nom) --> [RP], {lexrp(Gend,Pers,RP,_,_)}. relpron(Gend,Pers,dat) --> [RP], {lexrp(Gend,Pers,_,RP,_)}. relpron(Gend,Pers,acc) --> [RP], {lexrp(Gend,Pers,_,_,RP)}. % lexrp(male,singular,der,dem,den). lexrp(female,singular,die,die,die). lexrp(neutral,singular,das,das,das). lexrp(_,plural,die,die,die). det(Gend,Pers,nom) --> [DET], {lexdet(Gend,Pers,DET,_,_)}. det(Gend,Pers,dat) --> [DET], {lexdet(Gend,Pers,_,DET,_)}. det(Gend,Pers,acc) --> [DET], {lexdet(Gend,Pers,_,_,DET)}. % lexdet(male,singular, der,dem,den). lexdet(female,singular, die,der,die). lexdet(neutral,singular,das,dem,das). lexdet(_,plural, die,den,die). % lexdet(male,singular, ein,einem,einen). lexdet(female,singular, eine,einer,eine). lexdet(neutral,singular,ein,einem,ein). lexdet(_,plural, einige,einigen,einige). % % *** "every" "causes plural", but only in semantics :-) lexdet(male,singular, jeder,jedem,jeden). lexdet(female,singular, jede,jeder,jede). lexdet(neutral,singular,jedes,jedem,jedes). pron(Gend,Pers,nom) --> [PR], {lexpr(Gend,Pers,PR,_,_)}. pron(Gend,Pers,dat) --> [PR], {lexpr(Gend,Pers,_,PR,_)}. pron(Gend,Pers,acc) --> [PR], {lexpr(Gend,Pers,_,_,PR)}. % lexpr(_,sg1st, ich,mir,mich). lexpr(_,sg2nd, du,dir,dich). lexpr(male,sg3rd, er,ihm,ihn). lexpr(female,sg3rd, sie,ihr,sie). lexpr(neutral,sg3rd,es,ihm,es). lexpr(_,pl1st, wir,uns,uns). lexpr(_,pl2nd, ihr,euch,euch). lexpr(_,pl3rd, sie,ihnen,sie). n(Gender,singular) --> [N], {lexcn(Gender,N,_)}. n(Gender,plural) --> [N], {lexcn(Gender,_,N)}. n(male,singular) --> [N], {lexscn(N,_,_,_)}. n(female,singular) --> [N], {lexscn(_,N,_,_)}. n(male,plural) --> [N], {lexscn(_,_,N,_)}. n(female,plural) --> [N], {lexscn(_,_,_,N)}. % lexcn(male, stock,stoecke). lexcn(neutral,buch,buecher). lexcn(neutral,programm,programme). lexscn(autor,autorin,autoren,autorinnen). lexscn(professor,professorin,professoren,professorinnen). lexscn(programmierer,programmiererin, programmierer,programmiererinnen). % n(female,singular,_) --> [studentin]. n(female,plural,_) --> [studentinnen]. n(male,singular,acc) --> [studenten]. % sigh, case sensitive n(male,singular,dat) --> [studenten]. % noun... strange n(male,singular,nom) --> [student]. % effect, he? n(male,plural,_) --> [studenten]. pn(female) --> [begriffsschrift]. pn(male) --> [bertrand]. pn(male) --> [bill]. pn(male) --> [gottlob]. pn(male) --> [terry]. pn(neutral) --> [shrdlu]. % lunar? principia? iv(_,Pers) --> vv(_,Pers,intrans). % intransitive verbs tv(_,Pers,acc) --> vv(_,Pers,transit). % transitive verbs tv(_,Pers,Case) --> vv(_,Pers,[Case]). % special case cases dv(_,Pers,dat,acc) --> vv(_,Pers,ditrans). % ditransitive verbs dv(_,Pers,Case1,Case2) --> vv(_,Pers,[Case1,Case2]). % ... % vv(_,singular,Subcat) --> [V],{lexv(Subcat,_,_,V, _,_,_)}. vv(_,sg1st,Subcat) --> [V],{lexv(Subcat,V,_,_, _,_,_)}. vv(_,sg2nd,Subcat) --> [V],{lexv(Subcat,_,V,_, _,_,_)}. vv(_,sg3rd,Subcat) --> [V],{lexv(Subcat,_,_,V, _,_,_)}. vv(_,plural,Subcat) --> [V],{lexv(Subcat,_,_,_, _,_,V)}. vv(_,pl1st,Subcat) --> [V],{lexv(Subcat,_,_,_, V,_,_)}. vv(_,pl2nd,Subcat) --> [V],{lexv(Subcat,_,_,_, _,V,_)}. vv(_,pl3rd,Subcat) --> [V],{lexv(Subcat,_,_,_, _,_,V)}. % % default case: acc lexv(transit,liebe,liebst,liebt, lieben,liebt,lieben). lexv(transit,kenne,kennst,kennt, kennen,kennt,kennen). lexv(transit,betreffe,betriffst,betrifft, betreffen, betrefft, betreffen). lexv(transit,treffe,triffst,trifft, treffen,trefft,treffen). lexv(transit,schreibe,schreibst,schreibt, schreiben,schreibt,schreiben). lexv([dat], schreibe,schreibst,schreibt, schreiben,schreibt,schreiben). % *** schreiben: dat OR acc *** lexv(transit,renne,rennst,rennt, rennen,rennt,rennen). lexv([nom], bin,bist,ist, sind,seid,sind). % *** nom *** lexv(transit,kaufe,kaufst,kauft, kaufen,kauft,kaufen). % lexv(intrans,halte,haeltst,haelt, halten,haltet,halten). % "halt" - not to be confused with "hold NPacc" lexv(intrans,schlafe,schlaefst,schlaeft, schlafen,schlaft,schlafen). % lexv(ditrans,gebe,gibst,gibt, geben,gebt,geben). % dat, acc (English: "NP(acc) to-NP" or "NP(dat) NP(acc)") lexv(ditrans,kaufe,kaufst,kauft, kaufen,kauft,kaufen). % dat, acc (English: "NP for NP" or "NP from NP") % *** I know no examples of other case combos (ad hoc)...