Introdução ao -calculus

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Lógica de Predicados e Representação de Conhecimento
Python: Funções Claudio Esperança.
Introdução à Programação Engenharia da Computação
Estruturas de Controle
Capítulo 8 A linguagem da Lógica de Predicados
Capítulo 7 Tableaux semânticos e resolução na Lógica Proposicional
Data: 10 a 12 de fevereiro de 2009 e
Pearson Education Slide 1. Pearson Education Slide 2 Capítulo 2 Criado por Frederick H. Colclough, Colorado Technical University Fluxo de Controle.
Elsa Carvalho 49 Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Capítulo 2 - Derivadas No final do capítulo 1, já definimos o coeficiente angular de uma curva y = f(x) no ponto onde x = x0. Chamamos esse limite, quando.
Derivadas Já definimos o coeficiente angular de uma curva y = f(x) no ponto onde x = x0. Chamamos esse limite, quando ele existia, de derivada de f em.
Nice Maria Americano da Costa
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
ÁLGEBRA BOOLEANA Prof. Wanderley.
Universidade Federal de São Carlos Introdução à Linguagem C Comandos.
Ivan Saraiva Silva Aula 1 - Álgebra Booleana
Programando com Alice Tim Margush Department of Computer Science University of Akron © 2006.
Introdução à Programação
BCC 101– Matemática Discreta
Introdução à Lógica de Programação (cont.)
Disciplina: AAM Profa. Ana Watanabe 03/13 vol.2
Linguagem PHP Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
FLG Análise Espacial e Geoprocessamento
02(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
01(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
05(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
04(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
7 Abstração Genérica Unidades genéricas e instanciação.
Introdução à Programação
00(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Prof. Msc. Raul Paradeda Aula 3 Fundamentos
Linguagem de 1ª ordem da teoria de conjuntos
Revisão da Linguagem C.
INTRODUÇÃO À PROGRAMAÇÃO
A Lógica das Sentenças Abertas Profa. Ana Florencia Aula 9
Conceitos Básicos.
Semana 03: Comandos de desvio de fluxo. Expressões lógicas.
Análise Semântica e Representação Intermédia
Informática Teórica Engenharia da Computação
Funções e suas propriedades
FTIN Formação Técnica em Informática
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC
Gramáticas Livres de Contexto
Entendendo as definições de classe
Conceitos de Lógica Digital
Semana 03 Comandos de desvio de fluxo. Expressões lógicas.
O Portal do Estudante de Computação
Conjuntos (continuação)
Bags n Servem para armazenar a repetição de elementos n Tal qual conjuntos, a ordem dos elementos não importa n Por isso, também recebem a designação de.
Expressões e Instrução de Atribuição
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Estrutura de Decisão e Repetição
Paradigmas de Programação - prof Gláucya Carreiro Boechat1 Elaborando um Programa Prof.: Gláucya Carreiro Boechat Universidade.
Sistemas Operacionais II O Shell Bash. Objetivos Conhecer a sintaxe dos comandos; Trabalhar com funções; Trabalhar com variáveis; Expressões aritméticas;
Wagner Santos C. de Jesus
1 O  -Cálculo & Linguagens Funcionais Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco - Recife - Brasil.
BCC101 Matemática Discreta I
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
Cálculo Lambda (l – Calculus)
Lambda Cálculo & Programação Funcional
Semântica de Linguagens de Programação
Cálculo Lâmbda (l – Calculus)
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
PARADIGMAS DE LINGUAGENS EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
1 Programação – JAVA Unidade 3 – Loops e Lógica Prof. Aparecido V. de Freitas Curso de Ciência da Computação.
Visual C# (parte 2) Prof. Igor Conrado Alves de Lima – Operadores, estruturas de decisão, vetores (arrays), e estruturas de.
Estrutura de Dados Prof. André Cypriano M. Costa
Transcrição da apresentação:

Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB 03 (c) 2007 Gustavo Motta

Sumário Expressões- sem variáveis livres Combinadores aritméticos, constantes & Cia. 03 (c) 2007 Gustavo Motta

Expressões- sem variáveis livres Expressões- com variáveis livres são dependentes do contexto Sentido (ou valor) depende de suas variáveis livres Usar uma expressão- num certo contexto significa usá-la como subexpressão em outra expressão x.(y)x usada no contexto ((x.y.hole)E)F resulta em ((x.y.x.(y)x)E)F  x.(F)x Note que a ocorrência livre de y foi capturada pelo contexto onde a subexpressão foi empregada Um contexto é uma expressão- com um ou mais holes (lacunas) 03 (c) 2007 Gustavo Motta

Expressões- sem variáveis livres Note a diferença entre usar uma expressão- E num contexto C e a substituição de hole por E, com hole sendo variável livre em C ((hole.C)E  [E / hole]C Nesse caso, as varáveis livres não são capturadas Variáveis livres  variáveis globais Variáveis livres numa expressão- correspondem a variáveis globais usadas num bloco aninhado ou no corpo de um procedimento numa linguagem de programação convencional Variáveis amarradas correspondem a parâmetros formais ou a variáveis locais 03 (c) 2007 Gustavo Motta

Expressões- sem variáveis livres Expressões- sem variáveis livres são independentes do contexto Comportam-se da mesma forma em qualquer contexto Similares a símbolos constantes A expressão- x.x representa a transformação de identidade em qualquer contexto Combinadores Definição - Expressões- sem variáveis livres são chamadas de expressões- fechadas ou de combinadores 03 (c) 2007 Gustavo Motta

Expressões- sem variáveis livres Usados para “combinar” funções na formação de novas funções Exemplos Combinador identidade - I I é considerado um símbolo constante (ou palavra reservada) e não uma variável Representa uma classe de expressões- -congruentes Definido como I  x.x 03 (c) 2007 Gustavo Motta

Expressões- sem variáveis livres Exemplos Combinador composição - compose Define a composição de duas funções f e g compose  f.g.x.(f)(g)x Tratamento de símbolos para combinadores (1) Abreviação para expressões- (2) Considerá-los atômicos e introduzir regras de redução específicas (I)E  E (((compose)F)G)E  (F)(G)E 03 (c) 2007 Gustavo Motta

Expressões- sem variáveis livres Exemplos Combinadores booleanos true  x.y.x false  x.y.y Regras de redução ((true)P)Q  P ((false)P)Q  Q Seleciona uma de duas alternativas 03 (c) 2007 Gustavo Motta

Expressões- sem variáveis livres Combinadores booleanos A expressão condicional If C then P else Q toma a forma ((C)P)Q na notação , com P e Q denotando expressões- arbitrárias e C sendo redutível a x.y.x ou a x.y.y Representada pelo combinador c.p.q.((c)p)q Lembrem-se que o lambda-calculus é livre de tipos 03 (c) 2007 Gustavo Motta

Combinadores aritméticos, constantes & Cia. Observações Valores verdade e operadores booleanos padrão podem ser representados por combinadores específicos Comportam-se da mesma maneira em diferentes contextos Em princípio, não há diferença entre um valor constante como true ou false e uma função bem definida como and De fato, toda função bem definida pode ser considerada uma entidade constante Mesmo os valores verdade são representados por funções Quase tudo pode ser representado dessa maneira 03 (c) 2007 Gustavo Motta

Combinadores aritméticos, constantes & Cia. Representação dos números naturais Numerais de Church 0  f.x.x 1  f.x.(f)x 2  f.x.(f)(f)x 3  f.x.(f)(f)(f)x Em geral, o combinador representando o n-ésimo número realiza n iterações do primeiro argumento sobre o segundo 03 (c) 2007 Gustavo Motta

Combinadores aritméticos, constantes & Cia. Representação dos números naturais Operadores aritméticos succ  n.f.x.(f)((n)f)x (n.f.x.(f)((n)f)x)f.x.(f)x f.x.(f)((f.x.(f)x)f)x f.x.(f)(x.(f)x)x f.x.(f)(f)x  2 Notem que o nome das variáveis bounded não é importante 03 (c) 2007 Gustavo Motta

Combinadores aritméticos, constantes & Cia. Representação dos números naturais Operadores aritméticos +  m.n.f.x.((m)f)((n)f)x ((m.n.f.x.((m)f)((n)f)x)f.x.(f)(f)x)f.x.(f)(f)(f)x (n.f.x.((f.x.(f)(f)x)f)((n)f)x)f.x.(f)(f)(f)x f.x.((f.x.(f)(f)x)f)((f.x.(f)(f)(f)x)f)x f.x.(x.(f)(f)x)(x.(f)(f)(f)x)x f.x.(x.(f)(f)x)(f)(f)(f)x f.x.(f)(f)(f)(f)(f)x  5 03 (c) 2007 Gustavo Motta

Combinadores aritméticos, constantes & Cia. Representação dos números naturais Operadores aritméticos *  m.n.f.(m)(n)f Teste de zero zero  n.((n)(true)false)true (n.((n)(true)false)true)f.x.(f)x ((f.x.(f)x)(true)false)true (x.((true)false)x)true ((true)false)true  false 03 (c) 2007 Gustavo Motta

Combinadores aritméticos, constantes & Cia. Representação dos números naturais Operadores aritméticos A representação da operação predecessor, que resulta em n – 1 para n > 0 e 0 para n = 0 é engenhosa Representar pares do tipo [n, n – 1] na notação-, onde um par qualquer [a, b] é dado por z.((z)a)b tendo as seguintes propriedades (z.((z)a)b)true  a (z.((z)a)b)false  b 03 (c) 2007 Gustavo Motta

Combinadores aritméticos, constantes & Cia. Representação dos números naturais Operadores aritméticos Define-se então a função next, para obter [n + 1, n] a partir de [n, n – 1], que corresponde à seguinte expressão- next  p.z.((z)(succ)(p)true)(p)true Aplicando esse operador a partir do par z.((z)0)0, temos ((n)p.z.((z)(succ)(p)true)(p)true)z.((z)0)0 Agora, para se ter a função predecessor, basta selecionar o segundo elemento do par ordenado resultante pred  n.(((n)p.z.((z)(succ)(p)true)(p)true)z.((z)0)0)false 03 (c) 2007 Gustavo Motta

Bibliografia Revesz, G. E. Lambda-Calculus, Combinators, and Functional Programming. Cambridge University Press, 1988. 03 (c) 2007 Gustavo Motta