Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr...

Preview:

Citation preview

Lógica para Computação

Prof. Celso Antônio Alves Kaestner, Dr. Eng.

celsokaestner (at) utfpr (dot) edu (dot) br

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, produtividade e qualidade.

11/04/23Prof. Celso A A Kaestner

2

Lógica para Computação (IF61B)

Especificação de programas

11/04/23Prof. Celso A A Kaestner

3

Uma tarefa típica em Computação:

problema problema

real computacional

Modelagem

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.

11/04/23Prof. Celso A A Kaestner

4

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:

...

11/04/23Prof. Celso A A Kaestner

5

1 = {v1

1,v12...v1

m} = {v2

1,v22...v2

m} = {vn

1,vn2...vn

m}

programa

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 10 sobre o estado final: z = x + y

11/04/23Prof. Celso A A Kaestner

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 2 (superespecificação): sobre o estado inicial: x 10 y 10 (x +

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

11/04/23Prof. Celso A A Kaestner

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 3 (especificação pouco clara): sobre o estado inicial: x 10 (x + y) (10

+ x) sobre o estado final: z = x + y

11/04/23Prof. Celso A A Kaestner

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 4 (especificação incompleta): sobre o estado inicial: x 10 sobre o estado final: z = x + y

11/04/23Prof. Celso A A Kaestner

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” 5 (não é especificação ...): sobre o estado inicial: x 10 y 10 sobre o estado final: z = x + y z < 10

11/04/23Prof. Celso A A Kaestner

10

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;

11/04/23Prof. Celso A A Kaestner

11

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.

11/04/23Prof. Celso A A Kaestner

12

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.

11/04/23Prof. Celso A A Kaestner

13

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 execução do programa.

11/04/23Prof. Celso A A Kaestner

14

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>1 PRE: n 0 POS: fat = n! fat > 0 INV: fat > 0

11/04/23Prof. Celso A A Kaestner

15

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 atende à especificação e corrigi-lo se for o caso.

11/04/23Prof. Celso A A Kaestner

16

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} Saída: V3 = {1,2,3,3,6,7,9,10}

11/04/23Prof. Celso A A Kaestner

17

Lógica para Computação (IF61B)

Verificação de programasvoid 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++;}}

11/04/23Prof. Celso A A Kaestner

18

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

11/04/23Prof. Celso A A Kaestner

19

Lógica para Computação (IF61B)

Verificação de programasvoid 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++;}}

11/04/23Prof. Celso A A Kaestner

20

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.

Para a correção ... Novo programa

11/04/23Prof. Celso A A Kaestner

21

Lógica para Computação (IF61B)

Verificação de programasvoid 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++;}; (continua)

11/04/23Prof. Celso A A Kaestner

22

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++;}

} O programa agora está OK.

11/04/23Prof. Celso A A Kaestner

23

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 procedimentos.

11/04/23Prof. Celso A A Kaestner

24

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 correção total do programa.

11/04/23Prof. Celso A A Kaestner

25

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 (P satisfaz ).

11/04/23Prof. Celso A A Kaestner

26

Lógica para Computação (IF61B)

Verificação de programasUso 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 complexidade.

11/04/23Prof. Celso A A Kaestner

27

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;

11/04/23Prof. Celso A A Kaestner

28

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 ’;

Exemplo: <x:=E, > → [m/x]

11/04/23Prof. Celso A A Kaestner

29

Lógica para Computação (IF61B)

Verificação de programasTripla 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 |- <> P <> ?

11/04/23Prof. Celso A A Kaestner

30

Lógica para Computação (IF61B)

Verificação de programasCorreçã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 que P pára.

11/04/23Prof. Celso A A Kaestner

31

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);

Exemplos de provas (pg. 200 em diante).

11/04/23Prof. Celso A A Kaestner

32

Recommended