Estratégias da Teoria de Reescrita em PVS: considerações sobre especificação e

Documentos relacionados
Verificação Formal em PVS do Sistema KB2D de Resolução de Conflitos de Tráfego Aéreo

DIM Resolução e método tableaux DIM / 37

Fundamentos 1. Lógica de Predicados

Lógica Computacional

Lógica Computacional 1 Turma A Primeira Prova (Gabarito)

1 TEORIA DOS CONJUNTOS

Lógica e prova de resolução Marco Henrique Terra

MATEMÁTICA DISCRETA CONCEITOS PRELIMINARES

Programação em Lógica. UCPEL/CPOLI/BCC Lógica para Ciência da Computação Luiz A M Palazzo Maio de 2010

Sistema dedutivo. Sistema dedutivo

Teoria dos Conjuntos MATEMÁTICA DISCRETA CONCEITOS PRELIMINARES. Fundamentos de Lógica Técnicas Elementares de Prova A NOÇÃO DE CONJUNTO

Linguagens de Programação

Lógica. Fernando Fontes. Universidade do Minho. Fernando Fontes (Universidade do Minho) Lógica 1 / 65

Lógica Computacional

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Nelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 2. Nelma Moreira (DCC-FC) Fundamentos de Linguagens de Programação Aula 2 2 / 12

Andamento da apresentação

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

Teoria da Computação Exemplo de relatório para o trabalho n o 2

Semântica Operacional

Uma proposição é uma frase que pode ser apenas verdadeira ou falsa. Exemplos:

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

Eunice Palmeira da Silva Orientador: Fred Freitas

Lógica Proposicional

Programas em L1 pertencem ao conjunto de árvores de sintaxe abstrata definido pela gramática abstrata abaixo:

4 AULA. Regras de Inferência e Regras de Equivalência LIVRO. META: Introduzir algumas regras de inferência e algumas regras de equivalência.

Síntese de programas utilizando a linguagem Alloy

MDI0001 Matemática Discreta Aula 01

Lógica Proposicional. LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08. c Inês Lynce c Luísa Coheur

Referências e materiais complementares desse tópico

Verificação formal de sistemas digitais embarcados. Marcelo Henrique Stoppa 3 Vaston Gonçalves da Costa 2

Uma Formalização da Teoria de Reescrita em Linguagem de Ordem Superior

Lógica de Predicados. Quantificadores

Linguagens de Programação Funcional

PCC104 - Projeto e Análise de Algoritmos

Como podemos provar que este programa termina com x = 100. Correr o programa seguindo a sua semântica operacional é uma opção.

Pedro Vasconcelos DCC/FCUP. Programação Funcional 19 a Aula Raciocinar sobre programas

Sistemas Digitais Álgebra de Boole Binária e Especificação de Funções

Nelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 12

LÓGICOS E ALGÉBRICOS DA PROGRAMAÇÃO Licenciaturas em Engenharia Informática, Ensino de Informática e Matemática 2º Semestre 2005/2006

Implementação de Linguagens

Aula 6: Dedução Natural

Todos os pássaros têm pena. Nem todos os passáros voam. Todo inteiro primo maior que dois é ímpar

DEPARTAMENTO DE MATEMÁTICA E INFORMÁTICA DISCIPLINA:

Linguagens Lógicas. Aluno: Victor Rocha

Além desses, pode-se citar problemas em sistemas bancários, vírus que invadem os sistemas por suas falhas, etc.

Fundamentos 1. Lógica de Predicados

Lógica para Computação Primeiro Semestre, Aula 10: Resolução. Prof. Ricardo Dutra da Silva

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

Espaços quase topológicos: o caso em que cada conjunto fechado é também aberto. Introdução. Hércules de A. Feitosa, Mauri C.

Planificação do 1º Período

SCC Introdução à Teoria da Computação

Formas Normais para Lógicas Modais

Planificação do 1º Período

Lógica para computação - Linguagem da Lógica de Predicados

Programação Funcional Apontamentos (Versão 1.16)

Inteligência Artificial IA IV. RACIOCÍNIO BASEADO EM REGRAS

Bases Matemáticas. Aula 1 Elementos de Lógica e Linguagem Matemática. Prof. Rodrigo Hausen. 24 de junho de 2014

INF Semântica formal N

NHI Lógica Básica (Lógica Clássica de Primeira Ordem)

Aula 1 Aula 2. Ana Carolina Boero. Página:

Analisando Terminação: Size Change Principle X Dependency Pairs

Capítulo 3 Lógica de Primeira Ordem

Inteligência Artificial IA IV. RACIOCÍNIO BASEADO EM REGRAS

3 Cálculo Proposicional

Lógica Computacional

ÁLGEBRA DE BOOLE B.1 - DIAGRAMA DE VENN

Semana 3 MCTB J Donadelli. 1 Técnicas de provas. Demonstração indireta de implicação. indireta de. Demonstração por vacuidade e trivial

Programação de Computadores:

Seminário Semanal de Álgebra. Técnicas de Demonstração

n. 25 DIAGRAMAS DE VENN

Programação Funcional - Introdução a Cálculo Lambda

Lógica Proposicional Dedução Natural

CRÉDITOS: 0 OBRIGATÓRIA: SIM CURSO:

5 Implementação do Corretor de Programas

Dedução Natural LÓGICA APLICADA A COMPUTAÇÃO. Professor: Rosalvo Ferreira de Oliveira Neto

IME, UFF 7 de novembro de 2013

Lógica dos Quantificadores: sintaxe

22. Análise Combinatória - Permutação - Repetição - Circular - Condicional Análise Combinatória - Combinação e Arranjo

Aula 1 Aula 2 Aula 3. Ana Carolina Boero. Página:

Administração de Redes de Computadores

Cálculo de Predicados

UMA PROVA DE CONSISTÊNCIA

Conteúdo. Correção de Exercício Quantificadores Rosen (pg 33) Tradução Português Lógica Rosen (pg 42)

Especificações Formais

Lógica Computacional

Lógica Computacional

Compiladores - Especificando Sintaxe

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

A LINGUAGEM DO DISCURSO MATEMÁTICO E SUA LÓGICA

Fundamentos 1. Lógica de Predicados

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

Lógica Computacional (CC2003)

Lógica Proposicional Sintaxe

Fundamentos da Computação 1. Aula 03

SCC-202 Algoritmos e Estruturas de Dados I. Profa. Graça Nunes 2º. Semestre 2010

Fundamentos da Computação 1. Carmen Cecilia Centeno

Lógica Computacional

Transcrição:

4 o Seminário Informal (mas Formal!) 2006 Estratégias da Teoria de Reescrita em PVS: considerações sobre especificação e aplicações Departamento de Matemática Grupo de Teoria da Computação Campus de Catalão & Departamento de Matemática Universidade Federal de Goiás Universidade de Brasília Professor Assistente Estudante de Doutorado Orientador: Mauricio Ayala-Rincón Parcialmente Financiado pelo CNPq 08 de dezembro de 2006

Plano de Apresentação A Linguagem de Especificação PVS Uma Especificação de Sistemas Abstratos de Reescrita Porque Estratégias em PVS são Importantes Conclusão e Trabalho Futuro

A Linguagem de Especificação PVS O PVS (Prototype Verification System) é uma linguagem de especificação baseada sobre lógica de ordem superior e rica em sistema de tipos. A especificação em PVS é organizada como uma coleção de Teorias. Uma Teoria é essencialmente feita de: Declarações de Tipos: Introduz novos nomes de tipos e/ou tipos; T:TYPE, par : TYPE = {x : T EXISTS(y : T) : x = 2 y} Declarações de Constantes e variáveis: Introduz novas constantes e/ou variáveis; a,b:t, z:var par Declarações de Fórmulas: Introduz Axiomas (AXIOM) e/ou Teoremas (CLAIM, LEMMA ou THEOREM)

A Linguagem de Especificação PVS O PVS (Prototype Verification System) é uma linguagem de especificação baseada sobre lógica de ordem superior e rica em sistema de tipos. A especificação em PVS é organizada como uma coleção de Teorias. Uma Teoria é essencialmente feita de: Declarações de Tipos: Introduz novos nomes de tipos e/ou tipos; T:TYPE, par : TYPE = {x : T EXISTS(y : T) : x = 2 y} Declarações de Constantes e variáveis: Introduz novas constantes e/ou variáveis; a,b:t, z:var par Declarações de Fórmulas: Introduz Axiomas (AXIOM) e/ou Teoremas (CLAIM, LEMMA ou THEOREM)

A Linguagem de Especificação PVS O PVS (Prototype Verification System) é uma linguagem de especificação baseada sobre lógica de ordem superior e rica em sistema de tipos. A especificação em PVS é organizada como uma coleção de Teorias. Uma Teoria é essencialmente feita de: Declarações de Tipos: Introduz novos nomes de tipos e/ou tipos; T:TYPE, par : TYPE = {x : T EXISTS(y : T) : x = 2 y} Declarações de Constantes e variáveis: Introduz novas constantes e/ou variáveis; a,b:t, z:var par Declarações de Fórmulas: Introduz Axiomas (AXIOM) e/ou Teoremas (CLAIM, LEMMA ou THEOREM)

A Linguagem de Especificação PVS O PVS (Prototype Verification System) é uma linguagem de especificação baseada sobre lógica de ordem superior e rica em sistema de tipos. A especificação em PVS é organizada como uma coleção de Teorias. Uma Teoria é essencialmente feita de: Declarações de Tipos: Introduz novos nomes de tipos e/ou tipos; T:TYPE, par : TYPE = {x : T EXISTS(y : T) : x = 2 y} Declarações de Constantes e variáveis: Introduz novas constantes e/ou variáveis; a,b:t, z:var par Declarações de Fórmulas: Introduz Axiomas (AXIOM) e/ou Teoremas (CLAIM, LEMMA ou THEOREM)

A Linguagem de Especificação PVS O PVS (Prototype Verification System) é uma linguagem de especificação baseada sobre lógica de ordem superior e rica em sistema de tipos. A especificação em PVS é organizada como uma coleção de Teorias. Uma Teoria é essencialmente feita de: Declarações de Tipos: Introduz novos nomes de tipos e/ou tipos; T:TYPE, par : TYPE = {x : T EXISTS(y : T) : x = 2 y} Declarações de Constantes e variáveis: Introduz novas constantes e/ou variáveis; a,b:t, z:var par Declarações de Fórmulas: Introduz Axiomas (AXIOM) e/ou Teoremas (CLAIM, LEMMA ou THEOREM)

O Provador PVS O Provador PVS é usado interativamente para construir a prova de um teorema e ele usa a apresentação de prova no estilo cálculo sequente para mostrar o atual objetivo de prova da prova em progresso; [-1] A [-2] D ------- [1] B [2] C [3] E O provador mantém uma árvore de prova para o teorema que está sendo provado, e cada nó da árvore de prova é um objetivo de prova que resulta da aplicação de um passo de prova ao nó raiz.

O Provador PVS O Provador PVS é usado interativamente para construir a prova de um teorema e ele usa a apresentação de prova no estilo cálculo sequente para mostrar o atual objetivo de prova da prova em progresso; [-1] A [-2] D ------- [1] B [2] C [3] E O provador mantém uma árvore de prova para o teorema que está sendo provado, e cada nó da árvore de prova é um objetivo de prova que resulta da aplicação de um passo de prova ao nó raiz.

Regras e Estratégias (Comandos de Prova) Regra: Executa um passo atômico na prova. skolem!: introduz automaticamente constantes de Skolem para quantificadores universais no consequente ou uma testemunha para quantificadores existenciais no antecedente; flatten: separa os componentes de um antecedente que é uma conjunção ou um consequente que é uma disjunção. Estratégia: Combina aplicações de regras e/ou outras estratégias. skosimp*: introduz automaticamente constantes de Skolem e aplica a simplificação disjuntiva.

Regras e Estratégias (Comandos de Prova) Regra: Executa um passo atômico na prova. skolem!: introduz automaticamente constantes de Skolem para quantificadores universais no consequente ou uma testemunha para quantificadores existenciais no antecedente; flatten: separa os componentes de um antecedente que é uma conjunção ou um consequente que é uma disjunção. Estratégia: Combina aplicações de regras e/ou outras estratégias. skosimp*: introduz automaticamente constantes de Skolem e aplica a simplificação disjuntiva.

Regras e Estratégias (Comandos de Prova) Regra: Executa um passo atômico na prova. skolem!: introduz automaticamente constantes de Skolem para quantificadores universais no consequente ou uma testemunha para quantificadores existenciais no antecedente; flatten: separa os componentes de um antecedente que é uma conjunção ou um consequente que é uma disjunção. Estratégia: Combina aplicações de regras e/ou outras estratégias. skosimp*: introduz automaticamente constantes de Skolem e aplica a simplificação disjuntiva.

Regras e Estratégias (Comandos de Prova) Regra: Executa um passo atômico na prova. skolem!: introduz automaticamente constantes de Skolem para quantificadores universais no consequente ou uma testemunha para quantificadores existenciais no antecedente; flatten: separa os componentes de um antecedente que é uma conjunção ou um consequente que é uma disjunção. Estratégia: Combina aplicações de regras e/ou outras estratégias. skosimp*: introduz automaticamente constantes de Skolem e aplica a simplificação disjuntiva.

Exemplos de Estratégias Disponíveis Manip: fornece estratégias para manipulação algébrica; swap: comuta dois termos Field: fornece estratégias de simplificação aritmética (corpo dos números reais) cancel-by: cancela termos comuns em igualdades e desigualdades.

Exemplos de Estratégias Disponíveis Manip: fornece estratégias para manipulação algébrica; swap: comuta dois termos Field: fornece estratégias de simplificação aritmética (corpo dos números reais) cancel-by: cancela termos comuns em igualdades e desigualdades.

Uma Especificação de Sistemas Abstratos de Reescrita: ARS.pvs Fecho de uma Relação: Usamos as definições dadas por Alfons Geser (.../lib/sets aux); Terminologia: Redutível, forma normal, juntabilidade, confluência e comutatividade; Resultados: 1 Confluência: Propriedade do Diamante Fortemente Confluente 2 Forma Normal: Confluente e Normalizado todo elemento possui forma normal única 3 Comutação: Duas reduções que comutam fortemente comutam

Uma Especificação de Sistemas Abstratos de Reescrita: ARS.pvs Fecho de uma Relação: Usamos as definições dadas por Alfons Geser (.../lib/sets aux); Terminologia: Redutível, forma normal, juntabilidade, confluência e comutatividade; Resultados: 1 Confluência: Propriedade do Diamante Fortemente Confluente 2 Forma Normal: Confluente e Normalizado todo elemento possui forma normal única 3 Comutação: Duas reduções que comutam fortemente comutam

Uma Especificação de Sistemas Abstratos de Reescrita: ARS.pvs Fecho de uma Relação: Usamos as definições dadas por Alfons Geser (.../lib/sets aux); Terminologia: Redutível, forma normal, juntabilidade, confluência e comutatividade; Resultados: 1 Confluência: Propriedade do Diamante Fortemente Confluente 2 Forma Normal: Confluente e Normalizado todo elemento possui forma normal única 3 Comutação: Duas reduções que comutam fortemente comutam

Uma Especificação de Sistemas Abstratos de Reescrita: ARS.pvs x y CR Confluente u z x y v 1 = n 0 n 2 n+1 = n = iterate(, n)

Uma Especificação de Sistemas Abstratos de Reescrita: ARS.pvs (Lema de Newman) Se é terminante (Noetheriana), então x y Conf. Local Conf. z u z x y v Relação Noetheriana: noetherian(r) = well-founded(converse(r)) Indução Noetheriana: Seja (A, ) um sistema de redução terminante. ( x A, ( y A, x + y P(y)) P(x)) ( x A, P(x))

Uma Especificação de Sistemas Abstratos de Reescrita: ARS.pvs (Lema de Newman) Se é terminante (Noetheriana), então x y Conf. Local Conf. z u z x y v Relação Noetheriana: noetherian(r) = well-founded(converse(r)) Indução Noetheriana: Seja (A, ) um sistema de redução terminante. ( x A, ( y A, x + y P(y)) P(x)) ( x A, P(x))

Porque Estratégias em PVS são importantes O desenvolvimento de estratégias é uma forma de aumentar a sua automação e pode ser: de forma genérica: grind: usado para tentar completar uma prova automaticamente ou para aplicar todas as simplificações óbvias até que elas não se apliquem mais. para problemas especifícos: neg-formula: nega ambos os lados de uma fórmula.

Porque Estratégias em PVS são importantes O desenvolvimento de estratégias é uma forma de aumentar a sua automação e pode ser: de forma genérica: grind: usado para tentar completar uma prova automaticamente ou para aplicar todas as simplificações óbvias até que elas não se apliquem mais. para problemas especifícos: neg-formula: nega ambos os lados de uma fórmula.

Porque Estratégias em PVS são importantes O desenvolvimento de estratégias é uma forma de aumentar a sua automação e pode ser: de forma genérica: grind: usado para tentar completar uma prova automaticamente ou para aplicar todas as simplificações óbvias até que elas não se apliquem mais. para problemas especifícos: neg-formula: nega ambos os lados de uma fórmula.

Porque Estratégias em PVS são importantes O desenvolvimento de estratégias é uma forma de aumentar a sua automação e pode ser: de forma genérica: grind: usado para tentar completar uma prova automaticamente ou para aplicar todas as simplificações óbvias até que elas não se apliquem mais. para problemas especifícos: neg-formula: nega ambos os lados de uma fórmula.

Algumas Estratégias Básicas A lista abaixo mostra algumas estratégias usadas para definir novas regras/estratégias de prova: (APPLY step) (THEN step 1 step n ) (IF lisp-expr step 1 step 2 ) (LET ((v 1 lisp-expr 1 ) (v n lisp-expr n )) step) (REPEAT step)

Definindo Novas Estratégias (defstep nome lista de parâmetros (pode ser vazio) expressão da estratégia documentação (opcional) formato ) (opcional)

Definindo Novas Estratégias (defstep one-after-one (&rest axioms) (if (null axioms) (skip) (let ((rewrite-axiom (THEN (rewrite,(car axioms)) (one-after-one$,@(cdr axioms))))) rewrite-axiom)) "" "Rewriting the list of axioms one-after-one.") (defstep one-after-one-exh (&rest axioms) (if (null axioms) (skip) (let ((rewrite-axiom (THEN (REPEAT (rewrite,(car axioms))) (one-after-one-exh$,@(cdr axioms))))) rewrite-axiom)) "" "Rewriting the first axiom of the list as much as possible and then the second and so on.")

Conclusão Especificamos ARS em PVS 1 Indução Noetheriana 2 Lema de Newman 3 Lema de Yokouchi-Hikita 4 Lema da Comutação

Trabalho Futuro Especificar Sistema de reescrita de termos Desenvolver Estratégias 1 Específicas para ARS.pvs 2 Teoria de Reescrita

Trabalho Futuro Especificar Sistema de reescrita de termos Desenvolver Estratégias 1 Específicas para ARS.pvs 2 Teoria de Reescrita

Referências Sam Owre and Natarajan Shankar. The formal semantics of PVS. Technical Report SRI-CSL-97-2, Computer Science Laboratory, SRI International, Menlo Park, CA, August 1997. M. Archer, B. Di Vito and C. Muñoz. Developing User Strategies in PVS: A Tutorial. STRATA, Rome, Italy, September 2003. http://pvs.csl.sri.com/ F. Baader and T. Nipkow. Term Rewriting System and All That. Cambridge University Press, 1998. A. L. Galdino and M. Ayala-Rincón and C. Muñoz. Formal Verification of an Optimal Air Traffic Conflict Resolution and Recovery Algorithm. In Preparation 2006.