Programao Funcional Laziness Provas de Propriedades Andr Santos

  • Slides: 12
Download presentation
Programação Funcional Laziness / Provas de Propriedades André Santos ©André Santos, 1998 -2008

Programação Funcional Laziness / Provas de Propriedades André Santos ©André Santos, 1998 -2008

Laziness • Lazy evaluation – avaliação de uma expressão se dá apenas quando seu

Laziness • Lazy evaluation – avaliação de uma expressão se dá apenas quando seu valor é necessário f : : Int -> Int f a b = a + b f (9 -3) (f 3 5) = (9 -3) + (f 3 5) = 6 + 8 = 14

Laziness f f g g : : Int -> a b = a +

Laziness f f g g : : Int -> a b = a + : : Int -> c = c + g Int -> Int 12 Int c f 3 (g 0) = ? f (g 0) 3 = ?

Laziness • Argumentos não precisam ser avaliados por completo – apenas o necessário para

Laziness • Argumentos não precisam ser avaliados por completo – apenas o necessário para a execução da função f : : [Int] -> Int f (a: as) (b: bs) = a + b f [1. . ] [2. . ] = ?

Laziness • Não faz avaliação duplicada f : : Int -> Int f a

Laziness • Não faz avaliação duplicada f : : Int -> Int f a = a + a f (fat 20) = (fat 20) + (fat 20) Mas, na prática: = + (fat 20) • Expressões representadas como grafos

Provas de propriedades • Até então as provas eram realizadas apenas para valores definidos

Provas de propriedades • Até então as provas eram realizadas apenas para valores definidos – Freqüentemente, precisa-se realizar provas levando em conta valores indefinidos (undef) f a b = a f 1 undef = 1 f undef 1 = undef g c = c + g c g 1 = undef g 5 = undef

Provas de propriedades • Possibilidade de realizar provas sobre listas infinitas. Por exemplo: [1.

Provas de propriedades • Possibilidade de realizar provas sobre listas infinitas. Por exemplo: [1. . ]

Listas infinitas • As listas parciais undef, a 0: a 1: undef, etc. são

Listas infinitas • As listas parciais undef, a 0: a 1: undef, etc. são aproximações da lista infinita [a 0, a 1, a 2, . . . , an, . . . ]

Podemos afirmar que se uma propriedade se verifica para todas fp-lists, então a mesma

Podemos afirmar que se uma propriedade se verifica para todas fp-lists, então a mesma se verifica para todas aproximações de listas infinitas ©André Santos, 1998 -2002

Provas de propriedades com indefinição • Provar P(x) para todas listas finitas ou parciais

Provas de propriedades com indefinição • Provar P(x) para todas listas finitas ou parciais (construidas a partir de undef) – caso base: P([]) e P(undef) – passo da indução: P(a: x) assumindo P(x)

Exercício • Prove que as seguintes propriedades são válidas para todas listas finitas ou

Exercício • Prove que as seguintes propriedades são válidas para todas listas finitas ou parciais (fp-lists) sum. List (double x) = 2 * sum. List x x ++ (y ++ z) = (x ++ y) ++ z member (x++y) b = member x b || member y b

Exercício • Verifique se a seguinte propriedade é válida para todas as fp-lists shunt

Exercício • Verifique se a seguinte propriedade é válida para todas as fp-lists shunt (shunt x y) [] = shunt y x shunt : : [Int] -> [Int] shunt [] y = y (1) shunt (x: xs) y = shunt xs (x: y) (2)