2.2. A Semântica Operacional do Cálculo Lambda
|
|
|
- Igor Zagalo Azambuja
- 8 Há anos
- Visualizações:
Transcrição
1 2.2. A Semântica Operacional do Cálculo Lambda Até agora foi descrita a sintaxe do cálculocomo calcular com ele.. Para chamá-lo de cálculo, devemos porém dizer Basicamente isto é realizado através de três regras de conversão, que descrevem como converter uma expressão- em outra Introdução à conversão: Variáveis atadas e livres (bound/free) Consideremos a expressão- : ( x. + x y) 4 Para avaliar esta expressão necessitamos: saber o valor global de y. não necessitamos saber o valor global de x, pois é o parâmetro formal da função. Assim vemos que: x e y possuem um status bastante diferente. A razão é que x ocorre atado pelo colocado quando a abstração- for aplicada ao argumento. x, é somente um encaixe dentro do qual o argumento 4 é Por outr lado, y não é atado por nenhum e assim ocorre livre na expressão. A ocorrência de uma variável é atada se há uma expressão- envolvente que a amarra, senão é livre. No exemplo a seguir, x e y ocorrem atados, z porém, ocorre livre: x. + (( y. + y z) 7) x Observe que os termos atado e livre se referem a ocorrências específicas da variável em uma expressão. Uma variável pode possuir tanto uma ocorrência atada como uma livre em uma expressão. Considere o exemplo: + x (( x. + x 1) 4) Aqui x ocorre livre (a primeira vez) e atada (a segunda). Cada ocorrência individual de uma variável deve ser ou atada ou livre.
2 As definições formais de livre a atado são dadas abaixo: Definição de ocorre livre: x ocorre livre em x (mas não em outra variável ou constante qualquer) x ocorre livre em (E F) x ocorre livre em E ou x ocorre livre em F x ocorre livre em y.e x e y são variáveis diferentes e x ocorre livre em E Nota: nenhuma variável oorre atada em uma expressão consistindo e uma única constante. Definição de ocorre atada: x ocorre atada em (E F) x ocorre atada em E ou x ocorre atada em F x ocorre atada em y.e (x e y são a mesma variável e x ocorre livre em E) ou x ocorre atada em E Conversão-Beta Uma abstração- denota uma função. Assim necessitamos descrever como aplicá-la a um argumento. A função ( x. + x 1) 4 é a justaposição do função ( x. + x y) e do argumento 4 e, por conseguinte, denota a aplicação de uma certa função, denotada pela abstração-, ao argumento 4. A regra para a aplicação de uma função é muito simples: O resultado da aplicação de uma abstração- um argumento é uma instância do corpo da abstração- no qual ocorrências (livres) do parâmetro formal no corpo são repostos pelo argumento. O resultado de se aplicar a abstração ao argumento é: onde o (+ 4 1) é um instância do corpo (+ x 1) no qual ocorrências do parâmetro formal x foram repostas pelo argumento 4. Nós escrevemos as conversões utilizando o símbolo como antes:
3 ( x. + x 1) Esta operação é chamada de -redução e a sua implementação eficiente é um aspecto importante na elaboração de linguagens de programação funcional. Exemplos simpes de -redução: O parâmetro formal pode ocorrer várias vezes no corpo: ( x. + x x) Da mesma forma, poderá não haver ocorreêncuias do parâmetro formal no corpo: ( x. 3) 5 3 β Nesse caso não há ocorrências do parâmetro formal (x), pelo qual o argumento 5 poderia ser substituído. Assim o argumento é descartado sem uso. β O corpo de uma abstração poderá ser constituído por outra abstração : 10 1 ( x. ( y. - y x)) 4 5 ( y. - y 4) Observe-se que, ao se construir a instância do corpo da abstração a abstração y envolvida por esta, substituindo-se x, é copiado. x, o corpo inteiro inclusive Aqui se observa também o efeito do Currying: a aplicação da abstração x retornou uma função (a abstração y) como seu resultado. Esta por sua vez, aplicada resultou em ( - 5 4). Funções encapsuladas umas dentro das outras são comumente abreviadas: Funções podem ser argumentos também: ( x. ( y. E)) para ( x. y. E) ( f. f 3)( x. + x 1) ( x. + x 1)
4 4 Uma instância da abstração abstração de f. x é substituída por f onde quer que f apareça no corpo da Nomenclatura: Nomes de parâmetros formais podem não ser únicos: ( x.( x. + ( - x 1)) x 3) 9 ( x. + (- x 1)) (- 9 1) 3 Observe-se que o x interno não foi substituído na primeira redução, pois estava protegido pelo x envolvente, ou seja, a ocorrência interna de x não é livre no corpo da abstração x externa. Dada uma asbtração-, ( x.e), é possível identificar-se exatamente as ocorrências de x que deveriam ser substitídas atraves da identificação de todas as ocorrências de x que estão livres. Dessa forma, para o exemplo acima, examinamos o corpo da abstração: ( x. + (- x 1)) x 3 e vemos que a segunda ocorrência de x é livre, podendo ser substituída. A idéia do aninhamento do escopo de variáveis em uma linguagem de programação estruturada é análoga a esta regra. Outro exemplo: 11 ( x. y.+ x (( x.- x 3) y)) (- 6 3) 8 ( y.+ 5 (( x.- x 3) y)) (( x.- x 3) 6) Novamente, o x mais interno não é substituído, uma vez que não é livre no corpo da abstração mais externa.
5 Exemplo maior: Modelagem de Construtores de Dados Definimos CONS, HEAD e TAIL da seguinte forma: CONS = ( a. b. f.f a b) HEAD = ( c.c ( a. b.a)) TAIL = ( c.c ( a. b.b)) as fórmulas acima obedecem às regras para CONS, HEAD e TAIL definidas anteriormente (Seção 2.1.3). Exemplo: Isto significa: HEAD (CONS p q) = ( c.c ( a. b.a))(cons p q) = ( a. b. f.f a b) p q ( a. b.a) Não existe necessidade real para as funções embutidas HEAD e CONS ou TAIL. Todas as funções embutidas podem ser modeladas como abstrações-lambda. De um ponto de vista teórico, isto é satisfatório, para efeitos práticos porém, não é utilizado (eficiência) Conversão-Alfa Considere: ( x. + x 1) e ( y. + y 1) Evidentemente elas devem ser equivalentes. A conversão- é o nome dado à operação de mudança de nome (consistente) de um parâmetro formal. Notação: CONS p q ( a. b.a) ( b. f.f p b)q ( a. b.a) ( f.f p q)( a. b.a) ( a. b.a)p q ( b p) q p α ( x. + x 1) ( y. + y 1) α
6 α α α -congruência: duas expressões- M e N são -congruentes (ou -iguais), denotado por α M N se ou M N ou M N, ou N é obtido de M através da reposição de uma subxpressão S de M por uma expressão- T tal que S T, ou existe alguma expressão- R tal que M R e R N Conversão-Eta Sejam: ( x. + 1 x) e (+ 1). Estas expressões se comportam exatamente da mesma maneira, quando aplicadas a um argumento: ambas adicionam 1 ao argumento. α Conversão- é o nome dado à regra que expressa essa equivalência: ( x. + 1 x) (+ 1) De forma mais geral, a regra da conversão- pode ser expressa assim: ( x. F x) F desde que x não ocorra livre em F e F denote uma função. A condição de que x não deve ocorrer livre em em F previneconversões errôneas. Exemplo: pois x ocorre livre em (+ x). ( x. + x x) não é -convertível para (+ x) A condição de que F deve denotar uma função previne outras conversões errôneas envovlendo constantes embutidas (predefinidas). EXemplo: TRUE não é -convertível para ( x. TRUE x) Quando a conversão- é utilizada da esquerda para a direita, é chamada de redução Provas de Interconvertibilidade Freqüentemente será necessário poder-se demonstrar a interconvertibilidade de duas expressões-.
7 Quando as duas expressões denotam funções, esta prova pode se tornar extremamente longa. Há porém, métodos para abreviar provas, que não sacrificam o seu rigor. Exemplo: IF TRUE (( p.p) 3) e ( x. 3) Ambas as expressões denotam a mesma função, que invariavelmente retorna o valor 3, não importa o valor de seu argumento e seria de se esperar que ambas sejam interconvertíveis. Isto realmente ocorre: β IF TRUE (( p.p) 3) IF TRUE 3 ( x. IF TRUE 3 x) ( x. 3) onde o passo final é a regra de redução para IF. Um método alternativo de se provar a interconvertibilidade de duas expressões, muito mais conveniente, é o de se aplicar as duas expressões a um argumento w, como: 3 IF TRUE (( p.p) 3) w ( x. 3) w ( p.p) 3 3 Portanto: IF TRUE (( p.p) 3) ( x. 3) Esta prova tem a vantagem de somente utilizar a redução e de evitar o uso explícito da conversão-. O raciocínio por detrás da generalização da interconvertibilidade acima segue abaixo. Suponha que possamos demonstrar que: F 1 w E e F 2 w E
8 onde w é uma variável que não ocorre livre tampouco em F 1 como em F 2, e E é alguma expressão, então podemos raciocinar da seguinte forma: F 1 ( w. F 1 w) ( w. E) ( w. F 2 w) F 2 e por conseguinte F 1 F 2. Não é sempre que expressões- que deveriam dizer a mesma coisa são interconvertíveis. Isto será tratado mais tarde Sumário: Regras de Conversão Há três regras de conversão que possibilitam a interconversão de expressões envolvendo abstrações- : 1. Mudança de nome: a conversão- permite que se troque o nome de parâmetros formais de uma abstração-, penquanto isto for feito de forma consistente. 2. Aplicação de funções: A redução- permite a aplicação de abstrações- a um argumentoatravés de geração de uma nova instância do corpo da abstração, substituindo o argumento por ocorrências livres do parâmetro formal. Cuidado especial deve ser tomado quando o argumento contém variáveis livres. 3. Eliminação de abstrações- redundantes: A redução- pode as vezes eliminar uma abstração-. α β Dentro deste contexto, podemos considerar as funções embutidas (predefinidas) como mais uma forma de conversão. Esta forma de conversão recebe o nome de conversão-. δ
9 2.3. Ordem de Redução Se uma expressão não contém mais redexes, então a avaliação está completa. Um expressão nesta forma é dita estar na forma normal. Assim, a avaliação de uma expressão consiste na na redução sucessiva de redexes, até que a expressão esteja na forma normal. Definição (forma normal): uma expressão-l é dita estar na forma normal, se nenhum redex-b, isto é, nenhuma subexpressão da forma (x.p)q ocorre nela. Uma expressão pode conter mais do que um redex, assim a redução pode acontecer por caminhos diferentes. ² Exemplo: (+ (* 3 4) (* 7 8)) pode ser reduzido à forma normal pelas seguintes seqüências: (+ (* 3 4) (* 7 8)) -> (+ 12 (* 7 8)) -> ( ) -> 68 ou (+ (* 3 4) (* 7 8)) -> (+ (* 3 4) 56) -> ( 12 56) -> 68 ² Nem toda expressão possue uma forma normal, considere: (D D) ² onde D é (x.x x). A avaliação desta expressão jamais terminaria, uma vez que (D D) reduz para (D D): (x.x x)(x.x x) -> (x.x x)(x.x x) -> (x.x x)(x.x x) ² Por conseguinte, algumas seqüências de redução poderão atingir a forma normal, outras não. Considere: (x.3) (D D) ²Se nós primeiro reduzirmos a aplicação de (x.3) a (D D) (sem avaliar (D D)), obteremos o resultado 3; porém se primeiro reduzimos a aplicação de D sobre D, nós simplemente obtemos (D D) novamente. ² Se nós continuamos insistindo em escolher a aplicação de D sobre D, a avaliação vai continuar indefinidamente, não terminando. ² Esta situação corresponde à de um programa imperativo que entra em um laço infinito. Dizemos que a avaliação ou execução não termina. ² Para contornar esta situação, existe a ordem normal de redução, que garante que uma forma normal, caso exista, será encontrada.
10 Ordem Normal de Redução ² Uma questão que se coloca, além da questão "poderei encontrar uma forma normal?", é a questão de se existe mais de uma forma normal para para uma expressão, ou: Poderá uma seqüência de redução diferente levar a uma forma normal diferente? Ambas as questões estão interligadas. ² A resposta para a última pergunta é: não. Isto é uma conseqüência dos teoremas de Church-Rosser CRT1 e CRT2. Teorema de Church-Rosser 1 (CRT1): Se E 1 <-> E 2, então existe uma expressão E, tal que E 1 -> E e E 2 -> E Corolário: Nenhuma expressão pode ser convertida em duas formas normais distintas. Isto significa que não existem duas formas normais para uma expressão que não sejam a- convertíveis entre si. Prova: Suponha que E 1 <-> E e E 2 <-> E, onde E 1 e E 2 estão na forma normal. Então E 1 <-> E 2 e, pelo CRT1, deve haver uma expressão F tal que E 1 -> F e E 2 -> F. Como tanto E 1 como E 2 não possuem redexes, logo E 1 = F = E 2 ² Informalmente, o teorema CRT1 diz que todas as seqüências de redução que terminam, haverão de atingir o mesmo resultao. O segundo teorema de Church-Rosser, CRT2, diz respeito a uma ordem particular de redução, chamada ordem normal de redução. Teorema de Church-Rosser 2 (CRT2): Se E 1 -> E 2, e E 2 está na forma normal, então existe uma ordem normal de seqüência de redução de E 1 para E 2. Conseqüências: ² Existe no mínimo um resultado possível e ² a ordem normal de redução encontrará este resultado, caso ele exista. ² Observe que nenhuma seqüência de redução poderá levar a um resultado incorreto, o máximo que poderá acontecer é a não-terminação. A Ordem Normal de Redução especifica que o redex mais à esquerda mais externo deverá ser reduzido primeiro. ²No exemplo anterior (x.3) (D D), escolheríamos o redex-x primeiro, não o (D D). ² Esta regra encorpa a intuição de que argumentos para funções podem ser descartados, de forma que deveríamos aplicar a função (lx.3) primeiro, ao invés de primeiro avaliarmos o argumento (D D).
11 Ordens de redução ótimas ² Enquanto a ordem normal de redução garante que ou uma solução seja encontrada ou o não-término ocorra, ela não garante que isto ocorra no número mínimo de passos de redução, o que é um fato relevante na utilização do cálculo-l para a implementação de linguagens de programação interpretadas. ² No caso da implementação da resolução através de redução de grafos - que estudaremos mais tarde - porém, aparentemente a ordem normal de redução é "geralmente ótima" em questão de tempo de execução. Analisar uma expressão para encontrar o redex ótimo para ser reduzido é aparentemente muito mais trabalhoso e gasta mais tempo do que arriscar uma redução com mais passos seguindo "cegamente" a ordem normal. ² Alguns autores como (Levy, J.J.; Optimal Reductions in the Lambda Calculus in Essays on Combinatory Logic, Academic Press, 1980) se ocuparam de algoritmos para encontrar ordens ótimas ou quase-ótimas de redução que preservassem as qualidades da ordem normal de redução. Isto é assunto de um tópico avançado que não cabe nesta disciplina Funções Recursivas ² Se o propósito da utilização de cálculo lambda é a conversão de programas funcionais neste para que possamos resolvê-los, devemos ser capazes de representar uma das características mais marcantes das linguagens funcionais, a recursão. ² O cálculo lambda suporta a representação de recursividade sem maiores extensões através da utilização de alguns pequenos truques Funções Recursivas e o Y ² Considere a definição da função fatorial abaixo: FAC = (n.if (= n 0) 1 (* n (FAC (- n 1)))) ² Esta definição baseia-se na capacididade de se dar um nome a uma abstração lambda e de fazer referência a esta dentro dela mesma. ² Nenhuma construção deste tipo é provida pelo cálculo lambda. ² O maior problema aqui é que funções lambda são anônimas. ² Dessa forma elas não podem nomear-se e assim não podem se referenciar a si mesmas. Para resolver este problema iniciamos com um caso onde encontramos a recursão na sua forma mais pura: FAC = (n.... FAC... ) ² Aplicando uma abstração-b sobre FAC, podemos transformar esta definição em: ² Esta definição podemos escrever da forma: ² onde: FAC = (fac.(n. (...fac...)))fac FAC = H FAC (2.1)
12 H = (fac.(n. (...fac...))) ² A definição de H é trivial. É uma abstração lambda ordinária e não usa recursão. ² A recursão é expressa somente pela definição 2.1. A definição 2.1 pode ser encarada mais como uma equação matemática. Por exemplo, para resolver a equação matemática x 2-2 = x nós procuramos por valores de x que satisfazem a equação (neste caso x = -1 e x = 2). De forma similar, para resolver 2.1, nós procuramos uma expressão lambda para FAC que satisfaça 2.1. A equação 2.1 FAC = H FAC postula que, quando a função H é aplicada a FAC, o resultado é FAC. Nós dizemos que FAC é um ponto fixo de H. Uma função pode ter mais de um ponto fixo. Por exemplo, na função abaixo, tanto 0 quanto 1 são pontos fixos da função: x. * x x a qual calcula o quadrado de seu argumento. Em resumo, estamos procurando por um ponto fixo para H. Claramente isto depende somente de H. Para isto, invente-se, a título provisório, uma função Y, a qual toma uma função como argumento e devolve o seu ponto fixo como resultado. Assim Y tem o comportamento de: Y H = H (Y H) e Y é chamado de combinador de ponto fixo. Assim, caso possamos produzir um Y, temos uma solução para o problema da recursividade. Para 2.1 podemos prover a seguinte solução: FAC = Y H a qual é uma definição não-recursiva de FAC. Como teste para esta estratégia, podemos computar o valor de (FAC 1). Tomemos as definições de FAC e H: FAC = Y H H = (fac.n. IF (= n 0) 1 (* n (fac (- n 1)))) Assim: FAC 1 -> Y H 1 -> H (Y H) 1 ->(lfac.ln.if (= n 0) 1 (* n (fac (- n 1))))(Y H) 1 ->(ln.if (= n 0) 1 (* n (Y H (- n 1)))) 1 -> IF (= 1 0) 1 (* 1 (Y H (- 1 1))) -> * 1 (Y H 0) = * 1 (H (Y H) 0) = * 1 ((lfac.ln.if (= n 0) 1 (* n (fac (- n 1))))(Y H) 0) -> * 1 ((ln.if (= n 0) 1 (* n (Y H(- n 1)))) 0)
13 -> * 1 (IF (= 0 0) 1 (* n (Y H(- 0 1)))) -> * 1 1 -> Y pode ser definido como uma Abstração Lambda ² Para a transformação de uma expressão recursiva em uma não-recursiva, utilizamos o combinador de ponto fixo, uma função que chamamos de Y. ² A propriedade que Y necessita ter é: Y H = H (Y H) ² e isto representa evidentemente a recursão da forma mais pura, uma vez que esta fórmula pode ser utilizada para representar, de forma abstrata, qualquer fórmul arecursiva que queiramos. ² O truque é que podemos representar Y como uma abstração lambda sem utilizar a recursão: Y = (h. (x.h (x x)) (x. h (x x))) Para demonstrar que Y possui a qualidade desejada, evaluemos: Y H = (h. (x.h (x x)) (x. h (x x))) H <-> (x.h (x x)) (x. H (x x)) <-> H ((x.h (x x)) (x. H (x x))) <-> H (Y H) ² O fato de Y poder ser definido como uma abstração lambda é, do ponto de vista matemático, realmente digno de nota. ² Do ponto de vista da implementação, é relativamente ineficiente implementar Y como uma abstração lambda. Para a construção de linguagens funcionais, utiliza-se geralmente uma função embutida com a regra de redução: Y H -> H (Y H)
14 Exercícios (entregar próxima aula) I. Redução: Reduza as seguintes expressões-lambda às suas respectivas formas normais: (((f.x.y.(x)(f)y)p)q)r (((x.y.z.(y)x)(x)y)(u)z)y (x.(y.(x)(y)y) z.(x)(z)(u.v.u)w (((x.y.z.((x)z)(y)z)(u.v.u)w)s.s)t (((x.(z.(x)(y)y)ly.(x)(y)y)z.u.v.(u)(z)v)(r.s.r)t)w (x.x(xy))n (x.y)n (x.(y.xy)n)m (x.xx)(x.xx) (x.xxy)(x.xxy) (x.z)((x.xxy)((x.xxy)) II. Recursividade: 1. Dê uma definição recursiva para o maior divisor comum de dois inteiros e calcule o valor de ((mdc) 10) 14) utilizando o combinador Y. 2. Tente o mesmo para os números de Fibonacci e use Y para computar (Fibo) 5.
Programação Funcional Cálculo Lambda - Aula Nº 3
Programação Funcional Cálculo Lambda - Aula Nº 3 2.3. Ordem de Redução Se uma expressão não contém mais redexes, então a avaliação está completa. Um expressão nesta forma é dita estar na forma normal.
Centro Universitário do Triângulo
Centro Universitário do Triângulo Cálculo Lambda 1. Introdução A elaboração de modelos de computação (resolução de problemas por uma máquina) baseia-se em trabalhos de dois pesquisadores com enfoques bastante
Programação Funcional - Introdução a Cálculo Lambda
Programação Funcional - Introdução a Cálculo Lambda Cristiano Damiani Vasconcellos Universidade do Estado de Santa Catarina 1. Definição Cálculo lambda (λ-cálculo) é um modelo matemático capaz de ilustrar
Aula 05: - Recursão (parte 1)
MCTA028 Programação Estruturada Aula 05: - Recursão (parte 1) Prof. João Henrique Kleinschmidt Material elaborado pelo prof. Jesús P. Mena-Chalco 3Q-20108 Recursão: Se você ainda não entendeu; Ver: "Recursão".
Aula 05: - Recursão (parte 1)
MCTA028 Programação Estruturada Aula 05: - Recursão (parte 1) Prof. Jesús P. Mena-Chalco [email protected] 3Q-20107 1 Recursão: Se você ainda não entendeu; Ver: "Recursão". Efeito Droste Anuncio
Cálculo Lambda Sem Tipos
Cálculo Lambda Sem Tipos Cálculo lambda sem tipos Peter Landin (60 s) observou que uma linguagem de programação pode ser compreendida formulando-a em um pequeno núcleo capturando suas características essenciais
O Cálculo λ sem Tipos
Capítulo 2 O Cálculo λ sem Tipos 21 Síntaxe e Redução Por volta de 1930 o cálculo lambda sem tipos foi introduzido como uma fundação para a lógica e a matemática Embora este objectivo não tenha sido cumprido
Recursividade, Tentativa e Erro
Recursividade, Tentativa e Erro Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho [email protected] BCC402 Aula 07 Algoritmos e Programação Avançada Na aula anterior Prova 2 Na aula de hoje Técnicas
Matemática Discreta para Ciência da Computação
Matemática Discreta para Ciência da Computação P. Blauth Menezes [email protected] Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Aula 04 Programa Recursivo e Máquinas Prof.ª Danielle Casillo Funções recursivas Alguma função é recursiva quando
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/30 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais
Fundamentos de Cálculo Lambda
Instituto Superior Técnico Universidade Técnica de Lisboa Lisboa, 2 de Novembro de 2006 Índice Introdução Aplicação e Abstracção Axiomática Aplicação Introdução Aplicação e Abstracção Axiomática FA F é
Aula prática 5. Funções Recursivas
Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário
Recursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul
Recursão Aula 1 Liana Duenha Faculdade de Computação Universidade Federal de Mato Grosso do Sul Algoritmos e Programação II, Análise de Sistemas, 2010 Martinez & Rubert (FACOM) Recursão APIIAS 1 / 25 Conteúdo
# Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira
# Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira Na aula anterior... Alocação Dinâmica de Memória Introdução 3 O que vamos aprender? Recursividade
BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1
BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 Na aula anterior Prova 2 Na aula de hoje Técnicas básicas de contagem; Tentativa e Erro; Recursividade.
TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS
TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS Acadêmico: Cleison Vander Ambrosi Orientador: José Roque Voltolini da Silva Roteiro da Apresentação Introdução Motivação
Algoritmos. OBMEP Teoria dos números - Parte I. Algoritmo da divisão:
OBMEP Teoria dos números - Parte I Elaine Pimentel 1 o Semestre - 2006 Algoritmos Algoritmo = processo de cálculo baseado em regras formais Especificação de um algoritmo: entrada + instruções + saída Perguntas:
MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016
MC102 Aula 26 Recursão Instituto de Computação Unicamp 17 de Novembro de 2016 Roteiro 1 Recursão Indução 2 Recursão 3 Fatorial 4 O que acontece na memória 5 Recursão Iteração 6 Soma em um Vetor 7 Números
Aula 1 Aula 2. Ana Carolina Boero. Página:
Elementos de lógica e linguagem matemática E-mail: [email protected] Página: http://professor.ufabc.edu.br/~ana.boero Sala 512-2 - Bloco A - Campus Santo André Linguagem matemática A linguagem matemática
ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão
Luiz Leão [email protected] http://www.luizleao.com Conteúdo Programático 2.1 - Definições recursivas 2.2 - Como implementar recursividade 2.3 - Quando não usar recursividade 2.4 - Desenvolvendo algoritmos
IV Gramáticas Livres de Contexto
IV Gramáticas Livres de Contexto Introdução Definições de GLC 1 G = (Vn, Vt, P, S) onde P = {A α A Vn α (Vn Vt) + } 2 GLC ε - LIVRE : S ε pode pertencer a P, desde que: S seja o símbolo inicial de G S
Conhecimento e Raciocínio Lógica Proposicional
Conhecimento e Raciocínio Lógica Proposicional Agente Baseado em Conhecimento ou Sistema Baseado em Conhecimento Representa conhecimento sobre o mundo em uma linguagem formal (KB) Raciocina sobre o mundo
Técnicas de análise de algoritmos
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Técnicas de análise de algoritmos Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ [email protected]
Álgebra A - Aula 01 Algoritmo da divisão de Euclides e Algoritmo Euclideano estendido
Álgebra A - Aula 01 Algoritmo da divisão de Euclides e Algoritmo Euclideano estendido Elaine Pimentel Departamento de Matemática, UFMG, Brazil 2 o Semestre - 2010 Introdução Objetivo: estudar o método
BC1424 Algoritmos e Estruturas de Dados I Aula 03: Recursão / Recursividade
BC1424 Algoritmos e Estruturas de Dados I Aula 03: Recursão / Recursividade Prof. Jesús P. Mena-Chalco 1Q-2016 1 Sobre a Lista 01 2 Lista 01 Solve me first Simple Array Sum A Very Big Sum Diagonal Difference
SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.
SEMÂNTICA program simples = var x : int := 3 in x := x + 5 end. rode =? Rogério Rocha Roteiro Introdução Sintaxe Semântica Dinâmica (Métodos formais) Operacional Axiomática Denotacional Estática Conclusão
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição 1 Comando while Deseja-se calcular o valor de: 1 + 2 + 3 +... + N. Observação: não sabemos, a priori, quantos termos
Interpolação polinomial: Diferenças divididas de Newton
Interpolação polinomial: Diferenças divididas de Newton Marina Andretta ICMC-USP 16 de maio de 2012 Baseado no livro Análise Numérica, de R. L. Burden e J. D. Faires. Marina Andretta (ICMC-USP) sme0500
COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática
Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Análise sintática Parte 02 Prof. [email protected] Data Conteúdo 23/09/2013 3. Análise Sintática: 3.1 analisadores
Lambda Cálculo e Programação Funcional. Programação Funcional Bacharelado em Sistemas de Informação Maio
Lambda Cálculo e Programação Funcional Programação Funcional Bacharelado em Sistemas de Informação Maio - 2009 Alonzo Church (1903 1995) Professor em Princeton, EUA (1929 1967) e UCLA (1967 1990) Inventou
Programação imperativa
Capítulo 8 Programação imperativa 8.1 Exercícios de revisão 1. Distinga entre programação imperativa e programação funcional. 2. Explique a necessidade da introdução do operador de atribuição. 3. Diga
Números Inteiros Algoritmo da Divisão e suas Aplicações
Números Inteiros Algoritmo da Divisão e suas Aplicações Diferentemente dos números reais (R), o conjunto dos inteiros (Z) não é fechado para a divisão. Esse não-fechamento faz com que a divisão entre inteiros
Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ.
Linguagens O conceito de linguagem engloba uma variedade de categorias distintas de linguagens: linguagens naturais, linguagens de programação, linguagens matemáticas, etc. Uma definição geral de linguagem
TEOREMA DE LEGENDRE GABRIEL BUJOKAS
TEOREMA DE LEGENDRE GABRIEL BUJOKAS A nossa meta hoje é responder a seguinte questão: Questão. Para a, b Z, determine se a equação ( ) tem uma solução com x, y, z Z, além da solução trivial x = y = z =
Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens
Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens 1 Introdução Estudar computação do ponto de vista teórico é sinônimo de caracterizar
Linguagens de Programação Funcional
Linguagens de Programação Funcional Conceitos de Linguagens de Programação Pedro Libório Setembro de 2013 2 Roteiro Introdução Funções matemáticas Fundamentos das linguagens de programação funcionais A
Aula 1 Aula 2 Aula 3. Ana Carolina Boero. Página:
Elementos de lógica e linguagem matemática E-mail: [email protected] Página: http://professor.ufabc.edu.br/~ana.boero Sala 512-2 - Bloco A - Campus Santo André Linguagem matemática A linguagem matemática
1 Congruências e aritmética modular
1 Congruências e aritmética modular Vamos considerar alguns exemplos de problemas sobre números inteiros como motivação para o que se segue. 1. O que podemos dizer sobre a imagem da função f : Z Z, f(x)
Introdução Maquinas de Turing universais O problema da parada. Indecidibilidade. Rodrigo Gabriel Ferreira Soares DEINFO - UFRPE.
DEINFO - UFRPE Julho, 2014 Motivação Introdução O que pode ser computado? E mais intrigantemente, o que não pode ser computado? Motivação Introdução O que pode ser computado? E mais intrigantemente, o
Métodos Numéricos - Notas de Aula
Métodos Numéricos - Notas de Aula Prof a Olga Regina Bellon Junho 2007 Zeros de equações transcendentes e Tipos de Métodos polinomiais São dois os tipos de métodos para se achar a(s) raízes de uma equação:
ALGORITMO DE EUCLIDES
Sumário ALGORITMO DE EUCLIDES Luciana Santos da Silva Martino lulismartino.wordpress.com [email protected] PROFMAT - Colégio Pedro II 25 de agosto de 2017 Sumário 1 Máximo Divisor Comum 2 Algoritmo
Espaços Euclidianos. Espaços R n. O conjunto R n é definido como o conjunto de todas as n-uplas ordenadas de números reais:
Espaços Euclidianos Espaços R n O conjunto R n é definido como o conjunto de todas as n-uplas ordenadas de números reais: R n = {(x 1,..., x n ) : x 1,..., x n R}. R 1 é simplesmente o conjunto R dos números
complemento para a disciplina de Matemática Discreta versão 1 - Jerônimo C. Pellegrini Relações de Equivalência e de Ordem
Relações de Equivalência e de Ordem complemento para a disciplina de Matemática Discreta versão 1 Jerônimo C. Pellegrini 5 de agosto de 2013 ii Sumário Sumário Nomenclatura 1 Conjuntos e Relações 1 1.1
Expressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 7 Expressões Lambda José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/64 1 Valores de primeira classe 2 Expressão lambda 3 Aplicação
Estruturas de Repetição
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas de Repetição Aula Tópico 4 (while, for) 1 Problema 10 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em C. Dados dois números
1 INTRODUÇÃO E CONCEITOS BÁSICOS
1 INTRODUÇÃO E CONCEITOS BÁSICOS Inicia com uma breve história do surgimento e do desenvolvimento dos conceitos, resultados e formalismos nos quais a Teoria da Computação é baseada. Formalização dos conceitos
Programação Estruturada
Programação Estruturada Recursão Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Recursão Recursão 1 Recursão 2
Linguagens Formais e Autômatos
Linguagens Formais e Autômatos (notas da primeira aula 1 Definições básicas 1.1 Conjuntos Definição 1. Um conjunto é uma coleção de objetos, denominados elementos. Notação 1. Para indicar que um elemento
TEOREMA FUNDAMENTAL DA ARITMÉTICA: APLICAÇÕES
4. TEOREMA FUNDAMENTAL DA ARITMÉTICA: APLICAÇÕES 1). Achando os divisores de um número natural 2). Quantidade de divisores de um número natural 3). Decidindo se um número natural divide outro 4). Extrema
Aula 2, 2014/2 Sintaxe da Lógica dos Conectivos
Notas de aula de Lógica para Ciência da Computação Aula 2, 2014/2 Sintaxe da Lógica dos Conectivos Renata de Freitas e Petrucio Viana Departamento de Análise, IME UFF 27 de agosto de 2014 Sumário 1 Sintaxe
Retas e círculos, posições relativas e distância de um ponto a uma reta
Capítulo 3 Retas e círculos, posições relativas e distância de um ponto a uma reta Nesta aula vamos caracterizar de forma algébrica a posição relativa de duas retas no plano e de uma reta e de um círculo
Juliana Kaizer Vizzotto. Universidade Federal de Santa Maria. Disciplina de Teoria da Computação
Universidade Federal de Santa Maria Disciplina de Teoria da Computação Quais são as capacidades e limitações fundamentais dos computadores? Funções Computáveis Algoritmo: descrição finitade uma computação
37 a Olimpíada Brasileira de Matemática Nível Universitário Primeira Fase
7 a Olimpíada Brasileira de Matemática Nível Universitário Primeira Fase Problema Sejam m e n inteiros positivos, X um conjunto com n elementos e seja 0 k n um inteiro. São escolhidos aleatória e independentemente
Recursão PROGRAMAÇÃO EM LÓGICA. Recursão. Sonho Recursivo. Recursão. Recursão. Linguagem Prolog Parte IV
PROGRAMAÇÃO EM LÓGICA Recursão CIÊNCIA DA COMPUTAÇÃO FACAPE Faculdade de Ciências Aplicadas e Sociais de Petrolina Linguagem Prolog Parte IV Usado desde a arte (em figuras, telas, etc) como também em Matemática
1 Lógica de primeira ordem
1 Lógica de primeira ordem 1.1 Sintaxe Para definir uma linguagem de primeira ordem é necessário dispor de um alfabeto. Este alfabeto introduz os símbolos à custa dos quais são construídos os termos e
Formas normais. Forma normal de Greibach (FNG) todas as produções são da forma
Formas normais Em muitas aplicações, é útil que as GIC tenham regras de tipos especiais. Para tal é necessário que se possa transformar qualquer gramática numa equivalente (isto é que gere a mesma linguagem)
Álgebra Linear e Geometria Analítica Bacharelados e Engenharias Parte II Matrizes (continuação)
Álgebra Linear e Geometria Analítica Bacharelados e Engenharias Parte II Matrizes (continuação) Prof.a Tânia Preto Departamento Acadêmico de Matemática UTFPR - 2014 Importante Material desenvolvido a partir
O REI MALIGNO E A PRINCESA GENEROSA: SOBRE BASES NUMÉRICAS E CRITÉRIOS DE DIVISIBILIDADE
O REI MALIGNO E A PRINCESA GENEROSA: SOBRE BASES NUMÉRICAS E CRITÉRIOS DE DIVISIBILIDADE ANA PAULA CHAVES AND THIAGO PORTO 1. Introdução Os temas centrais deste texto - bases numéricas e critérios de divisibilidade
1. O que podemos dizer sobre a imagem da função. f : Z Z, f(x) = x 2 + x + 1?
1 Congruências e aritmética modular Vamos considerar alguns exemplos de problemas sobre números inteiros como motivação para o que se segue. 1. O que podemos dizer sobre a imagem da função f : Z Z, f(x)
Lógica Proposicional Parte 3
Lógica Proposicional Parte 3 Nesta aula, vamos mostrar como usar os conhecimentos sobre regras de inferência para descobrir (ou inferir) novas proposições a partir de proposições dadas. Ilustraremos esse
Aula prática 14. Expressão Lambda
Programação Funcional UFOP DECOM 2014.1 Aula prática 14 Expressão Lambda Sumário Resumo Expressões lambdas são funções anônimas que podem ser usadas como qualquer outro valor de primeira classe. Nesta
GABARITO. Prova 2 (points: 120/100; bonus: 18 ; time: 100 ) FMC1, (Turmas do Thanos) Regras: Boas provas! Gabarito 23/11/2016
FMC1, 2016.2 (Turmas do Thanos) Prova 2 (points: 120/100; bonus: 18 ; time: 100 ) Nome: Θάνος Gabarito 23/11/2016 Regras: I. Não vires esta página antes do começo da prova. II. Nenhuma consulta de qualquer
Se o símbolo inicial não fizer parte do conjunto de símbolos férteis, a linguagem gerada pela gramática é vazia.
Transformações em G.L.C Uma vez que existem métodos de análise, cada qual exigindo gramáticas com características específicas é importante que uma gramática possa ser transformada, porém, sem perder a
Bases Matemáticas. Relembrando: representação geométrica para os reais 2. Aula 8 Números Reais: módulo ou valor absoluto, raízes, intervalos
1 Bases Matemáticas Aula 8 Números Reais: módulo ou valor absoluto, raízes, intervalos Rodrigo Hausen 10 de outubro de 2012 v. 2012-10-15 1/34 Relembrando: representação geométrica para os reais 2 Uma
Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02
1 Objetivos da lista Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02 Esta lista de exercícios tem como objetivo introduzir funções na linguagem C. Como
ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO
ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO 2. Linguagens Livres-do-Contexto Referência: SIPSER, M. Introdução à Teoria da Computação. 2ª edição, Ed. Thomson Prof. Marcelo S. Lauretto [email protected]
NÚMEROS INTEIROS. Álgebra Abstrata - Verão 2012
NÚMEROS INTEIROS PROF. FRANCISCO MEDEIROS Álgebra Abstrata - Verão 2012 Faremos, nessas notas, uma breve discussão sobre o conjunto dos números inteiros. O texto é basicamente a seção 3 do capítulo 1 de
Produtos de potências racionais. números primos.
MATEMÁTICA UNIVERSITÁRIA n o 4 Dezembro/2006 pp. 23 3 Produtos de potências racionais de números primos Mário B. Matos e Mário C. Matos INTRODUÇÃO Um dos conceitos mais simples é o de número natural e
EAD DETERMINANTES CONCEITO:
1 EAD DETERMINANTES CONCEITO: Dada uma Matriz Quadrada de ordem n, dizemos que Determinante de ordem n é um número associado a essa Matriz conforme determinadas leis. Representamos o Determinante de uma
Recursividade. Objetivos do módulo. O que é recursividade
Recursividade Objetivos do módulo Discutir o conceito de recursividade Mostrar exemplos de situações onde recursividade é importante Discutir a diferença entre recursividade e iteração O que é recursividade
Funções Recursivas. Prof.: Edson Holanda Teoria da computação - Diverio e Menezes
Funções Recursivas Prof.: Edson Holanda [email protected] Teoria da computação - Diverio e Menezes Tipos de Formalismos Operacional Define-se uma máquina abstrata, baseada em estados, em instruções
Conceitos Básicos. Vocabulário Cadeias Linguagens Expressões Regulares Problema X Linguagem
Conceitos Básicos Vocabulário Cadeias Linguagens Expressões Regulares Problema X Linguagem Alfabeto ou Vocabulário: Conjunto finito não vazio de símbolos. Símbolo é um elemento qualquer de um alfabeto.
Introdução à Teoria dos Números Notas de Aulas 3 Prof Carlos Alberto S Soares
Introdução à Teoria dos Números 2018 - Notas de Aulas 3 Prof Carlos Alberto S Soares 1 Números Primos e o Teorema Fundamental da Aritmética Em notas anteriores já definimos os números primos, isto é, números
Linguagens de Programação I. Introdução a Algoritmos e Lógica de Programação
Linguagens de Programação I Introdução a Algoritmos e Lógica de Programação 1 INTRODUÇÃO Que é um programa de computador? Um programa de computador é o produto resultante da atividade intelectual de um
Renato Martins Assunção
Análise Numérica Renato Martins Assunção DCC - UFMG 2012 Renato Martins Assunção (DCC - UFMG) Análise Numérica 2012 1 / 84 Equação linear Sistemas de equações lineares A equação 2x + 3y = 6 é chamada linear
