A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

©André Santos, 1998-2002 Programação Funcional Provas de Propriedades de Programas André Santos.

Apresentações semelhantes


Apresentação em tema: "©André Santos, 1998-2002 Programação Funcional Provas de Propriedades de Programas André Santos."— Transcrição da apresentação:

1 ©André Santos, 1998-2002 Programação Funcional Provas de Propriedades de Programas André Santos

2 ©André Santos, 1998-2002 Testes vs. Provas Testes: mostram que propriedade é válida para algumas entradas (argumentos) Provas: mostram que a propriedade é válida para quaisquer entradas

3 ©André Santos, 1998-2002 Provas diretas swap :: (t,u) -> (u,t) swap (x,y) = (y,x) swap (swap (a,b)) == (a,b) cycl :: (t,u,v) -> (u,v,t) cycl (a,b,c) = (b,c,a) recycl :: (t,u,v) -> (v,t,u) recycl (a,b,c) = (c,a,b) cycl (recycl (a,b,c)) == (a,b,c) recycl (cycl (a,b,c)) == (a,b,c)

4 ©André Santos, 1998-2002 Valores definidos e indefinidos Avaliação termina: totalSales 2 Avaliação não termina: totalSales (-2) –valor indefinido As provas que vamos apresentar são válidas para quaisquer valores de entrada definidos. 0 * e = 0

5 ©André Santos, 1998-2002 Provas por análise de casos maxi :: Int -> Int -> Int maxi n m | n >= m = n | otherwise = m provar para quaisquer m e n que maxi n m >= n –caso n >= m –caso n < m

6 ©André Santos, 1998-2002 Provas por indução Baseadas em assumirmos validade de hipóteses Para provar uma propriedade P(n), onde n é um número natural: –caso Base: provamos P(0) –passo indutivo: para n>0, provamos P(n) assumindo que P(n-1) é verdadeiro.

7 ©André Santos, 1998-2002 Exemplo: fatorial fac :: Int -> Int fac 0 = 1 fac n = n * fac (n-1) Provar P(n): fac n > 0 –provar P(0), i.e. que fac 0 > 0 –provar P(n), onde n > 0, assumindo P(n-1)

8 ©André Santos, 1998-2002 Exemplo: potências power2 :: Int -> Int power2 0 = 1 power2 r = 2 * power2 (r-1) Provar que para todo n power2 (n+1) = 2 * power2 n

9 ©André Santos, 1998-2002 Provas sobre lista sumList [] = 0 sumList (a:as) = a + sumList as double [] = [] double (a:as) = 2*a: double as Provar que para toda lista x sumList (double x)) = 2 * sumList x

10 ©André Santos, 1998-2002 [] ++ b = b (a:as) ++ b = a:(as++b) Provar que para todas as lista finitas x, y e z (indução sobre x ) x ++ (y ++ z) = (x ++ y) ++ z Provar que para toda lista finita x x ++ [] = x Provas sobre lista

11 ©André Santos, 1998-2002 member [] b = False member (a:as) b = (a==b) || member as b Provar que para todas as listas finitas x e y (indução sobre x ) member (x++y) c = member x c || member y c Provas sobre lista

12 ©André Santos, 1998-2002 numBorrowed [] p = 0 numBorrowed (a:as) p | (fst a) == p = 1 + numBorrowed as p | otherwise = numBorrowed as p books [] p = [] books (a:as) p | (fst a) == p = b:books as p | otherwise = books as p Provar que para todos os banco de dados db finitos e todas as pessoas per numBorrowed db per = length (books db per) Provas sobre lista

13 ©André Santos, 1998-2002 borrowed [] b = False borrowed (a:as) b | (snd a) == b = True | otherwise = borrowed as b borrowers [] b = [] borrowers (a:as) b | (snd a) == b = (fst a):borrowers as b | otherwise = borrowers as b Provar que para todos os banco de dados db finitos e todas os livros bk borrowed db bk = (borrowers db bk \= []) Provas sobre lista


Carregar ppt "©André Santos, 1998-2002 Programação Funcional Provas de Propriedades de Programas André Santos."

Apresentações semelhantes


Anúncios Google