lógica para computação prof. celso antônio alves kaestner, dr. eng. celsokaestner (at) utfpr...
TRANSCRIPT
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