xpce en welgefundeerde semantiekpiter/kr/krtranspw6.pdf · piter dykstra 13 december 2009...
TRANSCRIPT
Kennisrepresentatie & Redeneren
Piter Dykstra
Instituut voor Informatica en Cognitie
www.math.rug.nl/~piter
13 december 2009
XPCE en WELGEFUNDEERDE SEMANTIEK
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s
Piter Dykstra 13 december 2009
Onderwerpen
• Hexamy’s met Constraints
• XPCE
• Terugkoppeling werkcollege
(Met dank aan Wouter Lueks)
• Welgefundeermde Semantiek
• Contextvrije grammatica’s
• Van Wijngaarden-grammatica’s
• Isomorfie met Logische programma’s
• Logische grammatica’s
• Definiete Clausule grammatica’s
• Vertaling naar Prolog
• 3 Monaden uit Functioneel Programmeren
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 1
Piter Dykstra 13 december 2009
Hexamy met Constraints
:- module(hexamy,[hexamy/1,col/1,on/2,cnt/1,collineair/3,notcol/3,concurrence/5]).
:- dynamic cnt/1.:- use_module(library(chr)).
:- chr_constraint col/1.:- chr_constraint on/2.
c1 @ on(X,L), on(Y,L) | col([X,Y,Z]) <=> on(Z,L).c2 @ on(X,L), on(Z,L) | col([X,Y,Z]) <=> on(Y,L).c3 @ on(Y,L), on(Z,L) | col([X,Y,Z]) <=> on(X,L).c4 @ col(Points) <=> Points = [X,Y,Z],
on(X,L), on(Y,L), on(Z,L),newline(L).
idempotence @ on(X,Y) | on(X,Y) <=> true.
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 2
Piter Dykstra 13 december 2009
newline(l(1)) :- not(cnt(_)), assert(cnt(1)).newline(l(X)) :- retract(cnt(X0)), X is X0 + 1, assert(cnt(X)).
:- chr_constraint collineair/3.col @ on(A,L), on(B,L), on(C,L) | collineair(A,B,C) <=> true.
:- chr_constraint notcol/3.notcol1 @ on(A,L), on(B,L), on(C,L), notcol(A,B,C) <=> fail.notcol2 @ notcol(_,_,_) <=> true.
:-chr_constraint concurrence/5.conc1 @ on(A,D),on(B,D),
on(C,Dp),on(E,Dp),on(P,D),on(P,Dp) | concurrence(A,B,C,E,P) <=> true.
:-chr_constraint hexamy/1.hex @ hexamy([A,B,C,D,E,F]) <=> concurrence(A,B,D,E,P),
(notcol(A,B,D) ; notcol(A,B,E)).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 3
Piter Dykstra 13 december 2009
Hexamy met Constraints
% chrtest compiled into hexamy 0.13 sec, 1,936 bytestrue.
?- col([a,b,c]),col([d,e,c]),concurrence(a,b,d,e,X),(X=b;X=c;X=a).on(c, l(12))on(e, l(12))on(d, l(12))on(c, l(11))on(b, l(11))on(a, l(11))concurrence(a, b, d, e, b)X = b ;on(c, l(12))on(e, l(12))on(d, l(12))on(c, l(11))on(b, l(11))on(a, l(11))X = c
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 4
Piter Dykstra 13 december 2009
Prolog-XPCE interface
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 5
Piter Dykstra 13 december 2009
XPCE-klassen
←− pce begin class (persoon, object, "Zomaar een klasse") �
variable (naam, char array, both, "de naam dus") �
variable (leeftijd, int, both) �
initialise (S,N : char array, L : [ int ])
default (L, 18, Leeftijd),send (S, send super, initialise),send (S, slot, naam, N),send (S, slot, leeftijd, Leeftijd) �
←− pce end class �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 6
Piter Dykstra 13 december 2009
Dialoog
ask employee←−new (Dialog, dialog (’Define employee’)),send list (Dialog, append,
[new (N1, text item (first name)),new (N2, text item (family name)),new (S,new (S,menu (sex))),new (A, int item (age, low := 18, high := 65)),new (D,menu (department, cycle)),button (cancel,message (Dialog, destroy)),button (enter,∧ (message (@prolog,
assert employee,
N1 ? selection,
N2 ? selection,
S ? selection,
A ? selection,
D ? selection),
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 7
Piter Dykstra 13 december 2009
message (@prolog,nl)))]),
send list (S, append, [male, female ]),send list (D, append, [research, development,marketing ]),send (Dialog, default button, enter),send (Dialog, open) �
assert employee (FirstName, FamilyName, Sex,Age,Dept)←−format (’Adding ~w ~w ~w, age ~w, working at ~w’,
[Sex, FirstName, FamilyName,Age,Dept ]) �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 8
Piter Dykstra 13 december 2009
RationalAgent
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 9
Piter Dykstra 13 december 2009
Sudokugui
:- pce_begin_class(sudokugui, frame, "Een sudokugui").
initialise(M) :->"Create a sudoku window gui"::send(M, send_super,initialise,’Sudoku’),% Create the two primary partsnew(S,sudokupicture),new(B,dialog),% Add some buttons to the dialogsend(B, append, new(N, button(’New’,message(S,new)))),send(B, append, new(C, button(’Check’,message(S,check)))),send(B, append, new(H, button(’Hint’,message(S,hint)))),send(B, append, new(U, button(’Undo’,message(S,undo)))),send(C, below, N),....send(B, right, S),send(M, open).
:- pce_end_class.
start :- new(S,sudokugui).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 10
Piter Dykstra 13 december 2009
Sudokubox
:- pce_begin_class(sudokubox, device, "Een sudokuvierkantje").
variable(value,int:=0,both,"De waarde van het vakje op dit moment").variable(sudoku,sudokupicture,both,"De sudokupicture").variable(col,int,both,"De kolom van het vakje").variable(row,int,both,"De rij van het vakje").
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 11
Piter Dykstra 13 december 2009
Sudokubox
initialise(S,P:sudokupicture,C:int,R:int,Text:[char array],Length:[int]) :->default(Length,25,L),default(Text,’ ’,T),new(Click, click_gesture(left,’’,single, message(@receiver,clicked))),new(ClickDel, click gesture(right,’’,single, message(@receiver,clear))),new(MouseHOn, handler(area_enter, message(@receiver,mouseOn))),new(MouseHOff, handler(area_exit, message(@receiver,mouseOff))),
send(S,recogniser,Click),send(S,recogniser,ClickDel),send(S,recogniser,MouseHOn),send(S,recogniser,MouseHOff),
send(S,recogniser,new(K,key_binding(@nil, argument))),forall(snumber(X),
send(K,function,string(’%d’,X),message(@receiver,value,X))),
send(S, send super, initialise),send(S, slot, sudoku, P),send(S, slot, col, C),send(S, slot, row, R),send(S, display,box(L,L)),send(S, display,text(T,center)),send(S, recenter).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 12
Piter Dykstra 13 december 2009
Sudokubox
recenter(S) :->get(S, member, text, Txt),get(S, member, box, Box),send(Txt, center, Box?center).
remove_prolog_fact(S) :->get(S, col, C),get(S, row, R),( value(cell(C,R), )-> send(@prolog,retract(value(cell(C,R), ))); true).
notify(S,Vnew:int) :->get(S, sudoku, Not),get(S,slot,value,Vold),send(Not,updated(S,Vold,Vnew)).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 13
Piter Dykstra 13 december 2009
Sudokubox
clear(S) :->writeln(’Clear!’),get(S, member, text, Txt),get(S, sudoku, Not),send(S,remove_prolog fact),send(Not,clear_hints),send(S,slot,value,0),send(Txt, string,’ ’).
value(S,V:int) :->get(S, col, C),get(S, row, R),format(’Cel cell(~d,~d): ~d~n’,[C,R,V]),get(S, member, text, Txt),send(S,remove_prolog_fact),send(@prolog,assert(value(cell(C,R),V))),send(S,notify(V)),send(S,slot,value,V),send(Txt, string, V).
value(S,V) :<-get(S,slot,value,V).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 14
Piter Dykstra 13 december 2009
Sudokubox
mouseOn(S) :->get(S, member, box, B),get(B, fill_pattern,Colour),( Colour = colour(blue) % test if selected-> send(B,fill_patter,colour(purple)); send(B,fill_pattern,colour(orange))).
mouseOff(S) :->get(S, member, box, B),get(B, fill_pattern,Colour),( (Colour = colour(purple);Colour=colour(blue)) % test if selected-> send(B,fill_patter,colour(blue)); send(B,fill_pattern,colour(white))).
clicked(S) :->get(S, col, C),get(S, row, R),get(S, member, box, B),send(B,fill_pattern,colour(blue)).
:- pce_end_class.
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 15
Piter Dykstra 13 december 2009
Sudokupicture
:- pce_begin_class(sudokupicture, picture, "Een sudokupicture").variable(boxs,chain:=new(chain),both,"de boxjes in de sudoku").variable(selection,sudokubox,both,"de geselecteerde sudokubox").variable(hints,chain:=new(chain),both,"set van gegeven hints").variable(hintvalue,int,both,"De waarde van de gehinte cel hint").variable(updates,chain:=new(chain),both,"a list of subsequent
actions, the first action is the newest").
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 16
Piter Dykstra 13 december 2009
Sudokupicture
initialise(S,W:[int],H:[int]) :->"Sudokupicture"::send(S, send_super, initialise,’Sudoku!’),send(S, slot, hintvalue, 0),length(L_),L is L_*L_,Bdt is (L+1)*25+11,send(S, send_super, size, size(Bdt,Bdt+20)),default(W,L,Width),default(H,L,Height),get(S,boxs,BS),forall(between(1,Width,C),
( forall(between(1,Height,R),(Vert is R*25,Hth is C*25,send(S,display,new(B,sudokubox(S,C,R)),point(Hth,Vert)),send(BS,append,B)))
)),send(S,display,new(T,text),point(25,Bdt+10)),send(T,colour,colour(red)),send(S,drawThickLines).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 17
Piter Dykstra 13 december 2009
Sudokupicture
drawThickLines(S) :->length(L),LL is L*L,forall(between(0,L,Pf),(
P is (Pf*(L*25)+25),new(Lv,line(P,25,P,(LL+1)*25)),new(Lh,line(25,P,(LL+1)*25,P)),send_list([Lv,Lh],pen,3),send_list(S,display,[Lv,Lh]))).
draw_inconsistent(S) :->....
draw_known_square(S,X,Y) :->....
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 18
Piter Dykstra 13 december 2009
Sudokupicture
hint(S) :->get(S,hintvalue,VHint),( (VHint > 0) ->
send(S,hint_value(VHint));
send(S,clear_hints),( ( send(@prolog,inconsistent),
send(S,draw_inconsistent),writeln(’Inconsistent’),send(S,hint_text(’Hint: de sudoku is inconsistent’))
);( determined1(cell(X,Y),Val,_),
send(S,draw_known_square(X,Y)),send(S,hint_text(’Hint: tel eens rondom deze cel’)),...
);....( determined4(cell(X,Y),Val),
send(S,draw_known_square(X,Y)),send(S,hint_text(’Hint: niet alles is echt mogelijk’)),...
);send(S,hint_text(’Helaas, er zijn geen hints bekend’)).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 19
Piter Dykstra 13 december 2009
Sudokupicture
hint_text(S,T) :->get(S,member,text,Txt),send(Txt,string,T).
hint_value(S,V) :->...
updated(S,C,OldVal,NewVal) :->...
clear_hints(S) :->....
check(S) :->send(@prolog,inconsistent),send(S,draw_inconsistent).
undo(S) :->...
new(S) :->get(S,boxs,BS),send(S,clear_hints),send(BS,for_all,message(@arg1,clear)).
:- pce_end_class.
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 20
Piter Dykstra 13 december 2009
Correctheid (soundness) & Volledigheid
Uitdrukkingskracht van de verschillende syntactische vormen.
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 21
Piter Dykstra 13 december 2009
Uitdrukkingskracht van de verschillende semantische vormen.
SLD ⊆ comp2 ⊆ comp3 ⊆ SLDNF
Definiete progs = = =
Gelaagde progs = =
Algemene progs =>
*: voor ”toegestane” progs.
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 22
Piter Dykstra 13 december 2009
Welgefundeerde Semantiek
Problem 3.
Gegeven de programma’s P1 en P2:
P1 : halts(a) � P2 : halts(a) �
halts(b)← halts(b) �
comp(P1) |= ¬halts(b) maar: comp(P2) 2 ¬halts(b)
Maar volgens de GWA:
gwa(P1) |= ¬halts(b) maar: gwa(P2) |= ¬halts(b)
Problem 4.
loops(a)← ¬halts(a)
gwa(P) is inconsistent omdat noch P |= loops(a) noch P |= halts(a).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 23
Piter Dykstra 13 december 2009
Het Kanonieke Model
Met het kanonieke model voor algemene programma’s wordt het model bedoeld dat
overeenkomt met de GWA.
{A|A ∈ BP en I |= A} ∪ {¬A|A ∈ BP en I |= ¬A}
Theorem 1. Als P een algemeen programma is en I een Herbrand-interpretatie van P
dan is I een model van P desda TP(I) ⊆ I.
Definition 1. [Ondersteunde Interpretatie] Stel P is een algemeen programma. Een
Herbrand-interpretatie I van P heet ondersteund desda
voor elke I |= A er een A← L1, . . . , Ln ∈ grond(P)bestaat waarvoor geldt: I |= L1, . . . , Ln.
Theorem 2. Als P een algemeen programma is en I een Herbrand-interpretatie van P
dan is I ondersteund desda I ⊆ TP(I).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 24
Piter Dykstra 13 december 2009
Problem 5.
loops(a)← loops(a) �
heeft twee ondersteunde modellen: {loops(a)} en ∅.
Conclusie: Het kanonieke model moet minimaal zijn.
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 25
Piter Dykstra 13 december 2009
De ongefundeerde Verzameling
Een atoom A is onwaar als elke grondclausule A ← L1, . . . , Ln een onwaar grondatoom
bevat of een positief ongefundeerd grondatoom bevat.
Definition 2. [Ongefundeerde Verzameling] Stel I is een partiele Herbrand-
interpretatie. Een deelverzameling U van de Herbrand-basis heet een ongefundeerde
verzameling P m.b.t. I als voor elke A ∈ U en voor elke A ← L1, . . . , Ln ∈ ground(P)tenminste een van de volgende beweringen geldt:
• Een L ∈ L1, . . . , Ln is onwaar in I.
• Een positief grondatoom A ∈ L ∈ L1, . . . , Ln is in U.
U is de grootste ongefundeerde verzameling van P m.b.t. I, notatie FP(I).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 26
Piter Dykstra 13 december 2009
Welgefundeerde model
Definition 3. [Welgefundeerde Model] Van een algemeen programma P is het welge-
fundeerde model de kleinste partiele Herbrand interpretatie I zodat:
• Als A ∈ TP(I) dan A ∈ I.
• Als A ∈ FP(I) dan ¬A ∈ I.
Het welgefundeerde model van P is het kleinste dekpunt van de operator:
WP(I) = TP(I) ∪ ¬FP(I)
waarin ¬FP(I) = {¬A|A ∈ FP(I)}.
Het kleinste dekpunt WP is de limiet van het (mogelijk transfiniete) iteratieve proces:
∅, WP(∅), WP(WP(∅)), . . .
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 27
Piter Dykstra 13 december 2009
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 28
Piter Dykstra 13 december 2009
Zettenspel voor 2 personen
• De speler verlies als hij geen zet kan doen of alleen naar een positie kan gaan waar de
andere speler wint.
• De speler wint als hij naar een positie kan gaan waar de andere speler verliest.
w (X)←− m (X,Y) ∧ ¬ w (Y) �
m (a, b) �
m (b, a) �
m (b, c) �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 29
Piter Dykstra 13 december 2009
Het model kan worden berekend als de limiet van WP ↑ n afgekort: In.
I1 = TP(∅) ∪ ¬FP(∅) waarin :
TP(∅) = {m(a, b),m(b, a),m(b, c)}FP(∅) = {m(a, a),m(a, c),m(b, b),m(c, a),m(c, b),
m(c, c),w(c)}
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 30
Piter Dykstra 13 december 2009
w(c) zit in de ongefundeerde verzameling omdat alle grondinstanties van de clausule
w(c) ← m(c,Y) ∧ ¬w(Y) een positieve grondterm bevatten die in de ongefundeerde
verzameling zit:
I1 = TP(∅) ∪ ¬FP(∅) waarin :
TP(∅) = {m(a, b),m(b, a),m(b, c)}FP(∅) = {m(a, a),m(a, c),m(b, b),m(c, a),m(c, b),
m(c, c),w(c)}
w(b) is waar omdat I1 |= m(b, c) ∧ ¬w(c):
I2 = TP(I1) ∪ ¬FP(I1) waarin :
TP(I1) = {m(a, b),m(b, a),m(b, c),w(b)}FP(I1) = {m(a, a),m(a, c),m(b, b),m(c, a),m(c, b),
m(c, c),w(c)}
w(a) is ongefundeerd want alle grondinstanties van w(a) ← m(a,Y) ∧ ¬w(Y)bevatten ofwel een ongefundeerde positieve grondterm ofwel een onware negatieve
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 31
Piter Dykstra 13 december 2009
grondterm (¬w(b)):
I3 = TP(I2) ∪ ¬FP(I2) waarin :
TP(I2) = {m(a, b),m(b, a),m(b, c),w(b)}FP(I2) = {m(a, a),m(a, c),m(b, b),m(c, a),m(c, b),
m(c, c),w(c),w(a)}
Nu geldt WP(I3) = I3, dus I3 is het kleinste dekpunt.
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 32
Piter Dykstra 13 december 2009
Eigenschappen
Een minimale partiele interpretatie maximaliseert de ongedefinieerdheid.
Een minimale tweewaardige interpretatie maximaliseert onwaarheid.
Theorem 3. Als P een definiet programma is, dan is het welgefundeerde model volledig
en valt samen met het kleinste Herbrand-model.
Theorem 4. Als P gelaagd is, dan is het welgefundeerde model volledig en valt samen
met het standaard-model.
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 33
Piter Dykstra 13 december 2009
Contextvrije grammatica’s
Definition 4. [Contextvrije grammatica’s] Een contextvrije grammatica is een tripel
< N,Σ, P >, waarin:
• N een eindige verzameling nonterminal symbolen.
• Σ een eindige verzameling terminal symbolen (N ∩ Σ = ∅).
• P is een eindige verzameling paren X → α met X ∈ N en α ∈ (N ∪ Σ)∗ (productiere-
gels).
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 34
Piter Dykstra 13 december 2009
Definition 5. [Directe Afleidbaarheid] .
Stel G = < N,Σ, P > is een CVG. Een string β over N ∪ Σ is direct afleidbaar uit α in
G desda:
• α is van de vorm α1 X α2.
• β is van de vorm α1 γ α2.
• X → γ is een productieregel van G.
We noteren β is direct afleidbaar uit α met α⇒G β
Definition 6. [De taal van G en X] Als G = < N,Σ, P > een CVG is en X een
nonterminal symbool van G, dan bedoelen we met de taal gedefinieerd door X en G de
verzameling:
L(G,X) = {α|X ⇒+G α}
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 35
Piter Dykstra 13 december 2009
Example 1. De verzameling strings die gehele getallen voorstellen wordt beschreven door
een CVG:
• N = {< geh. getal >,< teken >,< nat. getal >,< cij f er >,< str. v. cij f ers >,<
niet nul >}
• Σ = {+,−, 0, 1, 2, . . . , 9}
• P =
p1 : < geh. getal > → < teken >< nat. getal > .
p2 : < teken > → ε.
p3 : < teken > → +.
p4 : < teken > → −.p5 : < nat. getal > → < cij f er > .
p6 : < nat. getal > → < niet nul >< str. v. cij f ers > .
p7 : < str. v. cij f ers > → < cij f er > .
p8 : < str. v. cij f ers > → < str. v. cij f ers >< cij f er > .
p9 : < cij f er > → < niet nul > .
p10 : < cij f er > → 0.
p11 : < niet nul > . . .
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 36
Piter Dykstra 13 december 2009
Example 2.
De verzameling even Peanogetallen wordt beschreven door een CVG:
• N = {< even >}
• Σ = {0, s}
• P =p1 : < even > → 0.
p2 : < even > → s s < even > .
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 37
Piter Dykstra 13 december 2009
Parseer-bomen
< geh. getal > Expressieboom v.: ”−30”ւ ց
< teken > < nat. getal >
↓ ւ ց−
< niet nul > < str. v. cij f ers >
↓ ↓3 < cij f er >
↓0
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 38
Piter Dykstra 13 december 2009
Definition 7. [Parseer-boom] Een parseerboom van een CVG G is een gelabelde geor-
dende boom waarvoor geldt:
• De wortel is gelabeld met een productie van G.
• Elke knoop gelabeld met een productie p met het profiel < X1, . . . ,Xn > heeft n
kinderen en elk kind Xi is gelabeld met een productie van de soort XI of het lege label
⊥.
p1ւ ցp4 p6
ւ ցp13 p9
↓p10
Parseerboom voor de string ”−30”ofwel de term:
. p1(p4, p6(p13, p9(p10)))
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 39
Piter Dykstra 13 december 2009
Vergelijking
Grammatica’s en Logische programma’s zijn verschillende vormen van hetzelfde idee:
CVG Logisch Programma
productie clausule
directe afleidbaar onmiddelijk gevolg
afleidbaar logisch gevolg
de taal van G en X oplossing v. doel X met prog. G.
parseerboom bewijsboom
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 40
Piter Dykstra 13 december 2009
Van Wijngaarden-grammatica’s
Definition 8. [Van Wijngaarden-grammatica] .
Een W-grammatica W is een 7-tupel < X,M, T,Q,V,H,R > waarin:
• X een eindig alfabet.
• M een eindige verzameling nonterminals.
• T een eindige verzameling terminals.
• Q een verzameling productieregels, een deelverzameling van M× (M ∪ X)>.
• V een aftelbare verzameling variabelen. Met elke variabele v is een nonterminal (”type”)
geassocieerd: M(v), de soort van v.
• H een eindige verzameling hypernoties, nonterminals met variabelen, een deelverzame-
ling van:
{< h > |h ∈ (V ∪M)+}
• R een eindige verzameling hyperregels, een deelverzameling van: H × (H ∪ T)>
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 41
Piter Dykstra 13 december 2009
Voorbeeld
Er is een W-grammatica (en geen CVG) voor de taal {anbncn|n ∈ N}
< s > →< a to N >< b to N >< c to N >
< a to Ni > → a < a to N >
< b to Ni > → b < b to N >
< c to Ni > → c < c to N >
< a to i > → a
< b to i > → b
< c to i > → c
Theorem 5. Voor elk definiet programma P is er een W-gramamtica WP en er is een
isomorfie tussen de bewijsbomen van P en de parseerbomen van WP.
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 42
Piter Dykstra 13 december 2009
Logische Grammatica
zin (Z)←− append (X,Y, Z),naamw deel (X),werkw deel (Y) �
naamw deel ([het | X ])←− naamwoord (X) �
werkw deel ([ loopt ]) �
naamwoord ([motortje ]) �
naamwoord ([konijn ]) �
?- zin([het,X,loopt]).
X = motortje ;
X = konijn ;
No
�
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 43
Piter Dykstra 13 december 2009
Verschillijsten
emptydif (X− X) �
adddif (E, X− Y, [E | X ]− Y) �
removedif (E,D1,D2)←− adddif (E,D2,D1) �
concat (A1− Z1, Z1− Z2,A1− Z2) �
Verschillijsten
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 44
Piter Dykstra 13 december 2009
Quicksort met verschillijst
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 45
Piter Dykstra 13 december 2009
quicksort2 ([ ], Z− Z) �
quicksort2 ([X | Tail ], A1− Z2)←−split (X, Tail, Small, Big),quicksort2 (Small, A1− [X | A2 ]),quicksort2 (Big, A2− Z2) �
gt (X,Y)←− X> Y �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 46
Piter Dykstra 13 december 2009
LG met verschillijsten
zin (X 0− X 2)←− naamw deel (X 0− X 1),werkw deel (X 1− X 2) �
naamw deel (X 0− X 2)←− verbindt (X 0, het, X 1),naamwoord (X 1− X 2) �
werkw deel (X 0− X 1) ←− verbindt (X 0, loopt, X 1) �
naamwoord (X 0− X 1) ←− verbindt (X 0,motortje, X 1) �
naamwoord (X 0− X 1) ←− verbindt (X 0, konijn, X 1) �
verbindt ([X | Y ], X, Y) �
?- zin([het, konijn, loopt, stop] - [stop]).
Yes ?-
�
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 47
Piter Dykstra 13 december 2009
LG met verschillijsten zonder hulprelatie
zin (X 0, X 2)←− naamw deel (X 0, X 1),werkw deel (X 1, X 2) �
naamw deel ([het | X 0 ], X 1)←− naamwoord (X 0, X 1) �
werkw deel ([ loopt | X 0 ], X 0) �
naamwoord ([motortje | X 0 ], X 0) �
naamwoord ([konijn | X 0 ], X 0) �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 48
Piter Dykstra 13 december 2009
Definiete Clausule Grammatica’s
zin −→ naamw deel,werkw deel �
naamw deel −→ [het ],naamwoord �
werkw deel −→ [ loopt ] �
naamwoord −→ [motortje ] �
naamwoord −→ [konijn ] �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 49
Piter Dykstra 13 december 2009
?- zin([het, konijn, loopt, stop], [stop]).
Yes
?- listing. .
zin(A, C) :-
naamw deel(A, B),
werkw deel(B, C).
.
naamw deel([het | A], B) :-
naamwoord(A, B).
.
werkw deel([loopt | A], A).
.
naamwoord([motortje | A], A).
naamwoord([konijn | A], A).
.
Yes
�
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 50
Piter Dykstra 13 december 2009
DCG’s met Semantiek
←− op (900, xfy,∈ ) � X ∈ L←− member (X, L) �
zin (rel (R,O)) −→ naamw deel (O),werkw deel (R) �
naamw deel (X) −→ [het ],naamwoord (X) �
werkw deel (lopen) −→ [ loopt ] �
naamwoord (X) −→ [X ], {X ∈ [motortje, konijn ]} �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 51
Piter Dykstra 13 december 2009
?- zin( X, [het, konijn, loopt, stop], [stop]). .
X = rel(lopen, konijn) ; .
No
?- listing.
zin(rel(C, A), B, E) :-
naamw deel(A, B, D),
werkw deel(C, D, E).
naamw deel(A, [het | B], C) :-
naamwoord(A, B, C).
.
werkw deel(lopen, [loopt | A], A).
naamwoord(A, [A | C], B) :-
A in[motortje, konijn],
B=C.
Yes
�
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 52
Piter Dykstra 13 december 2009
ABC-formule
abc −→ a (N), b (N), c (N) �
a (0) −→ [ ] �
a (s (N)) −→ [a ], a (N) �
b (0) −→ [ ] �
b (s (N)) −→ [b ], b (N) �
c (0) −→ [ ] �
c (s (N)) −→ [c ], c (N) �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 53
Piter Dykstra 13 december 2009
?- abc(X, []).
X = [] ;
X = [a, b, c] ;
X = [a, a, b, b, c, c] ;
X = [a, a, a, b, b, b, c, c, c] ;
X = [a, a, a, a, b, b, b, b, c|...]
Yes
�
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 54
Piter Dykstra 13 december 2009
Toestands-Monade
Een stack:
push (X, In, [X | In ]) �
pop ([ | Out ], Out) �
top (X,Y, Y)←− Y = [X | ] �
empty ( , [ ]) �
som ([A,B | Z ], [C | Z ])←− C is A+ B �
do −→ empty,
push (2),push (3),som �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 55
Piter Dykstra 13 december 2009
?- do( , X).
X = [5] ;
No ?- listing(do). .
.
do(A, E) :-
empty(A, B),
push(2, B, C),
push(3, C, D),
som(D, E).
.
Yes ?-
�
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 56
Piter Dykstra 13 december 2009
Collectie-monade
←− op (1000, xfy,←) �
←− op (600, xfy,∈ ) �
X ∈ L←− member (X, L) �
incr (In,Out)←− Out is In+ 1 �
pair (X,Y, , pr (X,Y)) �
’<-’ (Xt, (L, R), In, Lout′)←− is list (L),findall (Xout,
(X ∈ L,
Xt = X,
phrase (R, In, Xout)),Lout),
flatten (Lout, Lout′) �
return (X, , X) �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 57
Piter Dykstra 13 december 2009
?- phrase((X ← [1,2], incr),0,B). .
B = [2, 3] ; .
No
?- phrase((
| X ← [1,2],
| Y ← [a,b],
| pair(X,Y)
| ),0,B).
.
B = [pr(1, a), pr(1, b), pr(2, a), pr(2, b)] ;
�
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 58
Piter Dykstra 13 december 2009
Maybe-monade
’<-’ (X, (just (X), R), In,Out)←−phrase (R, In,Out) �
’<-’ ( , (nothing, ), Io, Io) �
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 59
Piter Dykstra 13 december 2009
?- phrase((
| { X = just(3),
| Y = just(8) },| Xv ← X,
| Yv ← Y,
| Z is Xv + Yv,
| return(Z)
| ), 0, A).
.
X = just(3),
Y = just(8),
Xv = 3,
Yv = 8,
Z = 11,
A = 11 ;
No
?-
�
– Kennisrepresentatie & Redeneren – Week6: Grammatica’s 60