3 Provadores de Teoremas

Documentos relacionados
INTELIGÊNCIA COMPUTACIONAL

Provadores de Teoremas e suas Aplicações. Prof. Marcus Ramos 13 de Julho de 2018 UNIVASF

Inteligência Artificial. Aula 2

SSC Engenharia de Software. Prof. Paulo C. Masiero

Fabrício Jailson Barth BandTec

IME, UFF 7 de novembro de 2013

ENGENHARIA DE SOFTWARE

Fundamentos de Lógica Matemática

SIMULAÇÃO. Professor: Adriano Benigno Moreira

Informática I. Aula Aula 13-08/10/2007 1

Sistemas Especialistas

Apresentação. Informação geral + Conceitos iniciais

DEINF - UFMA Especialização em Análise e Projeto de Sistema

Linguagens de Programação

O que é um sistema distribuído?

MAC Trabalho de Formatura Supervisionado Proposta de Trabalho de Conclusão de Curso

Cálculo proposicional

Princípios da Engenharia de Software aula 03

UMA PROVA DE CONSISTÊNCIA

Sistemas Especialistas (SE)

SISTEMAS ESPECIALISTAS

Linguagens de Programação I. Introdução a Algoritmos e Lógica de Programação

Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/01)

6.1. Teste Baseado em Gramática e Outras Abordagens de Teste

Inteligência Artificial. Aula 1 Prof. Nayat Sánchez Pi

Inteligência Artificial. Conceitos Gerais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA ENGENHARIA DE SOFTWARE

Lógica Computacional

Aprendendo a construir algoritmos através da mediação digital

Dedução Natural e Sistema Axiomático Pa(Capítulo 6)

Análise e Técnicas de Algoritmos

Inteligência Artificial Escola de Verão Laboratório Associado de Computação e Matemática Aplicada LAC

Uma forma de classificação

LIMITES COMPUTACIONAIS E O FUTURO. Prof. André Vignatti DINF - UFPR

Sistemas de Informação e Decisão. Douglas Farias Cordeiro

Verificação e Validação (V & V)

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Mecanismos de Interrupção e de Exceção, Barramento, Redes e Sistemas Distribuídos. Sistemas Operacionais, Sistemas

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens

5 Conclusão e trabalhos futuros

Capítulo 9. Conclusão 184

Modelos Conceituais de Dados

Qualidade e Certificação em Software. Prof. Cesar 1

Matemática Discreta - 04

Aula 01 Conceito de Banco de Dados e SGBD

REUSO E REUSABILIDADE

Informática I. Aula 14. Aula 14-10/10/2007 1

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

4) Defina o que vem a ser um algoritmo, e porque, o mesmo depende do processo.

Introdução à Programação de Computadores Fabricação Mecânica

Sistema Computacional

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

Especificação Formal de Software

MODELAGEM DE SISTEMAS. Introdução a Computação e Engenharia de Software. Profa. Cynthia Pinheiro

Especificações Formais

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

Engenharia de Software Aula 2.1 Introdução à Engenharia de Requisitos. Prof. Bruno Moreno

O que é a Teoria em Ciência da Computação. Introdução à Ciência da Computação Mário S. Alvim

CRÉDITOS DO CURSO. Carga Horária Créditos IN1030 Seminários 30 2

05/09/2013. Ciclo de vida de um Sistema de Informação

Inteligência Articial: Introdução

Resolução de Problemas com Computador. Resolução de Problemas com Computador. Resolução de Problemas com Computador

Introdução à Computação

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 02

Introdução a Programação

Introdução ao Curso. Área de Teoria DCC/UFMG 2019/01. Introdução à Lógica Computacional Introdução ao Curso Área de Teoria DCC/UFMG /01 1 / 22

Introdução. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

Introdução Maquinas de Turing universais O problema da parada. Indecidibilidade. Rodrigo Gabriel Ferreira Soares DEINFO - UFRPE.

Ferramentas de Suporte

LÓGICA DE PROGRAMAÇÃO. Algoritmos Computacionais. Sérgio Carlos Portari Júnior

Afirmações Matemáticas

Lógica para Computação Introdução. José Gustavo de Souza Paiva

Paradigma Simbólico. Sistemas de Informação UNISUL Aran Bey Tcholakian Morales, Dr. Eng. (Apostila 2)

Padrões. Arquitetura de Software Thaís Batista

Um Middleware de Inteligência Artificial para Jogos Digitais 105

Conceitos Básicos de Algoritmos

Apresentação do Capítulo 4 MDA (Model-Driven Archtecture) ALUNO: DOMENICO SCHETTINI FILHO NÚMERO USP:

FUNDAMENTOS DA ANÁLISE E PROJETO DE SISTEMAS. Projeto de Programas PPR0001

Texto 1. Lógica Texto 1. 1 O que é Lógica 2. 2 Sistemas lógicos 2. 3 Principais problemas 3. 4 Principais sistemas 7

2 PCC. 2.1 O que é PCC?

PROJETO DE PROGRAMAS. Projeto de Programas PPR0001

Capítulo 1. Aspectos Preliminares

Semântica Operacional

As 10 Áreas da Engenharia de Software, Conforme o SWEBOK Prof. Elias Ferreira

Fundamentos de Lógica e Algoritmos. Aula 1.2 Introdução a Lógica Booleana. Prof. Dr. Bruno Moreno

Visões Arquiteturais. Visões Arquiteturais

Método para Construção de Algoritmos

S12 - Software e Engenharia de Software

S11 - Software e Engenharia de Software

Linguagens Formais e Autômatos P. Blauth Menezes

Engenharia de Software Aula 2.1 Introdução à Engenharia de Requisitos. Prof. Bruno Moreno

Matemática Discreta. Gabriel David Gil Coutinho José Costa Pereira Renato Soeiro MESTRADO INTEGRADO EM ENGENHARIA INFORMÁTICA E COMPUTAÇÃO

Sistemas Especialistas Noções Gerais

Tópicos da Aula. Conceitos de programação orientada a objetos. Projeto orientado a objetos com UML

Requisitos de Software

1. Métodos de prova: Construção; Contradição.

Transcrição:

3 Provadores de Teoremas 3.1 Fundamentos Provadores de teorema são programas de computador utilizados para provar teoremas. Dependendo da lógica escolhida, o problema de decidir a validade de uma conjectura pode variar do trivial até o impossível. Para o caso frequente da lógica proposicional,o problema é decidível, mas NPcompleto, e apenas algoritmos de tempo exponencial são conhecidos para resolvê-lo. Para a lógica de primeira ordem, tal problema é recursivamente enumerável, isto é, dados recursos ilimitados, qualquer conjectura válida pode ser provada, mas conjecturas inválidas não podem ser sempre reconhecidas. Por este motivo, observa-se que a aplicabilidade de provadores totalmente automáticos fica restringida. Em contrapartida, aumenta-se a necessidade da intervenção humana na condução das provas, nos chamados provadores interativos de teoremas ou assistentes de provas. Isto é, o especialista do domínio do problema interage com o software na construção de provas. Embora possa variar de ferramenta para ferramenta, provadores de teoremas compartilham um conjunto mínimo de componentes fundamentais. Inicialmente, a afirmação que se quer provar precisa ser informada ao provador. Para isso o provador precisa implementar alguma linguagem lógica (proposicional, primeira ordem, etc.). Normalmente, provadores fornecem uma linguagem própria, baseada na linguagem lógica que suportam, com a qual o usuário do sistema pode especificar conjecturas que se deseja provar, teorias e hipóteses. Provadores de teoremas implementam sistemas dedutivos e, portanto, se baseiam nas regras de inferência e axiomas estabelecidos nesses sistemas dedutivos para conduzirem suas provas. Outro componente importante é o método de desenvolvimento de prova utilizado. Provadores podem adotar um método bottom-up (dos axiomas para o teorema), onde a busca pela prova é i n i c i a d a a p a r t i r d o z e r o, i s t o é, o p r o v a d o r t e n t a a p l i c a r os axiomas e regras disponíveis, em sequências de tentativa e erro, até q u e o t e o r e m a desejado seja encontrado. Dizemos, neste caso, que a busca pela prova segue um

Capítulo 3. Provadores de Teoremas 33 estilo forward, caracterizandoosentidoemqueasinferênciassãoaplicadas. Oproblemadestemétodoéqueoprovadorpodedemorarparaalcançar o resultado procurado, permanecendo preso a longos ciclos de tentativa e erro. Dependendo do caminho escolhido o provador pode, sequer, encontrar uma prova, mesmo que ela exista. Outro problema é que a primeira inferência a ser aplicada, raramente é conhecida de antemão. No método top-down (do teorema final para os axiomas básicos), por sua vez, a busca pela prova começapela definição de uma fórmula representando a afirmação que se desejaprovar. Oprovadoravaliaafórmulaeinferequaispremissassujeitas a qual regra poderiam levar a obtenção da fórmula em questão como conclusão. O processo prossegue, de maneira recursiva sobre as fórmulas das premissas encontradas, atéque sobrem apenas axiomas, obtendo, neste caso, a prova da fórmula inicial. Ou seja, nesse estilo de busca por prova, as inferências são aplicadasnosentido contrário, do teorema para os axiomas, caracterizando o estilo conhecido como backward. Um provador também deve definir uma estratégia de prova. Estratégias são procedimentos definidos pelos usuários que servem paraguiaroprovador durante a busca pela prova. Uma estratégia pode, por exemplo, definir regras de inferência de alto nível, compostas por conjuntos de regras fundamentais do sistema dedutivo do provador. Pode também, estabelecer uma ordem para aplicação destas regras. Estratégias podem ser definidas de forma que oprovadorsempreasuseoupodemfuncionarcomoheurísticas, utilizadas em determinadas ocasiões. Estratégias não aumentam a expressividade de um provador, mas podem melhorar sua performance no processo de busca por uma prova. 3 As características apresentadas acima podem ser encontradas, de alguma forma, na grande maioria dos provadores existentes atualmente. A lista de provadores é extensa e, como exemplo, podemos citar Otter(Ott), E (E), SPASS (Spa), Vampire (Vam) e Waldmeister (Wal), todos baseados na linguagem de primeira ordem. Para lógicas de mais alta ordem (higher order logic), temos ACL2 (Acl), Coq (Coq), HOL (Hol), Nqthm (Nqt), Isabelle (Isa), PVS (Pvs) e Simplify (Sim). Ointeresseporprovadoresdeteoremastemsuaorigemnosanos60,com as primeiras implementações de programas de computador para resolver o problema SAT (Pap94). O método de Resolução (Rob65), um sistema dedutivo altamente mecanizável e, portanto, fácil de implementar computacionalmente, criou bastante entusiasmo na comunidade e incentivou as pesquisas sobre o assunto nos anos 60 e 70. Nesta época, prova de teoremas por computador era um tema de pesquisa integrante da área de Inteligência Artificial. Nos anos 70 oentusiasmodiminuiu,comaconstataçãoporpartedospesquisadores da difi-

Capítulo 3. Provadores de Teoremas 34 culdade de se provar teoremas interessantes automaticamente. A aplicabilidade dessas ferramentas nas áreas de verificação de hardware e software reativou o interesse por provadores de teoremas nos últimos anos. Inicialmente voltados para solucionar problemas estritamente matemáticos, hoje, provadores são utilizados em variados campos de conhecimento, como, por exemplo, Engenharia, Ciência da Computação e Ciência Social. Mackenzie apresenta uma descrição detalhada dessa evolução em (Mac95). 3.2 Provadores Orientados a Objetivos Muitos dos provadores de teoremas citados acima, como, por exemplo, HOL e Isabelle, seguem uma forma de implementação baseado no provador LCF (Logic for Computable Functions), criado no início dos anos 70 por Robin Milner e outros (Gor00). Por este motivo são chamados de provadores do tipo LCF. Em provadores LCF, teoremas são representados por um tipo abstrato de dados em uma linguagem de programação funcional fortemente tipada. O sistema de tipo da linguagem garante que teoremas são derivados usando somente regras de inferência fornecidas pelas operações do tipo abstrato. Portanto, regras são funções escritas na linguagem funcional do provador. No caso do provador LCF original e de HOL, a linguagem usada é ML (Pau91). Ousuáriopodeescreverregrasdeinferênciacomplexasapartir de regras mais primitivas existentes, escrevendo novas funções. A abordagem LCF garante que as funções construídas só executem inferências lógicas corretas. Linguagens funcionais foram inspiradas em cálculo lambda,cujacorrespondênciacomprova formal de teoremas é estabelecida pelo chamado Isomorfismo de Curry-Howard (GLT89). Abuscaporprovasnoestiloforward é a m a n e i r a p a d r ã o, d o p o n t o de vista técnico, de se obter provas em provadores LCF. Apesar disso, esta pode não ser a maneira mais adequada para se tentar encontrar umaprova, conforme os problemas que discutimos na seção anterior. Por isso, provas no estilo backward são mais naturais, do ponto de vista do usuário que conduz a prova, isto é, seguir do fim para o início, a partir da conjectura que se quer provar, até obter a prova final desejada, aplicando as inferências e axiomas apropriados. Em provadores LCF este tipo de busca por prova é obtido tomando a conjectura que se quer provar como um objetivo inicial (goal) e, aplicando funções na linguagem funcional do provador, que quebram esse objetivo em novos objetivos (subgoals). Tais funções são chamadas de táticas. Além de quebrar objetivos em subobjetivos, táticas registram a sequência

Capítulo 3. Provadores de Teoremas 35 de inferências empregada, que pode, posteriormente, ser usada para provar oobjetivoinicial,naformanativadeprocessamentodessetipo de provador, usando a busca forward. A técnica de quebrar objetivos em subobjetivos não está restrita a provadores do tipo LCF e constitui uma forma de processamento comumpara provadores de teoremas no estilo backward, conhecidacomobuscaporprova orientada a objetivos (ou, usando o termo em inglês, goal-directed proof search). 3.3 Problemas no Uso de Provadores de Teoremas Um dos maiores problemas no uso de provadores de teoremas para resolver problemas de domínios não matemáticos está em como estes problemas são especificados para uso pelo provador. Para teorias matemáticas, como, por exemplo, a teoria dos números, esta tarefa é mais fácil, uma vez que tais teorias já se encontram axiomatizadas. Para os problemas não matemáticos serem entendidos corretamente pelo provador, o usuário precisa descrevê-los em termos dos axiomas do domínio do problema e fornecer ao provador todas as informações necessárias para que ele possa encontrar resultados apropriados. Certas conclusões que fazemos automaticamente quando pensamos sobre o problema não são intuitivas para a máquina. Se o problema não for especificado por completo, o provador não conseguirá realizar seu objetivo. Estamos falando de uma atividade, essencialmente, de modelagem. Modelagem é abstração, é um processo cognitivo do usuário usando o provador. Éumprocessoiterativo, que envolve sucessivas sessões de experimentação, com erros, acertos e muito aprendizado. Uma vez que o problema foi corretamente e completamente especificado, provadores se tornam ferramentas de grande utilidade. Contudo, chegar até este ponto, pode ser um processo demorado e custoso. A linguagem de especificação,isto é,aquela oferecida pelo provador para que o usuário formule o problema que deseja avaliar precisa ser dominada pelo usuário do sistema. O problema, após modelado, deve ser traduzido para esta linguagem, entendida pelo provador. Não basta conhecer como representar o problema em linguagens matemáticas como a lógica proposicional ou de primeira ordem, mas como estas linguagens estão codificadas no provador. Muitas vezes, a sintaxe usada se parece mais com a de linguagens de programação do que com a de linguagens matemáticas propriamente ditas. Outro pontoimportante sobre a linguagem doprovador, está nos recursos disponíveis na mesma para que o usuário possa especificar estratégias. Como discutimos na seção anterior, o usuário escreve estratégias para guiar o provador durante a busca por uma prova. Énecessárioentendercomooscomandos

Capítulo 3. Provadores de Teoremas 36 disponíveis na linguagem interferem no processamento do provador para que se possa criar estratégias apropriadas. Ao final do processo, quando o provador exibe a prova para o problema especificado, o usuário precisa ainda interpretar o resultado fornecido. Épreciso entender como o resultado é apresentado pelo provador e traduzir de volta as informações obtidas para o domínio do problema sendo analisado. A análise do resultado do provador nos leva a outra questão: é possível confiar numa prova apresentado pelo provador? Um provador é um programa, paraque seja confiável devemos ter certeza que seu sistema dedutivo está corretamente implementado em seu código. Éprecisogarantirqueevoluçõesnocódigodo provador não danifiquem sua capacidade de encontrar provas. Geuversresume algumas medidas que podem ser tomadas para aumentar a confiança n o s provadores em (Geu09). Uma destas soluções propõe que a prova encontrada pelo provador seja algum tipo de objeto independente que possa ser submetido aumverificadordeprova. Dadaumarepresentaçãodeumaprova, verificar se trata-se realmente de uma prova é uma tarefa mais fácil do que encontrar aprova.provadorespodemautomaticamente submeterprovasencontradas à avaliação de verificadores de prova, aumentandoaconfiançadosusuáriosnos resultados apresentados. Afigura 3.1mostra umesquema gráfico representando esse modelo. Figura 3.1: Provadores apoiados por Verificadores de Prova Amaiorpartedessesproblemasestãorelacionadoscomamaneira como o usuário interage com o provador, seja especificando o problema, instruindo caminhos de raciocínio ao provador ou interpretando os resultados apresentados. Muitos desses problemas poderiam ser removidos ou, pelo menos minimizados com uso de soluções apropriadas para facilitar a comunicação entre essas duas partes. Aspectos de interação humano-computador e princípios de design de interface com o usuário se tornam, portanto, elementos importantes na construção deste tipo de sistema. O próximo capítulo discute este assunto em detalhes.