Sobre Equações Recursivas e Construções de Ponto Fixo Parte I Alfio Martini www.inf.pucrs.br/alfio Clube de Lógica em Ciência da Computação Faculdade de Informática - PUCRS 19 de setembro de 2013
Sumário 1 2 3 4 5 6 7
Sumário 1 2 3 4 5 6 7
Sumário 1 2 3 4 5 6 7
Produtos Cartesianos Dados conjuntos X e Y Conjunto Potência Produto Cartesiano (X ) {A X } X Y {(x, y) x X y Y } X é chamado de origem (source) e Y de destino (target) da relação Relações (Binárias): f é uma relação binária entre X e Y se e somente se f X Y O conjunto de todas as relações binárias entre X e Y é denotado por (X Y ) e é definido por (X Y ) (X Y )
Funções Parciais Domínio Se f X Y, o domínio de f é definido como dom(f ) {x (x, y) f } Uma relação f X Y é uma função parcial se e somente se x, y, y.(x, y) f (x, y ) f y = y Uma função parcial f A B é representada como f : X Y O conjunto de todas as funções parciais entre X e Y é denotado por (X Y )
Fato Básico (X Y ) (X Y ) (X Y )
Funções Totais Uma função parcial f : X Y é dita total se e somente se dom(f ) = X Uma função total entre X e Y é representada como f : X Y O conjunto de todas as funções totais entre X e Y é denotado por (X Y )
Funções Parciais como Funções Totais A A { } representa n~ao-terminaç~ao ou nenhum valor Seja f : X Y, então f : X Y é definida como { f f (x) se x dom(f ) (x) = caso contrário (X Y ) = (X Y )
Função Parcial Totalmente Indefinida : N N é a função parcial totalmente indefinida, onde (n) = para todo n 0
Iteração de Funções Totais Seja f : X X uma função total. Então definimos f 0 (x) = id(x) f n+1 (x) = f n (f (x))
Currying and Uncurrying curry(ing) é um operação que toma uma função que recebe uma tupla de argumentos e retorna uma cadeia de funções onde cada uma recebe um argumento de cada vez. uncurry(ing) é o processo inverso. Por exemplo, seja f : A B C, então curry(f ) : A (B C) é a função tal que f (a, b) = curry(f )(a)(b) Para f : A B C e g : A (B C) uncurry(curry(f )) = f curry(uncurry(g)) = g
Currying and Uncurrying Para a A fixo e arbitrário, f : A B C curry(f )(a) : B C Note que (A B C) = (A (B C)) Na Ciência da Computação, currying fornece uma forma de estudar funções em um modelo teórico simples, conhecido como cálculo-λ. No cálculo-λ funções recebem um argumento de cada vez.
Currying and Uncurrying Seja sqsum : N N N, tal que sqsum(x, y) x 2 + y 2 Então tal que curry(sqsum) : N (N N) curry(sqsum) x y = sqsum(x, y)
Cálculo Lambda Tipado in a Nutshell Sistema formal para expressão computação (de funções) baseado em nos conceitos de abstração e aplicação. Os únicos tipos são os tipos básicos os tipos função σ τ. Gramática para termos e tipos x Variable t ::= σ nat int... t t M ::= x λx : t. M M M
Cálculo Lambda Tipado in a Nutshell Se M, N são termos lambda e x é uma variável abstração λx. M aplicação M N Regras de Tipagem Se x : σ, M : τ, então λx : σ. M : σ τ Se M : σ τ, N : σ, então M N : τ
Cálculo Lambda Tipado in a Nutshell Assumindo x + y : N, então λx : N. x + y : N N Assumindo y : N temos λy : N. λx : N. x + y : N (N N)
Avaliação de Expressões Lambda Seja λx : σ. M : σ τ e M : τ. Então λx : σ. M N M[x/N] isto é, M, onde todas as ocorrências livres de x são substituídas por N.
Avaliação de Expressões Lambda (λy : N. λx : N. x + y 4) 5 = λx : N. x + 4 5 = 5 + 4 = 9
Sumário 1 2 3 4 5 6 7
Equação Recursiva Uma definição recursiva é uma equação da forma x =... x... onde... x... designa uma expressão matemática que contém ocorrências da variável definida x.
Soluções de Equações Recursivas Solução Uma solução para uma equação recursiva é um valor que torna a equação verdadeira quando substituído por todas as ocorrências da variável definida. Uma equação recursiva pode ter um conjunto (possivelmente vazio) de soluções, que é nomeado como SS (Solution Set)
Exemplos de Soluções Suponha x : Z. Então x = 1 + x não tem nenhuma solução (SS(x) = ) x = 4 x possui uma única solução (SS(x) = {2}) x = 9 x possui duas soluções (SS(x) = {3, 3}) x = x possui um conjunto infinito de soluções (SS(x) = {x x Z})
Exemplos de Soluções Considere a equação x = 1 16x 3 SS(x) =, se x : Z SS(x) = { 1 2 }, se x : Q+ SS(x) = { 1 2, 1 2 }, se x Q SS(x) = { 1 2, 1 2, i 2, i 2 }, se x : C
Observação Essencial Conjunto de soluções de uma equação recursiva depende do tipo da variável que está sendo definida
Equações Recursivas com Variáveis do Tipo Função As equações abaixo definem uma, várias ou nenhuma função? Se forem funções, são totais ou parciais? f = λx : N. f (x + 1) f (x) = f (x + 1) h = λx : N. if x = 0 then 1 else h(x + 1) h(x) = if x = 0 then 1 else h(x + 1) g = λx : N. if x = 0 then 1 else x g(x 1) g(x) = if x = 0 then 1 else x g(x 1)
Candidatos para h : N N h = λx : N. if x = 0 then 1 else h(x + 1) h(x) = if x = 0 then 1 else h(x + 1) h 1 (x) = { 1 se x = 0 caso contrário h 2 (x) = { 1 se x = 0 2 caso contrário h 3 (x) = 1
h 1, h 2, h 3 solucionam h Por exemplo, Portanto { 1 se x = 0 h 1 (x) = caso contrário = if x = 0 then 1 else = if x = 0 then 1 else h 1 (x + 1) h 1 (x) = if x = 0 then 1 else h 1 (x + 1)
Considerações Essenciais Observações Fundamentais h 1, h 2, h 3 são pontos fixos de h SS(h) é infinito! Qualquer função que fixe 0 1 está em SS(h). Qual delas é de fato a solução que adere à interpretação computacional? Computacionalmente, h não-termina sempre que x > 0! Como formalizar precisamente uma equação (especificação) recursiva?
Sumário 1 2 3 4 5 6 7
Funções Geradoras Funções Geradoras Seja d : D. Então, uma definição recursiva d = (... d...) podem ser sempre codificadas como uma função total D D τ = λd : D. (... d...)
Exemplos de Funções Geradoras x = 4 x τ = λx : Z. 4 x f = λx : N. f (x + 1) τ = λf. (N N ). λx : N. f (x + 1) h = λx : N. if x = 0 then 1 else h(x + 1) τ = λh : N N. λx : N. if x = 0 then 1 else h(x + 1) g = λx : N. if x = 0 then 1 else x g(x 1) τ = λg : N N. λx : N. if x = 0 then 1 else x g(x 1)
Ponto Fixo Um ponto fixo de uma função τ : D D é um elemento d D tal que τ(d) = d
Ponto Fixo (Intuição) Se uma função D D é vista como movimentando elementos dentro do espaço D, então elementos que satisfazem a definição recursiva são os únicos que permanecem estacionários. Portanto, o nome ponto fixo.
Ponto F (Solução de Equações Recursivas) Seja uma definição recursiva d = (... d...) com a correspondente função geradora D D τ = λd : D. (... d...) Então k D é uma solução da definição recursiva se e somente se τ(k) = k
Ponto Fixo (Exemplos) Considere h = λx : N. if x = 0 then 1 else h(x + 1) τ = λh : N N. λx : N. if x = 0 then 1 else h(x + 1) Então, temos que τ(h 1 ) = h 1 τ(h 2 ) = h 2 τ(h 3 ) = h 3
Sumário 1 2 3 4 5 6 7
Idéia Fundamental da Técnica Iterativa Solução de uma equação de ponto fixo τ(f ) = f é tal que: é o limite de uma sequência de funções (conjuntos) f 0, f 1,..., f n,... tal que f 0 : N N f i+1 = τ(f i ) cada f i é uma função parcial, não-recursiva, que aproxima a solução verdadeira da equação de ponto fixo. para cada i 0 temos que f i f i+1 na cadeia f 0 f 1... f n... diz-se que f i aproxima f i+1 ou que f i+1 carrega mais informação do que f i
Idéia Fundamental da Técnica Iterativa para i 0, f i (x) = f i+1 (x), x dom(f i f i+1 ) o limite desta sequência é a união de todas estas funções f = n 0 f n
Definição Recursiva de Fatorial g = λx : N. if x = 0 then 1 else x g(x 1) τ = λg : N N. λx : N. if x = 0 then 1 else x g(x 1) f 0 τ 0 ( )(x) = f 1 τ 1 ( )(x) = if { x = 0 then 1 else x (x 1) 1 se x = 0 = caso contrário f 2 τ 2 ( )(x) = if x = 0 then 1 else x f i (x 1) 1 se x = 0 = 1 se x = 1 caso contrário
Definição Recursiva de Fatorial f 3 τ 3 ( )(x) = if x = 0 then 1 else x f 2 (x 1) 1 se x = 0 1 se x = 1 = 2 se x = 2 caso contrário f 4 τ 4 ( )(x) = if x = 0 then 1 else x f 3 (x 1) 1 se x = 0 1 se x = 1 = 2 se x = 2 6 se x = 3 caso contrário
. =.. f n τ n ( )(x) = if { x = 0 then 1 else x f n 1 (x 1) f = τ ( )(x) (x 1)! 0 x < n = caso contrário = ( n 0 τ n ( ))(x) = x! = ( n 0 f n )(x) = x!
f como ponto fixo de τ τ(f )(x) = if x = 0 then 1 else x f (x 1) = if x = 0 then 1 else x (x 1)! = x! = f (x)
Resumo Extensão Sejam f, g (X Y ). Dizemos que g estende f (f aproxima g) se e somente se f g. Note que isso obriga que para todo x dom(f ) dom(g) f (x) = g(x)
Resumo Especificação Recursiva Seja D = (X Y ). Um especificação recursiva em D é uma função total τ : D D tal que Neste caso, a sequência τ 0 ( ) τ 1 ( ) τ 2 ( )... τ 0 ( ), τ 1 ( ), τ 2 ( ),... é chamada de semântica de Kleene de τ, a qual é a função parcial τ em D tal que dom(τ ) = k 0 dom(τ k ( )) enquanto τ (x) = τ k ( )(x) para qualquer k e x dom(τ k ( ))
Resumo A computação iterativa do ponto fixo constrói uma cadeia de funções ordenadas por inclusão de conjuntos Nesta cadeia, o menor elemento é a função parcial totalmente indefinida. Cada função na cadeia é uma função parcial que está definida para alguns elementos do domínio de definição da função O ponto fixo é a união de todas as funções desta cadeia
Sumário 1 2 3 4 5 6 7
Ordens Parciais (Posets) Uma relação binária em um conjunto D é chamada de ordem parcial se e somente se é: reflexiva : d D.d d anti-simétrica : d, d D.d d d d = d transitiva : d, d, d D.d d d d d O par (D, ) é chamado de conjunto parcialmente ordenado ou poset.
Diagrama Hasse de um Poset Diagrama Hasse O diagrama Hasse de um poset é um grafo dirigido onde vértices do grafo são os elementos do conjunto base do poset e no qual existe um arco entre vértices x e y se e somente se x y e z.(x z z y) (z = x z = y)
Elementos Mínimos em um Poset Elementos Mínimos Suponha que D é um poset e S um subconjunto de D. Um elemento d S é um elemento mínimo de S se satisfaz x S.d x se o elemento mínimo existe, é escrito como D. Logo d D. d
Cadeias em um Poset Uma cadeia crescente e contável em um poset D é uma sequência de elementos que satisfaz d 0 d 1 d 2... Um limite superior (upper bound) para a cadeia é qualquer d D que satisfaz n 0.d n d Se existir, o limite superior mínimo (least upper bound ou lub) é escrito como n 0 d n
Propriedades do lub Por definição Todos elementos aproximam o lub m 0.d m n 0 d n O lub é o menor na presença de outros candidatos, i.e., para qualquer d D, se m 0.d m d então d n d n 0
Ordens Parciais Completas (CPO s) Uma ordem parcial completa (cpo, ccpo) é um poset (D, ) na qual todas as sequências contáveis d 0 d 1 d 2... possuem lubs n 0 d n Um domínio é um cpo que possuem um elemento mínimo, i.e., d D. d
Monotonicidade, Continuidade e Rigidez Sejam (D, D ), (E, E ) ordens parciais. Uma função total f : D E é dita monotônica se e somente se d, d D.d d f (d) f (d ) Se D e D são cpo s, f : D E é contínua se e é monotônica e preserva lubs de cadeias, isto é, para todas as cadeias d 0 d 1 d 2... f ( d n ) = n 0 n 0 f (d n ) em E Se D e E possuem elementos mínimos, então f : D E é dita rígida (strict) se e somente se f ( ) =
Sumário 1 2 3 4 5 6 7
de Traski Um ponto fixo para uma função f : D D é é um elemento d D tal que f (d) = d
Pontos Pré-fixos (Pre-fixed Points) Se D é um poset, é suficiente considerar a noção mais fraca de ponto fixo. Seja D um poset e f : D D uma função total. Então Um elemento d D é um ponto pré-fixo de f se satisfaz f (d) d O ponto pré-fixo mínimo, se existir, é escrito como fix(f ) fix(f ) é especificado unicamente pelas seguintes propriedades: lfp1 f (fix(f )) fix(f ) lfp2 d D.f (d) d fix(f ) d
Pré-pontos fixos induzem Suponha D um poset e f : D D uma função total que possua um ponto pré-fixo mínimo fix(f ). Se f for monotônica, então fix(f ) é também um ponto fixo, i.e., f (fix(f )) = fix(f ) (e consequentemente o menor ponto fixo dentre todos os pontos fixos de f )
de Tarski Seja f : D D uma função contínua em um domínio D. Então f tem um ponto fixo mínimo, dado por fix(f ) = f n ( ) n 0
Prova f (fix(f )) = f ( n 0 f n ( )) (def. fix(f ) = n 0 (f (f n ( ))) (f é contínua) = n 1 f n ( ) (def. composição) = n 1 f n ( ) { } ( C { } = C, C é cadeia) = n 0 f n ( ) (f 0 ( ) = ) = fix(f ) (def. fix(f ))
Definição Recursiva dos Naturais Pares Even = {0} {n + 2 n Even} τ : (N) (N) = λs. {0} {n + 2 n s} Agora, considere a seguinte sequência: τ 0 ( ) = id( ) = τ 1 ( ) = {0} τ 2 ( ) = {0} {2} = {0, 2} τ 3 ( ) = {0} {2, 4} = {0, 2, 4} τ 4 ( ) = {0} {2, 4, 6} = {0, 2, 4, 6}. =. τ n ( ) = {0, 2, 4,..., 2n 2 n 1} τ n 0 τ n ( ) = {2n n 0}
Definição Recursiva de Silly Então silly(x) = silly(x + 1) τ : (N N ) (N N ) = λf. λx. f (x + 1) τ 0 ( )(n) = id( )(n) = ( )(n) = τ 1 ( )(n) = (n + 1) = τ (n) =
Questão Essencial (Final) Qual é o tipo do operador fix?