180 likes | 335 Views
Inferência. A Linguagem Prolog FATOS. Os fatos permitem definir os predicados: - Exemplo: um sistema ecológico para especificar a cadeia alimentar come (urso, peixe) come (urso, raposa) % predicado binário come (cavalo, mato) animal (urso)
E N D
A Linguagem Prolog FATOS • Os fatos permitem definir os predicados: - Exemplo: um sistema ecológico para especificar a cadeia alimentar come (urso, peixe) come (urso, raposa) % predicado binário come (cavalo, mato) animal (urso) animal (peixe) % predicado unário animal (raposa)
A Linguagem Prolog CONSULTAS • De posse do programa Prolog (base de dados , podemos fazer consultas . Exemplos: ? come (cavalo, mato) Resposta: yes ? come (urso, coelho) Resposta: no ? come (urso, X) Resposta: peixe coelho
A Linguagem Prolog REGRAS • Uma regra é a descrição de um predicado através de uma implicação Exemplo: “um animal é presa se é comido por outro animal”. come(Y,X) ^ animal(X) -> presa(X) em Prolog: presa(X) :- come(Y,X), animal(X)
A Linguagem Prolog REGRAS e CONSULTAS • Acrescentando a nova regra à BD podemos fazer novo tipo de consulta come (urso, peixe) come (urso, raposa) % predicado binário come (cavalo, mato) animal (urso) animal (peixe) % predicado unário animal (raposa) presa(X) :- come(Y,X), animal(X) % regra ?-presa(x) resposta: peixe e raposa
A Linguagem PrologREGRA DE INFERÊNCIA: RESOLUÇÃO • As regras e os fatos de um programa prolog correspondem à fórmulas de 1a ordem transformada em Cláusulas de Horn. • Prolog trata as regras como sendo quantificadas universalmente • A regra de inferência usada pelo interpretador prolog é a regra da resolução. Como foi obtida a resposta do exemplo anterior?
A Linguagem PrologREGRA DE INFERÊNCIA: RESOLUÇÃO • Observe que a regra (Cláusula de Horn) presa(X) :- come(Y,X), animal(X) Corresponde a wff xy(come(Y,X) ^ animal(X)) -> presa(X) Corresponde a cláusula ~(come(X,Y) ^ animal(X)) v presa(x) ~come(X,Y) v ~animal(X) v presa(x)
A Linguagem PrologREGRA DE INFERÊNCIA: RESOLUÇÃO • Regra da resolução : Duas cláusulas de Horn são resolvidas em uma nova cláusula se uma delas contiver um predicado negado que corresponda a um predicado não-negado na outra cláusula. A nova cláusula elimina o termo de correspondência e fica disponível para uso em resposta a pergunta. As variáveis são substituídas por constantes associadas de maneira consistente
A Linguagem PrologREGRA DE INFERÊNCIA: RESOLUÇÃO • ? presa(X) • O Prolog procura, na BD, por uma regra com o predicado presa(X) como o conseqüente • Busca outras cláusulas que possam ser resolvidas com a regra • Faz as substituições das variáveis na cláusula regra 1. ~come(X,Y) v ~animal(X) v presa(X) 2. come(urso,peixe) 3. ~animal(peixe) v presa(peixe) {resolvente de 1 e 2} 4. animal (peixe) 5. presa (peixe) {resolvente de 3 e 4} • Refaz o processo procurando na BD outra cláusula a resolver com a cláusula da regra. Encontrará come(urso,peixe)
A Linguagem PrologREGRA DE INFERÊNCIA: RESOLUÇÃO • Outro exemplo: acrescentando à BD a regra: “x é caçado se é presa” caçado(X) :- presa(X) Como é feita a consulta que segue? ? caçado(X) • a regra na forma simbólica é: presa(X) -> caçado(X) • a cláusula correspondente é: ~(presa(X) v caçado(X) • essa cláusula é resolvida com a da regra de definição de presa e seguindo a resolução obtém as respostas: peixe raposa
A Linguagem PrologEXEMPLO DE PROGRAMA E CONSULTAS come (urso, peixe) come (peixe,peixinho) come (peixinho,alga) come (quati,peixe) come(urso,quati) come (urso, raposa) come(raposa,coelho) come (coelho, mato) come(urso,cavalo) come(cavalo,mato) come(gato-selvagem,cavalo) animal(urso) animal(peixe) animal(peixinho) animal(quati) animal(raposa) animal(coelho) animal(cavalo) animal(gato-selvagem) planta(mato) planta(alga) presa(X) :- come(Y,X), animal(X)
A Linguagem PrologEXEMPLO DE PROGRAMA E CONSULTAS • Consultas e respostas: ? animal(coelho) yes ? come(gato-selvagem,mato) no ? come(X,peixe) urso quati ? come(X,Y),planta(Y) peixinho alga coelho mato cavalo mato
A Linguagem PrologEXEMPLO DE PROGRAMA E CONSULTAS • Consultas e respostas (continuação): ? presa(X) peixe peixinho peixe quati raposa coelho cavalo cavalo
A Linguagem PrologRECURSÃO • As regras em Prolog são implicações lógicas • Podem depender de fatos: presa(X) :- come(X,Y),animal(X) • Podem depender de outras regras: caçado(X) :- presa(X) • Podem depender da própria regra: com definição recursiva
A Linguagem PrologRECURSÃO • Exemplo: usar a BD ecológica para definir a relação na-cadeia-alimentar(X,Y) com o significado: ”Y está na cadeia alimentar de X” que por sua vez pode significar duas coisas: • X come Y diretamente • X come algum animal que come algum animal que come algum animal ... que come Y
A Linguagem PrologRECURSÃO (exemplo) • O caso 2. pode ser reescrito como: 2’. “X come Z e Y está na cadeia alimentar de Z” • O caso 1. é o ponto de parada da regra recursiva • A regra incorpora os casos 1 e 2’: na_cadeia_alimentar(X,Y) :- come(X,Y) na_cadeia_alimentar(X,Y) :- come(X,Z), na_cadeia_alimentar(Z,Y)
A Linguagem PrologRECURSÃO (exemplo) ? na_cadeia_alimentar(urso,Y) resposta: • peixe • quati • raposa • cavalo • peixinho • alga • peixe • peixinho • alga • coelho • mato • mato
A Linguagem PrologRECURSÃO (exemplo) urso peixe urso quati urso raposa urso cavalo urso peixe peixe peixinho peixinho alga