• Nenhum resultado encontrado

Lógica para Computação

N/A
N/A
Protected

Academic year: 2021

Share "Lógica para Computação"

Copied!
32
0
0

Texto

(1)
(2)

Lógica para Computação (IF61B)

Especificação de programas

 Engenharia de Requisitos: como entender e

modelar um problema real para obter uma solução computacional;

 Engenharia de Software: é uma área da

Computação voltada à especificação,

desenvolvimento e manutenção de sistemas de software, com aplicação de tecnologias e práticas de gerência de projetos e outras disciplinas, visando organização,

(3)

Lógica para Computação (IF61B)

Especificação de programas

 Uma tarefa típica em Computação:

problema problema

(4)

Lógica para Computação (IF61B)

Especificação de programas

 Especificações em linguagem natural exigem

que se assuma o significado de diversos

termos, e por isto são “imprecisas / vagos / inconsistentes” permitindo diversas

interpretações;

 Este é um problema amplamente estudado

em Engenharia de Software, que busca de métodos e formalismos tenta eliminar / reduzir este problema.

(5)

Lógica para Computação (IF61B)

Especificação de programas

Visão operacional de um programa:

dados de dados de

entrada saída

Programas como transformadores de estados:

... 1 = {v1

1,v12...v1m}  = {v21,v22...v2m}  = {vn1,vn2...vnm}

(6)

Lógica para Computação (IF61B)

Especificação de programas

Especificação de propriedades de programas:

Exemplo: dados dois valores (x e y) inteiros maiores

ou iguais a 10 calcular sua soma (z);

 Especificação 1:

sobre o estado inicial: x 10 y 10sobre o estado final: z = x + y

(7)

Lógica para Computação (IF61B)

Especificação de programas

Especificação de propriedades de programas:

Exemplo: dados dois valores (x e y) inteiros maiores ou

iguais a 10 calcular sua soma (z);

 Especificação 2 (superespecificação):

sobre o estado inicial: x 10 y 10 (x + y)0 sobre o estado final: z = x + y z 20

(8)

Lógica para Computação (IF61B)

Especificação de programas

Especificação de propriedades de programas:

Exemplo: dados dois valores (x e y) inteiros maiores ou

iguais a 10 calcular sua soma (z);

 Especificação 3 (especificação pouco clara):

sobre o estado inicial: x 10 (x + y)(10 + x)sobre o estado final: z = x + y

(9)

Lógica para Computação (IF61B)

Especificação de programas

Especificação de propriedades de programas:

Exemplo: dados dois valores (x e y) inteiros maiores ou

iguais a 10 calcular sua soma (z);

 Especificação 4 (especificação incompleta):  sobre o estado inicial: x 10

(10)

Lógica para Computação (IF61B)

Especificação de programas

Especificação de propriedades de programas:

Exemplo: dados dois valores (x e y) inteiros maiores ou

iguais a 10 calcular sua soma (z);

 “Especificação” 5 (não é especificação ...):  sobre o estado inicial: x 10 y 10sobre o estado final: z = x + y z < 10

(11)

Lógica para Computação (IF61B)

Especificação de programas

 Vantagens de se ter uma especificação definida

por formalismo matemático:

1. Precisão: a linguagem matemática é precisa e

identifica um significado único para cada propriedade;

2. Verificação de consistência: a linguagem

matemática nos possibilita verificar

inconsistências nas especificações quando há propriedades contraditórias sobre um mesmo objeto;

(12)

Lógica para Computação (IF61B)

Especificação de programas

3. Simulação: especificações em algumas

linguagens matemáticas podem ser

parcialmente executáveis, auxiliando a verificação;

4. Verificação de programas: após a construção de

um programa é possível – de forma automática ou semiautomática – verificar se esta é uma

solução (ou satisfaz) a especificação do problema.

(13)

Lógica para Computação (IF61B)

Especificação de programas

 Pode-se usar o Lógica Matemática como

linguagem de especificação;

 Ver na referência (da Silva, Finger, de Melo) às

páginas 165 a 169 o uso da Lógica Matemática como linguagem de especificação.

(14)

Lógica para Computação (IF61B)

Especificação de programas

Sistematização das propriedades de programas:

1. Pré-condições: válidas sobre os dados de

entrada;

2. Pós-condições: válidas sobre os dados de saída; 3. Invariantes: válidas sempre, durante toda a

(15)

Lógica para Computação (IF61B)

Especificação de programas

 Exemplo: fatorial. 1 se n=0 n! = 1 se n=1 n*(n-1)! se n>1PRE: n 0

POS: fat = n!fat > 0INV: fat > 0

(16)

Lógica para Computação (IF61B)

Verificação de programas

 Os erros são comuns em programação;

 O funcionamento correto de um programa

depende também dos dados fornecidos ao programa, isto é, se sua variação foi

corretamente prevista;

 Deseja-se verificar se o programa desenvolvido

(17)

Lógica para Computação (IF61B)

Verificação de programas

Exemplo: (Merge) dadas duas seqüências

ordenadas de inteiros produzir nova seqüência ordenada que entrelace os números das duas seqüências:

 Entradas: V1 = {1,3,6,9} e

V2 = {2,3,3,7,10}

(18)

Lógica para Computação (IF61B)

Verificação de programas

void merge(int V1[],V2[],V3[],t1,t2) {int p1=0,p2=0,p3=0; while(t1+t2>0) {if (V1[p1] > V2[p2]) {V3[p3]=V2[p2]; p2=p2+1; t2=t2-1;} else {V3[p3]=V1[p1]; p1=p1+1; t1=t1-1;} p3++;}

(19)

Lógica para Computação (IF61B)

Verificação de programas

 Erro: se uma das seqüências for vazia há uma

comparação indevida:

if (v1[p1] > V2[p2])

 Numa execução real haveria erro.  Para a correção ... Novo programa

(20)

Lógica para Computação (IF61B)

Verificação de programas

void merge(int V1[],V2[],V3[],t1,t2) {int p1=0,p2=0,p3=0; while(t1>0 && t2>0) {if (V1[p1] > V2[p2]) {V3[p3]=V2[p2]; p2=p2+1; t2=t2-1;} else {V3[p3]=V1[p1]; p1=p1+1; t1=t1-1;} p3++;}

(21)

Lógica para Computação (IF61B)

Verificação de programas

 Agora a comparação só ocorre se houver

elementos nas listas;

 Porém: quando uma lista termina deixa-se de

colocar os elementos restantes da outra lista na lista de saída.

 Um novo erro é introduzido ao se corrigir o erro

inicial.

(22)

Lógica para Computação (IF61B)

Verificação de programas

void merge(int V1[],V2[],V3[],t1,t2) {int p1=0,p2=0,p3=0; while(t1>0 && t2>0) {if (V1[p1] > V2[p2]) {V3[p3]=V2[p2]; p2=p2+1; t2=t2-1;} else {V3[p3]=V1[p1]; p1=p1+1; t1=t1-1;} p3++;}

(23)

Lógica para Computação (IF61B)

Verificação de programas

while (t1>0) {V3[p3]=V1[p1]; p1=p1+1; t1=t1-1; p3++;} while (t2>0) {V3[p3]=V2[p2]; p2=p2+1; t2=t2-1; p3++;} }

(24)

Lógica para Computação (IF61B)

Verificação de programas

 Se tantos erros ocorrem em um programa tão

simples, como proceder no caso de sistemas complexos ?

 Como determinar se um programa está correto ?  Solução: minimizar os erros, por meio de alguns

(25)

Lógica para Computação (IF61B)

Verificação de programas

Procedimentos utilizados para verificação:

1. Inspeção: segue-se a lógica do programa em

busca de situações incorretas ou não previstas;

2. Teste de programas: alguns casos de teste são

selecionados, em conjunto com dados de

teste, sobre os quais o programa é executado e os resultados são verificados; não garante a

(26)

Lógica para Computação (IF61B)

Verificação de programas

Estratégias para produzir programas corretos

(pg. 183):

1.

Síntese: dada um especificação

, um

programa P é construído de forma automática

ou semi-automática, por meio de

transformação da especificação

em P;

2.

Verificação: Dada uma especificação

e um

programa P, mostrar que P é um modelo para

(27)

Lógica para Computação (IF61B)

Verificação de programas

Uso da verificação formal na prática:

1) Análise: Dado um programa P, encontrar uma

especificação  que defina o problema para o qual P é a solução;

2) Correção: Dados uma especificação  e um

programa P que não satisfaz , construir P’ que satisfaça  e que seja “próximo” a P;

3) Otimização: Dada uma especificação  e um

programa P que satisfaz , obter P’ equivalente a P que seja ótimo sob determinada medida de

(28)

Lógica para Computação (IF61B)

Verificação de programas

Exemplo de uma linguagem de

programação (pg. 186);

Um programa sequencial é basicamente um

transformador de dados do estado inicial

ao estado final;

Semântica operacional: indica o

funcionamento de cada comando como

transformador de estados;

(29)

Lógica para Computação (IF61B)

Verificação de programas

Semântica operacional (notação):

<C,

> →

A execução de C sobre o estado

produz o estado

’;

(30)

Lógica para Computação (IF61B)

Verificação de programas

Tripla de Hoare:

<

> P <

>

para todo estado

que satisfaz

, se a

execução de P sobre

termina

produzindo um estado

’ que satisfaz

;

Prova de programas: construir um sistema

de provas para asserções do tipo

(31)

Lógica para Computação (IF61B)

Verificação de programas

Correção parcial: <

> P <

> é satisfeita

sob correção parcial se para todos os

estados que satisfazem

o estado

resultante da execução de P satisfaz

,

se P parar;

Correção total: <

> P <

> é satisfeita sob

correção total se para todos os estados

que satisfazem

o estado resultante da

execução de P satisfaz

e é garantido

(32)

Lógica para Computação (IF61B)

Verificação de programas

Correção parcial de programas (pg. 195);

Sistema de inferência com regras de

Hoare para a linguagem de programação

apresentada, sob a forma de uma lógica e

suas regras de inferência (pg. 196);

Referências

Documentos relacionados

O surgimento da teoria da computação começa a tomar forma quando os matemáticos Alonzo Church (1903 - 1995) e Alan Turing (1912 - 1954) publicam um trabalho idealizando a

A ciência da lógica e sua aplicação na computação não foram elaboradas de uma hora para outra, e sim, desenvolvida através de mais de 150 anos pelo empenho e trabalho

– Os conceitos são expressos por termos gerais; – Os julgamentos são expressos por proposições; – Os raciocínios são seqüências de proposições. • Em Aristóteles

• contrapositiva: “Se o time da casa não ganha, então não está chovendo” • inversa: “Se não está chovendo, o time da casa não

Exercício 1: Demonstre se as afirmações são verdadeiras.. As colunas devem ser equivalentes. As colunas devem ser equivalentes.. FALSO, pois pode existir uma ou mais, mas

Lógica para Ciência da Computação, Editora Campus, 2a.

Uma heur´ıstica: do conjunto das menores cl´ ausulas de α (elas tˆem menor grau de indecis˜ ao com rela¸c˜ ao ao literal a satisfazer, relativamente a cl´ausulas maiores), escolher

Dedução natural é um dos sistemas dedutivos utilizados para construir demonstrações formais na Lógica, tais demonstrações são realizadas através de uma árvore de