/********************************************************************** name: resolvePresupScore.pl version: Feb 6, 1999 description: Presupposition Projection with Score Calculation authors: Patrick Blackburn & Johan Bos **********************************************************************/ :- module(resolvePresupScore,[projectDrs/2,accommodate/2]). :- ensure_loaded(comsemOperators). :- use_module(comsemPredicates,[simpleTerms/1, compose/3, appendLists/3, selectFromList/3]). :- use_module(bindingDRT,[properBinding/3]). :- use_module(matchDRT,[matchDrs/4]). /*===================================================================== Presupposition Projection for DRSs =====================================================================*/ projectDrs([merge(B1,B2)|A1]-[drs(D3,C3)|A3],S1-S3):- projectDrs([B1|A1]-A2,S1-S2), projectDrs([B2|A2]-[drs(D1,C1),drs(D2,C2)|A3],S2-S3), appendLists(D1,D2,D3), appendLists(C1,C2,C3). projectDrs([alfa(X,Type,B1,B3)|A1]-A4,S1-S4):- projectDrs([B1|A1]-[B2|A2],S1-S2), resolveAlfa(X,Type,B2,A2-A3,S2-S3), properBinding(Type,X,B3), projectDrs([B3|A3]-A4,S3-S4). projectDrs([drs(D1,C1)|A1]-A2,S1-S2):- projectConds(C1,[drs(D1,[])|A1]-A2,S1-S2). /*===================================================================== Presupposition Projection for DRS-Conditions =====================================================================*/ projectConds([~B1|Conds],A1-A3,S1-S3):- projectDrs([B1,pre([])|A1]-[B2,pre(Pres),drs(D,C)|A2],S1-S2), accommodate(Pres,B2-B3), projectConds(Conds,[drs(D,[~B3|C])|A2]-A3,S2-S3). projectConds([B1 > B2|Conds],A1-A4,S1-S4):- projectDrs([B1,pre([])|A1]-A2,S1-S2), projectDrs([B2,pre([])|A2]-[B4,pre(P2),B3,pre(P1),drs(D,C)|A3],S2-S3), accommodate(P1,B3-B5), accommodate(P2,B4-B6), projectConds(Conds,[drs(D,[B5 > B6|C])|A3]-A4,S3-S4). projectConds([B1 v B2|Conds],A1-A4,S1-S4):- projectDrs([B1,pre([])|A1]-[B3,pre(P1)|A2],S1-S2), projectDrs([B2,pre([])|A2]-[B4,pre(P2),drs(D,C)|A3],S2-S3), accommodate(P1,B3-B5), accommodate(P2,B4-B6), projectConds(Conds,[drs(D,[B5 v B6|C])|A3]-A4,S3-S4). projectConds([question(X,B1,B2)|Conds],A1-A4,S1-S4):- projectDrs([B1,pre([])|A1]-A2,S1-S2), projectDrs([B2,pre([])|A2]-[B4,pre(P2),B3,pre(P1),drs(D,C)|A3],S2-S3), accommodate(P1,B3-B5), accommodate(P2,B4-B6), projectConds(Conds,[drs(D,[question(X,B5,B6)|C])|A3]-A4,S3-S4). projectConds([Basic|Conds],[drs(D,C)|A1]-A2,S1-S2):- compose(Basic,_Symbol,Arguments), simpleTerms(Arguments), projectConds(Conds,[drs(D,[Basic|C])|A1]-A2,S1-S2). projectConds([],A-A,S-S). /*======================================================================== Resolving Alfa-DRSs ========================================================================*/ resolveAlfa(X,Type,AlfaDrs,[drs(D,C)|Others]-[New|Others],S1-S2):- global(Others), matchDrs(X,AlfaDrs,drs(D,C),New), (Type=refl, S2 = S1; Type=nonrefl, S2 = S1; Type=def, S2 = S1; Type=name, S2 = S1). resolveAlfa(X,Type,AlfaDrs,[drs(D,C)|Others]-[New|Others],S1-S2):- nonglobal(Others), matchDrs(X,AlfaDrs,drs(D,C),New), (Type=refl, S2 is S1 * 1; Type=nonrefl, S2 is S1 * 1; Type=def, S2 is S1 * 0.5; Type=name, S2 is S1 * 0.2). resolveAlfa(_,Type,Alfa,[pre(A)]-[pre([Alfa|A])],S1-S2):- global([pre(A)]), (Type=nonrefl, S2 is S1 * 0.5; Type=def, S2 is S1 * 0.9; Type=name, S2 is S1 * 0.9). resolveAlfa(_,Type,Alfa,[pre(A)|Others]-[pre([Alfa|A])|Others],S1-S2):- nonglobal([pre(A)|Others]), ( %Type=nonrefl, S2 is S1 * 0.1; Type=def, S2 is S1 * 0.7; Type=name, S2 is S1 * 0.2). resolveAlfa(X,Type,Alfa,[pre(A1)|Others]-[pre([New|A2])|Others],S1-S2):- global([pre(A1)|Others]), selectFromList(Drs,A1,A2), matchDrs(X,Alfa,Drs,New), (Type=refl, S2 = S1; Type=nonrefl, S2 = S1; Type=def, S2 = S1; Type=name, S2 = S1). resolveAlfa(X,Type,Alfa,[pre(A1)|Others]-[pre([New|A2])|Others],S1-S2):- nonglobal([pre(A1)|Others]), selectFromList(Drs,A1,A2), matchDrs(X,Alfa,Drs,New), (Type=refl, S2 is S1 * 1; Type=nonrefl, S2 is S1 * 1; Type=def, S2 is S1 * 0.5; Type=name, S2 is S1 * 0.2). resolveAlfa(X,Type,AlfaDrs,[AnteDrs|Others]-[AnteDrs|NewOthers],S1-S2):- resolveAlfa(X,Type,AlfaDrs,Others-NewOthers,S1-S2). /*======================================================================== Global or non-global position with respect to stack ========================================================================*/ global([pre(_)]). global([drs(_,_)|Stack]):- global(Stack). nonglobal([pre(_),drs(_,_)|_]). nonglobal([drs(_,_)|Stack]):- nonglobal(Stack). /*===================================================================== Accommodation =====================================================================*/ accommodate([],B-B). accommodate([drs(D1,C1)|Presups],drs(D2,C2)-B):- appendLists(D1,D2,D3), appendLists(C1,C2,C3), accommodate(Presups,drs(D3,C3)-B).