Lógica Computacional 117366. 2 Descrição do Projeto



Documentos relacionados
Sobre o Professor Dr. Sylvio Barbon Junior

Disciplina de Projetos e Análise de Algoritmos. Aula 1 - Apresentação aos Algoritmos Computacionais

Web site. Objetivos gerais. Introdução. Profa. Patrícia Dockhorn Costa

Sumário. 5COP096 Teoria da Computação Aula 8 Pesquisa em Memória Primária

Complexidade de Algoritmos

Processos de Desenvolvimento de Software

5COP096 TeoriadaComputação

Projeto e Análise de Algoritmos Projeto de Algoritmos Introdução. Prof. Humberto Brandão humberto@dcc.ufmg.br

CAP. I ERROS EM CÁLCULO NUMÉRICO

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

MC102 Algoritmos e Programação de Computadores 1ª Aula Introdução à Programação de Computadores

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO <NOME DO TRABALHO> <Nome do Aluno> <Nome do Orientador>

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015.

Software de segurança em redes para monitoração de pacotes em uma conexão TCP/IP

Projeto e Análise de Algoritmos. Profa. Juliana Kaizer Vizzotto. Projeto e Análise de Algoritmos - Aula 1

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

Universidade Federal do Vale do São Francisco. Estruturas de Dados. Professor: Marcelo Santos Linder

Manual SAGe Versão 1.2 (a partir da versão )

Projetos. Universidade Federal do Espírito Santo - UFES. Mestrado em Informática 2004/1. O Projeto. 1. Introdução. 2.

Apresentação da disciplina Introdução a Programação

Algoritmos e Programação de Computadores I. Prof. Eduardo

Universidade Paulista

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR

Linguagens Formais e Autômatos

ESTRUTURAS DE DADOS II

Árvores de Suporte de Custo Mínimo

Guia Prático. Sistema EAD PRO-CREA

LMS: Manual do aluno

Manual do Participante do Curso de Gestão da Assistência Farmacêutica - EaD

PERSPECTIVAS DO PROJETO DE ENSINO FÁBRICA DE SOFTWARE *

SIMULADO DO ENEM 2015

Lição 1 - Criação de campos calculados em consultas

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

PLANOS DE CONTINGÊNCIAS

Aula 04 Ordenação parcial

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

Algoritmos e Estrutura de Dados II. Apresentação. Prof a Karina Oliveira. kkco@dei.unicap.br

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

Programação para Computação

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

Como funciona? SUMÁRIO

Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia de Computação CECOMP

De uma forma ampla, o profissional egresso deverá ser capaz de desempenhar as seguintes funções:

Especificação do 3º Trabalho

ESTRUTURAS DE DADOS II MSc. Daniele Carvalho Oliveira

PROFESSOR: CRISTIANO MARIOTTI

SERVIÇO PÚBLICO FEDERAL INSTITUTO FEDERAL DE EDUCAÇÃO CIÊNCIA E TECNOLOGIA DA BAHIA CAMPUS IRECÊ DEPARTAMENTO DE ENSINO COORDENAÇÃO PEDAGÓGICA

Disciplina de Projetos e Análise de Algoritmos

ISO/IEC 12207: Gerência de Configuração

SISTEMA DE CONTROLE DE ACESSO, PARA AMBIENTE ACADÊMICO

15 Computador, projeto e manufatura

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Análise e projeto de sistemas PROF. REGILAN SILVA

Base de Dados para Administrações de Condomínios

Ficha da Unidade Curricular (UC)

Educação Mediada por Tecnologias de. Informação e Comunicação

Engenharia de Software Sistemas Distribuídos

FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAÇÃO ESTRUTURA DE DADOS 2. Vieira Lima Junior. Everson Santos Araujo

Engenharia de Software e Sistemas Distribuídos. Enunciado Geral do Projecto

OBI2009 Caderno de Tarefas

Árvore B UNITINS ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 3º PERÍODO 43

Especificação do Trabalho Prático

Edital para o Processo Seletivo ISITEC 2016 ORIENTAÇÕES GERAIS

IV Feira de Inovação e Tecnologia De 7 a 11 de Maio de 2012 Computação e Tecnologias do Eixo Informação e Comunicação

SUMÁRIO TUTORIAL DO HQ. 2 DICAS PEDAGÓGICAS:. 2 DOWNLOAD DA INSTALAÇÃO. 2 PASSO 1 FORMULÁRIO PARA DOWNLOAD. 2 PASSO 2 ESCOLHENDO A VERSÃO.

Monitor de Rede Elétrica Som Maior Pro. Manual do Usuário Versão 3.9f

CRIAÇÃO DA DISCIPLINA SISTEMA DE GESTÃO AMBIENTAL NO CURSO DE ENGENHARIA CIVIL

a 1 x a n x n = b,

(P AA) 2 PACOTE DE APOIO A APRENDIZAGEM DE PROJETO E ANÁLISE DE ALGORITMOS: IMPLEMENTAÇÃO EM JAVA

CEAHS CEAHS. Grupo Disciplinas presenciais Créditos Mercado da Saúde Ética e aspectos jurídicos 1

Dadas a base e a altura de um triangulo, determinar sua área.

Guia de preparação para o exame da Axis

Instalando o SCI Manager

Feature-Driven Development

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Manual do Ambiente Moodle para Professores

Pesquisa em Memória Primária. Prof. Jonas Potros

Introdução a Informática. Prof.: Roberto Franciscatto

Estudo comparativo entre dois tradicionais algoritmos de roteamento: vetor distância e estado de enlace.

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

SISTEMA DE MONITORAMENTO DE CONDIÇÕES CLIMÁTICAS

Ata da resolução de exercício

Ministério da Educação Secretaria de Educação Superior Diretoria de Políticas e Programas de Graduação. Sistema de Seleção Unificada - SISU

OCOMON PRIMEIROS PASSOS

OFICINA BLOG DAS ESCOLAS

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Guia. PDA e SmartPhones. Windows Mobile, Pocket PC e CE.

Sumário: Fluxo Operacional... 3 Contatos Agenda Online Reservas de Salas Tarefas... 42

FileMaker Pro 14. Utilização de uma Conexão de Área de Trabalho Remota com o FileMaker Pro 14

MANUAL DO PVP SUMÁRIO

QUADRADO MÁGICO - ORDEM 4

Contagem. Prof. Dr. Leandro Balby Marinho. Matemática Discreta. Fundamentos Inclusão/Exclusão Princípio da Casa dos Pombos Permutações Combinações

AVALIAÇÃO DE INTERFACES UTILIZANDO O MÉTODO DE AVALIAÇÃO HEURÍSTICA E SUA IMPORTÂNCIA PARA AUDITORIA DE SISTEMAS DE INFORMAÇÕES

Transcrição:

Lógica Computacional 117366 Descrição do Projeto Formalização de Algoritmos para Ordenação com Heaps 24 de setembro de 2015 Prof. Mauricio Ayala-Rincón Prof. Flávio L. C. de Moura A estagiária de docência Ariane Alves Almeida (arianealvesalmeida@gmail.com) dará suporte aos alunos no desenvolvimento do projeto. Laboratórios do LINF têm instalado o software necessário (PVS 6.0 com as bibliotecas PVS da NASA). 1 Introdução Algoritmos de busca e ordenação são fundamentais em Ciência da Computação. Busca é um mecanismo essencial em estruturas de dados e ordenação é relevante para diminuir o tempo de busca em diversas estruturas de dados. Neste projeto considerar-se-ão algoritmos de ordenção sobre o tipo abstrato de dados finite sequences como especificado no assistente de demonstração PVS. O objetivo do projeto da disciplina é introduzir os mecanismos básicos de manuseio de tecnologias de verificação e formalização que utilizam técnicas dedutivas lógicas, como as estudadas na disciplina, para garantir que objetos computacionais são logicamente corretos. 2 Descrição do Projeto Este projeto aborda questões apresentadas now arquivos de especificação e prova do algoritmo de ordenação por heaps, que são, respectivamente, heapsort.pvs e heapsort.prf. Os arquivos estão disponível na página da disciplina, especificados na linguagem do assistente de demonstração PVS (pvs.csl.sri.com) executável em plataformas Unix/Linux. Os alunos deverão formalizar propriedades da especificação para ordenação por heap sobre a estrutura de dados de sequências finitas de naturais. 2.1 Ordenação por heap: Heapsort Algumas funções utilizadas na especificação deste algoritmo estão especificadas para listas de naturais no arquivo sorting.pvs (arquivo de provas sorting.prf), como a noção de occurrence, que especifica quantas vezes determinado natural está presente em uma lista, dada por: occurrence(l)(x): RECURSIVE nat = IF null?(l) THEN 0 ELSIF car(l) = x THEN 1 + occurrence(cdr(l))(x) occurrence(cdr(l))(x) MEASURE length(l)

Também temos para sequências finitas uma função semelhante, dada por: occurrences(h)(x:nat): RECURSIVE nat = IF length(h) = 0 THEN 0 ELSIF h(0) = x THEN 1 + occurrences(h^(1,length(h)-1))(x) occurrences(h^(1,length(h)-1))(x) MEASURE length(h) A primeira questão do projeto está relacionada com a correspondência entre estas especificações de occurrências en listas e sequências finitas. O objetivo é formalizar que a a especificação de ordenação por heap, abaixo, é correta. Ou seja, provar que ela ordena a entrada preservando o número de ocorrências dos elementos na entrada (veja questão 3). heapsort(h) : finite_sequence[nat] = IF length(h) > 1 THEN heapsort_aux(heapify(h)(floor(length(h)/2) - 1))(length(h)-1) h A função heapsort inicialmente transforma a sequência dada em um heap, usando a função heapify. Um heap é uma árvore binária balanceada, mas não necessariamente completa, i.e., os irmos do último nó interno tem exatamente dois filhos, e este pode ter um único filho esquerdo. Adicionalmente, um heap satisfaz a seguinte relação de ordem: a chave de cada nó interno é maior ou igual que as chaves dos seus filhos ([CLRS01, BvG99]). Por exemplo, a árvore: (9) (8) (4) (5) (6) (3) (0) (0) (2) (1) É um heap e pode ser representado como a sequência finita: 9 8 4 5 6 3 0 0 2 1 A função heapify deve transformar sequências finitas em um heap, e está especificada como: heapify(h)(i : nat i <= floor(length(h)/2) - 1) : RECURSIVE finite_sequence[nat] = IF i > 0 THEN heapify(sink(h)(i, length(h) - 1))(i - 1) sink(h)(i, length(h) -1) MEASURE i

Logo heapsort aplica a função recursiva heapsort aux, abaixo, que se encarrega de todo o processo de ordenação. heapsort_aux(h)(n :below[length(h)]): RECURSIVE finite_sequence[nat] = IF n = 0 THEN h ELSIF n = 1 THEN swap(h)(0,1) heapsort_aux(sink(swap(h)(0,n))(0, n - 1))(n - 1) MEASURE n heapsort aux aproveita a ordenação do heap, que implica que a raiz da estrutura contém a maior chave, colocando-o então na última posição, por meio da função swap. swap(h)(i, j : below[length(h)]) : finite_sequence[nat] = (# length := length(h), seq := (LAMBDA (k : below[length(h)]) : IF k = i THEN h(j) ELSIF k = j THEN h(i) h(k) ) #) Depois disto, heapsort reorganiza o heap por meio da função sink até a posição anterior àquela da troca do maior elemento. O processo se realiza recursivamente: sink(h)((i : below[length(h)]), (n : below[length(h)] n >= i)) : RECURSIVE finite_sequence[nat] = IF i > floor((n+1)/2) - 1 THEN h LET k = ind_gc(h)(n,i) IN IF h(k) > h(i) THEN sink(swap(h)(i,k))(k,n) h MEASURE n - i 3 Questões Deverão ser formalizados resultados a seguir, conforme a especificação heapsort.pvs. Questão 01 As especificações de ocorrência para sequências finitas e listas coincidem. same_occ_fseq_list : CONJECTURE FORALL(h, (x :nat)) : occurrences(h)(x) = occurrence(finseq2list(h))(x) Como ambas definições são recursivas, a prova deve ser feita por indução no tamanho da sequência. A informação em sequências se mantém se estas tem exatamente o mesmo n mero de ocorrências para qualquer natural. Isso da origem à noção de permutations. As ações sobre sequências finitas, no processo de ordenação, devem preservar a informação. Assim, por exemplo é necessário formalizar que operações como swap geram permutações. Finalmente, temos uma questão desafio e uma principal sobre a correção de heapsort. Questão 02 - desafio Com as invariantes necessárias o algoritmo heapsort aux recursivamente ordena corretamente sequências finitas com a ordenação de heap.

heapsort_aux_psorts : CONJECTURE FORALL (h, (n : nat n<length(h)-1)) : (psorted(h)(n+1,length(h)-1) AND is_p_heap(h)(0,n) AND FORALL (i : below[n+1]) : h(i) <= h(n+1) ) IMPLIES psorted(heapsort_aux(h)(n))(0,length(h) - 1) A formalização desta conjectura realiza-se por indução em n. Mas deve ser notado que n depende do comprimento de h. No passo indutivo, é necessário aplicar resultados sobre as funções swap e sink que são as aplicadas alternadamente em cada passo recursivo do heapsort aux. Mas também é necessário uma consideração muito precisa das mudançãs dos índices das sequências finitas. Questão 03 Quando aplicamos a função heapsort a uma sequência, o resultado deve ser uma sequência ordenada que preserva a informação da entrada. heapsort_works : THEOREM FORALL (h) : sorted(heapsort(h)) AND permutations(h, heapsort(h)) Esta questão não requer uso de indução, porém necessita total entendimento da especificação e dos resultados auxiliares formalizados fornecidos. 4 Etapas do desenvolvimento do projeto Os alunos deverão definir os grupos de trabalho limitados a três membros até o dia 28 de Setembro. Exceto pelo dia da segunda prova, 2 de Dezembro de 2015, as aulas serão realizadas no LINF a partir do dia 23 de Setembro. O projeto será dividido em duas etapas como segue: A primeira etapa do projeto e a de Verificação das Formalizações. Os grupos deverão ter prontas as suas formalizações na linguagem do assistente de demonstração PVS e enviar via e-mail à estagiária com cópia para o professor os arquivos de especificação e de provas desenvolvidos (heapsort.pvs e heapsort.prf) até o dia 09.11.2015. Na mesma semana dias 9 e 11.11.2015, durante o horário de aula, realizar-se-á a verificação do trabalho para a qual os grupos deverão, em acordo com o monitor e professor, determinar um horário (de uma hora) no qual todos membros do grupo deverão comparecer. Avaliação (peso 6.0): Um dos membros, selecionado por sorteio, explicará os detalhes da formalização em, no máximo, 20 minutos. Os quatro membros do grupo poderão complementar a explicação inicial em, no máximo, 10 minutos. A formalização será testada nos 30 minutos seguintes. A segunda etapa do projeto consiste da apresentação dos resultados finais e conclusões do estudo do problema. Avaliação (peso 4.0): Cada grupo de trabalho devera entregar um Relatório Final inédito, editado em L A TEX, limitado a oito páginas (12 pts, A4, espaçamento simples) do projeto até o dia 18.11.2015 com o seguinte conteúdo:

Introdução e contextualização do problema. Explicação da soluções. Especificação do problema e explicação do método de solução. Descrição da formalização. Conclusões. Referências. Referências [BvG99] S. Baase and A. van Gelder. Computer Algorithms Introduction to Design and Analysis. Addison-Wesley, 1999. [CLRS01] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein. Introduction to Algorithms. MIT Electrical Engineering and Computer Science Series. MIT press, second edition, 2001.