XPCE en WELGEFUNDEERDE SEMANTIEKpiter/KR/krtranspw6.pdf · Piter Dykstra 13 december 2009...

Post on 15-Oct-2018

214 views 0 download

Transcript of XPCE en WELGEFUNDEERDE SEMANTIEKpiter/KR/krtranspw6.pdf · Piter Dykstra 13 december 2009...

Kennisrepresentatie & Redeneren

Piter Dykstra

Instituut voor Informatica en Cognitie

www.math.rug.nl/~piter

p.dykstra@rug.nl

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