16
Prolog Aula #2 Hugo Pires @ Universidade Lusófona do Porto 1

Aula2

Embed Size (px)

DESCRIPTION

AI

Citation preview

  • Prolog Aula #2

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    1

  • Regras

    Definir a relao Antepassado

    Regra 1: Um antepassado directo pode ser definido pela seguinte regra:

    X antepassado de Y se X progenitor de Y

    Em Prolog: antepassado(X,Y):-progenitor(X,Y).

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    2

  • Regras

    Regra 2: Um antepassado em 2 grau de Y existe se existir algum (Z) que seja progenitor de Y e outro algum (X) que seja progenitor de Z

    , . , . , (, )

    Em Prolog

    antepassado(X,Y):-progenitor(Z,Y),progenitor(X,Z).

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    3

  • Regras

    Regra 3: Um antepassado em 3 grau de Y existe se

    Em Prolog

    antepassado(X,Y):-progenitor(Z,Y),progenitor(W,Z),progenitor(X,W).

    E assim sucessivamente

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    4

  • Regras

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    5

  • Regras

    Com esta abordagem teramos de criar uma regra para cada grau o que limitaria sempre a profundidade da rvore genealgica!

    Podemos reformular a segunda regra nos seguintes termos Para todo X e Y

    X antepassado de Y se

    X progenitor de Z e Z antepassado de Y

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    6

  • Recursividade

    Em Prolog antepassado(X,Y):-

    progenitor(X,Z),antepassado(Z,Y).

    A relao antepassado definida recursivamente.

    O Prolog pode, de facto, ser utilizado para especificar definies recursivas.

    A programao recursiva um dos princpios fundamentais da programao em Prolog.

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    7

  • Recursividade

    Assim sendo o predicado antepassado/2 composto pelas 2 regras

    antepassado(X,Y):-progenitor(X,Y).

    antepassado(X,Y):-

    progenitor(X,Z),antepassado(Z,Y).

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    8

  • Recursividade

    O que significa Para todo X e Y

    X antepassado de Y se

    X progenitor de Y ou X progenitor de Z e Z antepassado de Y

    A disjuno destas condies pode ser tambm representada em prolog pelo simbolo ;

    antepassado(X,Y):- progenitor(X,Y);

    progenitor(X,Z),antepassado(Z,Y).

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    9

  • Estratgia de Prova

    Uma questo ao Prolog sempre uma sequncia de uma ou mais condies.

    Para obter uma resposta o Prolog procura satisfazer todas as condies.

    Satisfazer uma condio significa obter uma deduo lgica que prove que a condio verdadeira.

    Essa deduo efectuada percorrendo todos os factos e regras que compe o predicado que corresponde condio a provar. Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    10

  • Estratgia de Prova

    Suponhamos que o objectivo (goal) provar

    ?- G1, G2, ..., Gn

    O motor de inferncia procura na base de conhecimento (de cima para baixo) uma regra cuja cabea unifique com G1.

    Essa unificao produz uma substituio :

    Se R :- C1, ..., Cm a regra encontrada. tal que R = G1 .

    O objectivo a provar passa agora a ser

    ?- C1 , ..., Cm , G2 , ..., Gn

    Se a regra encontrada um facto F. tal que F = G1.

    O novo objectivo passa a ser provar ?- G2 , ..., Gn

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    11

  • Estratgia de Prova

    A prova termina quando j no h mais nada a provar.

    O Prolog responde questo indicando as substituies necessrias para as todas variveis existentes na questo inicial, para produzir a prova.

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    12

  • rvore de Procura

    A estratgia de prova passa por percorrer a base de conhecimento utilizando as tcnicas top-down e depth-first.

    O mecanismo backtracking serve para o motor de inferncia retornar pelo mesmo caminho percorrido com a finalidade de encontrar solues alternativas.

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    13

  • rvore de Procura

    Consideremos a seguinte base de conhecimento

    #1 progenitor(marta,maria).

    #2 progenitor(maria,jose).

    #3 antepassado(X,Y):-progenitor(X,Y).

    #4 antepassado(X,Y):-progenitor(X,Z),antepassado(Z,Y).

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    14

  • rvore de Procura

    ?-antepassado(marta,Y).

    #3 X=marta

    ?-progenitor(marta,Y).

    #1 Y=maria

    ?-progenitor(marta,maria) OK ;

    #2

    Fail

    #4 X=marta

    ?-progenitor(marta,Z), antepassado(Z,Y).

    #1 Z=maria

    ?-antepassado(maria,Y).

    #3 X=marta

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    15

  • Exerccios

    Desenhe as rvores de procura para as seguintes questes

    ?-antepassado(X,maria).

    ?-antepassado(X,jose).

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    17