p(X) <- q(X,Y),r(Y)Dire qual'e' il minimo modello di Herbrand, ed esibire almeno un altro modello di Herbrand diverso da quello minimo.
q(a,b)
q(b,c)
r(a)
r(b) <- r(b)
r(c).
r(b) <- r(Y)Dire qual'e' il minimo modello di Herbrand, ed esibire almeno un altro modello di Herbrand diverso da quello minimo. Dire inoltre se, nel nuovo programma P, vale che
P |= forall X. r(X)Giustificare formalmente la risposta.
p(f(X)) <- p(X)Dire qual'e' il minimo modello di Herbrand, ed esibire, se esiste, un altro modello di Herbrand diverso da quello minimo. Dire inoltre se, detto P il programma, valgono che
p(a)
P |= forall X. p(X)Dove M(P) e' il minimo modello di Herbrand. Giustificare formalmente la risposta.
M(P) |= forall X. p(X)
p(X) <- p(f(X))Dire qual'e' il minimo modello di Herbrand, ed esibire, se esiste, un altro modello di Herbrand diverso da quello minimo. Dire inoltre se, detto P il programma, vale che
p(a)
M(P) |= forall X. p(X)Giustificare formalmente la risposta.
p(f(X),X) <- p(X,X)Dire qual'e' il minimo modello di Herbrand, ed esibire, se esiste, un altro modello di Herbrand diverso da quello minimo.
p(a,a)
p(f(X),g(Y)) <- p(X,Y)Dire qual'e' il minimo modello di Herbrand, ed esibire, se esiste, un altro modello di Herbrand diverso da quello minimo. Dire inoltre se, detto P il programma, valgono che
p(a,b)
P |= forall X,Y. p(X,Y)Giustificare formalmente la risposta.
M(P) |= forall X,Y. p(X,Y)
Programma 1: |
p(f(X)) <- q(X,Y), p(Y) p(a) q(b,Y) |
---|---|
Programma 2: |
p(f(X)) <- q(X) p(a) q(g(X)) <- p(X) q(b) |
Programma 3: |
p(X) <- q(a) q(X) <- p(X) q(b) |
p(X) <- q(X,Y),r(Y)Costruire l'albero SLD per <- p(X) con regola di selezione leftmost. Dire quali risposte ottiene l'interprete Prolog.
q(a,b)
q(b,c)
r(a)
r(b) <- r(b)
r(c).
r(b) <- r(Y)Costruire l'albero SLD per <- p(X) con regola di selezione leftmost. Dire quali risposte ottiene l'interprete Prolog.
p(f(X)) <- p(X)Costruire l'albero SLD per <- p(X) con regola di selezione leftmost. Dire quali risposte ottiene l'interprete Prolog. Dire se esiste almeno un altro albero e, in caso affermativo, costruirlo.
q(a)
p(a)Costruire l'albero SLD per <- p(X) con regola di selezione leftmost. Dire quali risposte ottiene l'interprete Prolog. Dire se esiste almeno un altro albero e, in caso affermativo, costruirlo. Dire se valgono
p(f(X)) <- p(Y)
p(X) <- p(f(X))
P |= forall X p(X)Giustificare formalmente la risposta. Dire inoltre se vale
M(P) |= forall X p(X)
P |= p(X) {X/f(a)}Giustificare formalmente la risposta. Puo' {X/f(a)} essere una cas per il goal <- p(X)? Se non lo e', quale e' la cas piu' generale di {X/f(a)} che si ottiene? (sappiamo che esiste per il teorema di completezza generalizzato).
p(a,a)Costruire l'albero SLD con regola di selezione leftmost per per <- p(X,X) e per <- p(f(X),X). Dire quali risposte ottiene l'interprete Prolog.
p(f(X),f(X)) <- p(X,X)
Programma 1: |
p(a,b) p(f(X),g(Y)) <- p(X,Y) |
Goals: | <- p(X,X) e <- p(X,Y). |
---|---|---|---|
Programma 2: |
p(f(X)) <- q(X,Y), p(Y) p(a) q(b,Y) |
Goal: | <- p(X). |
Programma 3: |
p(a) p(f(X)) <- q(X) q(b) q(g(X)) <- p(X) |
Goal: | <- p(X). |
Programma 4: |
p(X) <- q(a) q(X) <- p(X) q(b) |
Goal: | <- p(X). |
Programma 5: |
p(X) <- p(X),p(X) p(a) q(b) |
Goal: | <- p(X). |
Programma 6: |
p(a) q(b) p(X) <- p(X),p(X) |
Goal: | <- p(X). |
p(X)<- q(X)Esibire una sostituzione sigma per cui valga
q(a)
q(f(X))
P |= p(X) sigmama tale che sigma non sia una cas per il goal <- p(X). Esibire una cas piu' generale sigma'.
p(a).
p(X) :- q(X), !.
p(b).
q(c).
q(d).
Dire cosa risponde l'interprete Prolog con la chiamata
?- p(Y).
p(X) :- not(q(X)).
q(a).
Dire cosa risponde l'interprete Prolog con le chiamate
?- not(p(Y)).
,
?- not(p(a)).
e
?- not(p(b)).
.
p(a).
p(X) :- !, q(X).
p(b).
q(c).
q(d).
Dire cosa risponde l'interprete Prolog con la chiamata
?- p(Y).
p(X) :- not(q(X)).
q(a) :- q(a).
q(b).
Dire cosa risponde l'interprete Prolog con le chiamate
?- not(p(Y)).
,
?- not(p(a)).
e
?- not(p(b)).
.
p(X,Y) :- q(X,Y),!, r(Y).
q(a,b).
q(a,Y).
r(c).
Dire cosa risponde l'interprete Prolog con la chiamata
?- p(X,Y).
p(X) :- not(q(X)).
q(a).
q(b) :- p(X).
Dire cosa risponde l'interprete Prolog con le chiamate
?- not(p(Y)).
,
?- not(p(a)).
e
?- not(p(b)).
.
DELAY append(L1,L2,L3) UNTIL nonvar(L1) OR nonvar(L2)
e la definizione di append
usuale,
dire cosa risponde l'interprete Prolog alla chiamata
?- append([a|L],L',L), L=[b,d].
.
Dire cosa sarebbe successo se non si avesse avuto tale dichiarazione.
p(X,Y) :- X > Y+1, r(Y).
p(X,Y) :- X > Y, r(Y).
r(Y) :- Y > 2.
Dire quali sono le risposte (semplificate) per le chiamate
?- p(X,Y).
e
?- p(X,0).
.
tell(X=a) || ( (ask(true) -> tell(X=b)) + (ask(X=a) -> tell(Y=b))
DELAY sum(X,Y,Z) UNTIL nonvar(X) AND nonvar(Y)
e la definizione di sum
(somma
di naturali) usuale,
dire cosa risponde l'interprete Prolog alla chiamata
?- sum(0,Y,succ(0)).
.
Dire cosa sarebbe successo se non si avesse avuto tale dichiarazione.
p(X,Y) :- X > Y, r(X,Z), r(Z,Y).
r(X,Y) :- X < Y.
r(X,Y) :- X = Y.
Dire quali sono le risposte (semplificate) per la chiamata
?- p(X,Y).
.
(ask(X=f(b)) -> tell(Z=c) || tell(X=f(Y)) || ask(X=f(Y)) -> tell(Y=b)
DELAY sum(X,Y,Z) UNTIL nonvar(X) OR nonvar(Z)
e la definizione di sum
(somma
di naturali) usuale,
dire cosa risponde l'interprete Prolog alla chiamata
?- sum(X,Y,Z), Z=succ(0).
.
Dire cosa sarebbe successo se non si avesse avuto tale dichiarazione.
p(X,Y,Z) :- X > Y+Z, q(Y), r(Z).
q(X) :- X > 1.
q(X) :- X = 1.
r(X) :- X > 2.
r(X) :- X = 2.
Dire quali sono le risposte (semplificate) per la chiamata
?- p(X,Y).
.
( (ask(Y=b) -> tell(Z=c) + ask(X=a) -> tell(W=d) ) || tell(X=a) || ( (ask(X=a) -> tell(Y=b) + ask(W=d) -> tell(Y=c) )