Beispiele:
Aufgaben:
Terminology:
Every owner of a hash bar gives every criminal a big kahuna burger.
18 Lesarten:
Einige Lesarten sind äquivalent, andere implizieren einander. Die Lesarten zerfallen in zwei logisch unabhängige Gruppen:
Vorgehen (Montagues Trick):
Trifft man auf eine quantifizierte NP hat man die Wahl
a woman kann also auf zwei Arten gespeichert werden
Um den Store wieder aufzulösen, müssen die gespeicherten quantifizierten NP’s eingesetzt werden: Retrieval
Warum bekommen wir mit dieser Methode alle Lesarten?
Repräsentationen:
% representing binding operators:
bo(QUant,Ind)
% representing stores example
[walk(X),bo(lam(P,all(Y,imp(boxer(Y),app(P,X)))),X)]
Neue semantische Makros: semLexStorage.pl
% noun macro in semLexStorage.pl:
semLex(noun,M):-
M = [symbol:Sym,
sem:[lam(X,Formula)]],
compose(Formula,Sym,[X]).
% noun macro in semLexLambda.pl:
semLex(noun,M):-
M = [symbol:Sym,
sem:lam(X,Formula)],
compose(Formula,Sym,[X]).
Neue semantische Regeln: semRulesCooper.pl
% semantische Regel für VP -> V NP in semRulesCooper.pl
combine(vp:[app(A,B)|S],[tv:[A],np:[B|S]]).
% semantische Regel für VP -> V NP in semRulesLambda.pl
combine(vp:app(A,B),[tv:A,np:B]).
%%%%%%%%%%%%%%%
% semantische Regel für NP -> D N in semRulesCooper.pl
% Warum gibt es zwei Regeln?
combine(np:[lam(P,app(P,X)),bo(app(A,B),X)|S],[det:[A],n:[B|S]]).
combine(np:[app(A,B)|S],[det:[A],n:[B|S]]).
% semantische Regel für NP -> D N in semRulesLambda.pl
combine(np:app(A,B),[det:A,n:B]).
%%%%%%%%%%%%%%%
% semantische Regel für S -> NP VP in semRulesCooper.pl
combine(s:S,[np:[A|S1],vp:[B|S2]]):-
appendLists(S1,S2,S3),
sRetrieval([app(A,B)|S3],Retrieved),
betaConvert(Retrieved,S).
% semantische Regel für S -> NP VP in semRulesLambda.pl
combine(s:app(A,B),[np:A,vp:B]).
cooperStorage.pl
übernimmt die Rolle von lambda.pl
und stellt die Prädikate sRetrieval/2
und filterAlphabeticVariants/2
zur Verfügung.
sRetrieval/2
übernimmt die Auflösung des Stores:
sRetrieval([S],S).
sRetrieval([Sem|Store],S):-
selectFromList(bo(Q,X),Store,NewStore),
sRetrieval([app(Q,lam(X,Sem))|NewStore],S).
filterAlphabeticVariants/2
löscht alphabetische Varianten aus einer Liste von Formeln.
filterAlphabeticVariants(L1,L2):-
selectFromList(X,L1,L3),
memberList(Y,L3),
alphabeticVariants(X,Y), !,
filterAlphabeticVariants(L3,L2).
filterAlphabeticVariants(L,L).
Das zentrale Prädikat ist cooperStorage/2
:
cooperStorage(Sentence,Sems2):-
setof(Sem,t([sem:Sem],Sentence,[]),Sems1),
filterAlphabeticVariants(Sems1,Sems2).
Aufgaben:
cooperStorage.pl
und testen sie ein paar Sätze.cooperStorage/0
die Verwendung von ´filterAlphabeticVariants/2´ aus und schreiben sie statt dessen Sems1=Sems2
. Wie viele Ergebnisse erhalten sie für ‘every boxer loves a person.’? Warum?Wir haben gesehen, dass wir manchmal zuviele Analysen mit dem Cooper Storage erhalten.
?- cooperStorage.
> mia knows every owner of a hash bar.
1 all A ((some B (hashbar(B) & of(A,B)) & owner(A)) > know(mia,A))
2 all A ((of(A,B) & owner(A)) > some C (hashbar(C) & know(mia,A)))
3 some A (hashbar(A) & all B ((of(B,A) & owner(B)) > know(mia,B)))
true.
Das Problem ist, dass wir es mit verschachtelten NP’s zu tun haben: ‘a hash bar’ ist eine sub-NP von ‘every owner of a hash bar’.
Cooper Storage ignoriert verschachtelte NP’s.
Aufgabe: Testen sie ein paar Sätze.
?- kellerStorage.
> A criminal knows every owner of a hash bar.
1 all A ((some B (hashbar(B) & of(A,B)) & owner(A)) > some C (criminal(C) & know(C,A)))
2 some A (criminal(A) & all B ((some C (hashbar(C) & of(B,C)) & owner(B)) > know(A,B)))
3 some A (hashbar(A) & some B (criminal(B) & all C ((of(C,A) & owner(C)) > know(B,C))))
4 some A (criminal(A) & some B (hashbar(B) & all C ((of(C,B) & owner(C)) > know(A,C))))
5 some A (hashbar(A) & all B ((of(B,A) & owner(B)) > some C (criminal(C) & know(C,B))))
true.