130 likes | 254 Views
Otter Provador de Teoremas. André Luiz Gionatta. O Otter. Desenvolvido por William McCune Funciona com variados tipos de resolução (binária, hiperresolução, resolução UR, paramodulação...)
E N D
OtterProvador de Teoremas André Luiz Gionatta
O Otter • Desenvolvido por William McCune • Funciona com variados tipos de resolução (binária, hiperresolução, resolução UR, paramodulação...) • Aplica as regras de inferência de cada tipo de resolução em um conjunto de cláusulas ou fórmulas para encontrar uma prova. • Cada vez que é aplicado uma regra de inferência, novas cláusulas são geradas.
Usando o Otter • Otter não possui uma interface gráfica, sendo utilizado pelo console do Windows. • Lê um arquivo de entrada (com extensão .in) em que estão contidas as fórmulas ou cláusulas que serão utilizadas durante a busca da prova. • Gera um arquivo de saída (com extensão .out) com as estatísticas da busca, bem como os detalhes da prova (se houver). • Sintaxe para execução da busca: otter < problema.in > problema.out
O arquivo de entrada (.in) • É no arquivo de entrada que se deve configurar as opções que serão utilizadas pelo Otter. • O arquivo também deverá conter as cláusulas e fórmulas que serão utilizadas durante a busca da prova. • É imprescindível definir qual tipo de resolução o Otter usará para determinado problema. • set(binary_res). – utiliza a resolução binária • set(hyper_res). – utiliza a hiperresolução • set(auto). – o Otter utilizará todos os modos de resolução possíveis para provar o problema.
O arquivo de entrada (.in) • O comando list(usable). é usado para que o provador leia uma lista de cláusulas, as quais serão usadas para serem feitas inferências. • O comando formula_list(usable). tem a mesma função do comando acima mas é usado para fórmulas. set(auto). list(usable). -> humano(socrates). humano(X) -> mortal(X). mortal(socrates) ->. end_of_list. set(auto). formula_list(usable). all x y (Mae(x,y) <-> Feminino(x) & Parente(x,y)). all x y (Pai(x,y) <-> Masculino(x) & Parente(x, y)). end_of_list. Exemplo de uma lista usable para cláusulas. Exemplo de uma lista usable para fórmulas.
Operadores lógicos • O Otter trabalha com os seguintes operadores lógicos: Fonte: Adaptado de McCune, W. Otter Reference Manual by William McCune. Disponível em: <http://www.cs.unm.edu/~mccune/otter/Otter33.pdf>. Acesso em: 20 abril 2009.
Funções e predicados • É possível utilizar algumas funções em problemas no Otter (programmed mode). • Os símbolos possuem $ ($-symbols). • Exemplos de algumas funções: • Para tipos int: $SUM (soma), $DIFF (subtração), $PROD (multiplicação)... • Para tipos float: os mesmos para tipos int porém com a letra F após o símbolo $ ($FSUM, $FDIFF, ...). • Para tipos boolean: $T (true) e $F (false). • Outros: $EQ (=), $GT (>), $GE (>=), etc.
Funções e predicados • Exemplo: fatorial(x) = $IF ($EQ(x, 0)), 1, $PROD(x, fatorial($DIFF(x,1))). Fonte: Adaptado de McCune, W. Otter Reference Manual by William McCune. Disponível em: <http://www.cs.unm.edu/~mccune/otter/Otter33.pdf>. Acesso em: 20 abril 2009.
O arquivo de saída (.out) • O arquivo contém as estatísticas da busca e a prova, caso o provador tenha encontrado uma. • Caso exista uma prova o Otter lista as cláusulas/fórmulas que foram usadas para encontrá-la e os detalhes de qual resolução o provador utilizou e em quais cláusulas/fórmulas a resolução foi aplicada. • As sentenças (cláusulas ou fórmulas) são identificadas por um número inteiro (ID). • Se o Otter encontrar provas mostra a seguinte mensagem: Search stopped by max_proofs option. • Se não encontrar provas mostra a mensagem: Search stopped because sos empty.
Exemplo de prova • Descrição do problema que será utilizado no Otter: Bob é irmão de Alice, Diane é mãe de Bob e Carlos é pai de Alice. Provar, utilizando o Otter, que Carlos é pai de Bob.
Exemplo de prova – Arquivo de entrada (.in) set(auto). formula_list(usable). % Regras de parentesco % all x y (Mae(x,y) <-> Feminino(x) & Parente(x,y)). all x y (Pai(x,y) <-> Masculino(x) & Parente(x, y)). all x y (Parente(x,y) & Masculino(y) <-> Filho(y,x)). all x y (Parente(x,y) & Feminino(y) <-> Filha(y,x)). all x y z (IrmaoOuIrma(x,y) & Parente(z,x) -> Parente(z,y)). all x y (IrmaoOuIrma(x,y) <-> IrmaoOuIrma(y,x)). all x y (IrmaoOuIrma(x,y) & Masculino(x) <-> Irmao(x,y)). all x y (IrmaoOuIrma(x,y) & Feminino(x) <-> Irma(x,y)). % Fatos para o problema % Irmao(Bob, Alice). Mae(Diane, Bob). Pai(Carlos, Alice). end_of_list. formula_list(sos). % Provar que Pai(Carlos, Bob), adicionando sua negacao no SOS % -Pai(Carlos, Bob). end_of_list. Fonte: Adaptado de Introduction to Artificial Intelligence –Assignment 5. Disponível em: <http://www.cs.rpi.edu/academics/courses/fall03/ai/handouts/assign5.pdf>. Acesso em: 25 abril 2009.
Exemplo de prova – Arquivo de saída (.out) ---------------- PROOF ---------------- 4 [] -Pai(x,y)|Masculino(x). 5 [] -Pai(x,y)|Parente(x,y). 6 [] Pai(x,y)| -Masculino(x)| -Parente(x,y). 13 [] -IrmaoOuIrma(x,y)| -Parente(z,x)|Parente(z,y). 14 [] -IrmaoOuIrma(x,y)|IrmaoOuIrma(y,x). 16 [] IrmaoOuIrma(x,y)| -Irmao(x,y). 21 [] -Pai(Carlos,Bob). 22 [] Irmao(Bob,Alice). 24 [] Pai(Carlos,Alice). 26 [hyper,22,16] IrmaoOuIrma(Bob,Alice). 29 [hyper,24,5] Parente(Carlos,Alice). 30 [hyper,24,4] Masculino(Carlos). 31 [hyper,26,14] IrmaoOuIrma(Alice,Bob). 34 [hyper,31,13,29] Parente(Carlos,Bob). 37 [hyper,34,6,30] Pai(Carlos,Bob). 38 [binary,37.1,21.1] $F. • Sentenças 4-24: entrada • Sentenças 26-38: criadas a partir da aplicação das regras de inferência (resolução binária e hiperresolução). • Sentença 38: contradição (prova). Fonte: Adaptado de Introduction to Artificial Intelligence –Assignment 5. Disponível em: <http://www.cs.rpi.edu/academics/courses/fall03/ai/handouts/assign5.pdf>. Acesso em: 25 abril 2009.
Referências McCune, W. Otter Reference Manual by William McCune.Disponível em: <http://www.cs.unm.edu/~mccune/otter/Otter33.pdf>. Acesso em: 20 abril 2009. Introduction to Artificial Intelligence –Assignment 5. Disponível em: <http://www.cs.rpi.edu/academics/courses/fall03/ai/handouts/assign5.pdf>. Acesso em 25 abril 2009.