32
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 Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br

Embed Size (px)

Citation preview

Page 1: 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

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

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

Page 2: 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

Page 3: 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

11/04/23Prof. Celso A A Kaestner

3

Uma tarefa típica em Computação:

problema problema

real computacional

Modelagem

Page 4: 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 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

Page 5: 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

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

Page 6: 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

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

Page 7: 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

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

Page 8: 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

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

Page 9: 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

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

Page 10: 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

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

Page 11: 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 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

Page 12: 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

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

Page 13: 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 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

Page 14: 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

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

Page 15: 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 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

Page 16: 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)

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

Page 17: 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)

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

Page 18: 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)

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

Page 19: 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)

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

Page 20: 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)

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

Page 21: 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)

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

Page 22: 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)

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

Page 23: 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)

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

Page 24: 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)

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

Page 25: 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)

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

Page 26: 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)

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

Page 27: 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)

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

Page 28: 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)

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

Page 29: 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)

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

Page 30: 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)

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

Page 31: 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)

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

Page 32: 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)

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