• Nenhum resultado encontrado

Matemática Discreta para Ciência da Computação

N/A
N/A
Protected

Academic year: 2021

Share "Matemática Discreta para Ciência da Computação"

Copied!
116
0
0

Texto

(1)

Matemática Discreta para

Ciência da Computação

P. Blauth Menezes

blauth@inf.ufrgs.br

Departamento de Informática Teórica

Instituto de Informática / UFRGS

(2)

Matemática Discreta para Ciência da Computação

P. Blauth Menezes

1 Introdução e Conceitos Básicos

2 Lógica e Técnicas de Demonstração

3 Álgebra de Conjuntos

4 Relações

5 Funções Parciais e Totais

6 Endorrelações, Ordenação e Equivalência

7 Cardinalidade de Conjuntos

8 Indução e Recursão

(3)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(4)

5 Funções Parciais e Totais

Função Parcial

• simplesmente relação funcional

Função Total ou Função

(5)

Portanto:

função parcial é relação

função é função parcial (portanto, é relação) • nem toda relação é função parcial

∗ basta considerar uma relação não-funcional

nem toda função parcial é uma função

∗ basta considerar uma função parcial não-total

Funções Totais

Funções Parciais

(6)

Estudo das funções

• destacado do estudo das relações

• importante para a Matemática e Computação e Informática

• maioria das abordagens matemáticas

∗ centradas no conceito de função total

• em Computação e Informática

∗ função parcial é tão ou mais importante que função

• computablidade

∗ noção mais fundamental em CC

(7)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.1.1 Definição e Introdução

5.1.2 Função Parcial Dual

5.1.3 Composição de Funções Parciais

5.1.3 Restrição

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.5 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(8)

5.1 Função Parcial

5.1.1 Definição e Introdução

Def: Função Parcial

Função Parcial é uma relação funcional f ⊆ A × B

Portanto, função parcial é relação na qual

• cada elemento do domínio está relacionado com, no máximo, um

(9)

Notação

• função parcial f ⊆ A × B

f: A B

• ou, quando é claro que se trata de uma função parcial

f: A → B

• 〈a, b〉 ∈ f

f(a) = b ou f〈a〉 = b

Termos alternativos para função parcial

• operação parcial

• mapeamento parcial • transformação parcial

(10)

Exemplos de relações funcionais

• são exemplos de funções parciais

Exp:

Função Parcial

A = { a }, B = { a, b } e C = { 0, 1, 2 } • ∅: A → B ✔ • { 〈0, a〉, 〈1, b〉 }: C → B ✔ • =: A → B ✔ • x2: ZZ onde x2 = { 〈x, y〉 ∈ Z2  y = x2 } ✔ • A × B: A → B ✘ • <: C → C ✘

(11)

Função parcial como matriz ou grafo (endorrelação)

• matriz: no maximo um valor verdadeiro em cada linha

• grafo: no máximo uma aresta partindo de cada nodo

Exp:

Função Parcial

Adição nos naturais. Operação ad: N × NN tal que

ad〈a, b〉 = a + b

• conjunto imagem?

Divisão nos reais. Operação div: R × RR tal que:

div〈x, y〉 = x/y

(12)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.1.1 Definição e Introdução

5.1.2 Função Parcial Dual

5.1.3 Composição de Funções Parciais

5.1.3 Restrição

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

(13)

5.1.2 Função Parcial Dual

Relação dual de uma função parcial

não necessariamente é uma função parcial (por quê?)

Exp: Relação Dual de Função Parcial

A = { 0, 1, 2 } e endofunção parcial f: A → A tq f = { 〈0, 2〉, 〈1, 2〉 }

fop = { 〈2, 0〉, 〈2, 1〉 }

(14)

Lembre-se: conceito dual de funcional é injetora

Dual de função parcial é função parcial?

• deve ser injetora

Ou seja

• relação dual de uma relação funcional e injetora • é relação injetora e funcional

Conclusão

(15)

Exp: Relação Dual de Função Parcial

A = { a }, B = { a, b } e C = { 0, 1, 2 }. Duais são funções parciais?

• ∅: A → B ✔

• =: A → B ✔

• { 〈0, a〉, 〈1, b〉 }: C → B ✔

(16)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.1.1 Definição e Introdução

5.1.2 Função Parcial Dual

5.1.3 Composição de Funções Parciais

5.1.3 Restrição

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

(17)

5.1.3 Composição de Funções Parciais

Composição de relações é relação

• por definição

Composição de funções parciais é função parcial?

• basta mostrar que a composição de funcionais é funcional

Teorema: Composição de Funcionais é Funcional

R: A →B e S: B → C relações funcionais

(18)

Prova:

Composição de Funcionais é Funcional

Suponha R: A → B e S: B → C relações funcionais

Então S o R: A C é relação e basta provar que

(∀a ∈A)(∀c1 ∈C)(∀c2 ∈C)(a (S o R) c1 a (S o R) c2 c1 = c2)

Suponha a ∈A, c1 ∈C e c2 ∈C tais que a (S o R) c1 a (S o R) c2

Então (prova direta)

• a (S o R) c1 a (S o R) c2 definição de composição

• (∃b1 ∈B)(∃b2 ∈ B)(a R b1 ∧ a R b2 ∧ b1 S c1 ∧ b2 S c2) ⇒ R é func.

• b1 = b2 ∧ b1 S c1 ∧ b2 S c2 ⇒ S é funcional

(19)

Exp: Composição de Relações

• f = { 〈a, 1〉, 〈c, 4〉, 〈d, 5〉 } • g = { 〈1, x〉, 〈2, y〉, 〈4, y〉, 〈5, z〉 } • g o f = { a, x, c, z, d, z }

1

2

3

4

5

x

y

z

a

b

c

d

f

g

g

f

A

B

C

(20)

Obs: Dualidade e Prova de Teoremas

Fato extremamente importante

• todo o resultado válido

• tambem é válido para o seu conceito dual

• prova é praticamente a mesma, respeitando as noções duais

Não é tão evidente na Teoria dos Conjuntos

• amplamente explorado na Teoria das Categorias

a noção de dualidade divide o trabalho pela metade • incluindo definições e provas

(21)

Por dualidade

• composição de relações injetoras é uma relação injetora

Teorema: Composição de Injetoras é Injetora

R: A → B e S: B → C relações injetoras

Então S o R: A C é uma relação injetora

Prova

(22)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.1.1 Definição e Introdução

5.1.2 Função Parcial Dual

5.1.3 Composição de Funções Parciais

5.1.3 Restrição

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

(23)

5.1.4 Restrição

Para uma função parcial

• restrição, a partir de um subconjunto de seu domínio

Operação (sobre funções)

• importante quando aplicada sobre sistemas

(24)

Def: Restrição do Domínio de uma Função Parcial

f: A → B função parcial e A0 tal que A0 ⊆ A

Restrição do Domínio de f relativamente a A0

f\A0: A0 →B

é tal que

(25)

Exp: Restrição do Domínio de uma Função Parcial

A = { 1, 2, 3, 4, 5 }, B = { x, y, z } e a função parcial f: A → B

Para A0 = { 3, 4, 5 }, a função parcial f\A0: A0 →B

x

y

z

f

A

B

1

2

3

4

5

A

0

x

y

z

f\A

0

A

0

B

3

4

5

(26)

Exp: Restrição do Domínio de uma Função Parcial

A = { a }, B = { a, b } e C = { 0, 1, 2 } ∅: A → B ∅\A = ∅: A → B R = { 〈0, a〉, 〈1, b〉 }: C → B R\{ 0 } = { 〈0, a〉 }: { 0 } → B idB = { 〈a, a〉, 〈b, b〉 }: B → B idB\A = { 〈a, a〉 }: A →B x2 = { 〈x, y〉 ∈ Z2  y = x2 }: ZZ x2\N = { 〈x, y〉 ∈ N × Z  y = x2 }

Restrição introduzida foi sobre o domínio

(27)

5 –

Funções

5.1 Função Parcial

5.2 Autômato Finito

5.2.1 Modelo e Exemplo

5.2.2 Autômato Finito como Função Parcial

5.2.3 Restrição de um Autômato Finito

5.2.3 Leitura Complementar

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(28)

5.2 Autômato Finito

Autômato Finito

• sistema de estados finitos

• modelo computacional do tipo seqüencial muito comum

• usado em diversos estudos

∗ Linguagens Formais, Compiladores

∗ Semântica Formal, Teoria da Concorrência, …

• conceito de autômato finito introduzido (via exemplos)

∗ baseado em Linguagens Formais

(29)

5 –

Funções

5.1 Função Parcial

5.2 Autômato Finito

5.2.1 Modelo e Exemplo

5.2.2 Autômato Finito como Função Parcial

5.2.3 Restrição de um Autômato Finito

5.2.3 Leitura Complementar

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(30)

5.2.1 Modelo e Exemplo

Autômato Finito: máquina composta por

• Fita

• Unidade de Controle • Programa

♦ Fita: dispositivo de entrada

• contém a informação a ser processada

• finita, dividida em células: cada célula armazena um símbolo

• símbolos: pertencem a um alfabeto de entrada

(31)

♦ Unidade de Controle: reflete o estado corrente

• Estados

∗ número de estados: finito e predefinido

• Unidade de Leitura

∗ inicialmente: cabeça na célula mais à esquerda da fita

∗ lê o símbolo de uma célula de cada vez

∗ após a leitura, move a cabeça uma célula para a direita

a a b c c b a a

(32)

♦ Programa:

função

parcial

• comanda as leituras

• define o estado da máquina

∗ dependendo do estado corrente e símbolo lido ∗ determina o novo estado

(33)

Exp: Autômato:

aa

ou

bb

como subpalavra

q0 q1 q2 a b b a a,b a b qf

• nodos: estados; q0 - estado inicial; qf - estado final

• arcos: transições ou computações atômicas

(34)

Exp: Autômato:

aa

ou

bb

como subpalavra

Linguagens Formais: o autômato pára (normalmente) • quando processar toda a entrada

aceita a entrada se parar em um estado final

q0 q1 q2 a b b a a b qf q q1 q0 a b b a q2

(35)

6 –

Funções

5.1 Função Parcial

5.2 Autômato Finito

5.2.1 Modelo e Exemplo

5.2.2 Autômato Finito como Função Parcial

5.2.3 Restrição de um Autômato Finito

5.2.3 Leitura Complementar

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(36)

5.2.2 Autômato Finito como Função Parcial

q0 q1 q2 a b b a a,b a b qf

Autômato finito definido como função parcial

• no estado q0, ao ler a, assume o estado q1 • no estado q0, ao ler b, assume o estado q2

(37)

Assim, em cada par ordenado da forma

〈〈

q, a

, p

• componentes

∗ primeira: o par 〈estado corrente, símbolo lido〉

∗ segunda: novo estado

• função parcial

δ: Q × Σ → Q

∗ Q - conjunto finito de estados Σ - alfabeto

(38)

Todos os pares que definem a função programa

• Total? Injetora? Sobrejetora?

q0 q1 q2 a b b a a,b a b qf

(39)

Exp: Autômato Finito como Interface Homem × Máquina

• δ: Q × Σ → Q total? injetora? sobrejetora?

∗ Q = { 〈q0, q1, q2, q3, q4 }

∗ Σ = { moeda, tecla_doce, tecla_cigarro, tecla_refri,

libera_doce, libera_cigarro, libera_refri }

moeda tecla doce tecla cigarro tecla refri q0 q1 q4 q3 q2 libera doce libera refri libera cigarro

(40)

Exp: Autômato Finito como Interface Homem × Máquina

moeda tecla doce tecla cigarro tecla refri q0 q1 q q q libera doce libera refri

(41)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.2.1 Modelo e Exemplo

5.2.2 Autômato Finito como Função Parcial

5.2.3 Restrição de um Autômato Finito

5.2.3 Leitura Complementar

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(42)

5.2.3 Restrição de um Autômato Finito

Cálculo de restrição de sistemas

• importante aplicação da operação de restrição de funções parciais

• reuso de software: importante no estudo de

∗ Engenharia de Software

(43)

Exp: Restrição de Autômato Finito × Reuso de Software

moeda tecla doce tecla cigarro tecla refri q0 q1 q4 q3 q2 libera doce libera refri libera cigarro moeda tecla doce tecla refri q0 q1 q4 q3 q2 libera doce libera refri

Desejada uma nova máquina, sem as funções relacionadas com

cigarros

δ\Q × Σ0: Q × Σ0 →Q

(44)

Obs: Manutenção de Software

Restrição de software pode facilmente ser implementada

• ferramenta automática de desenvolvimento/manutenção

• programador não altera o software

∗ realiza uma operação sobre este

∗ resultado desejado: garantido

Custo de manutenção de software

• freqüentemente é maior que o de desenvolvimento

• baixa confiabilidade de um software alterado (pelo programador)

(45)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.2.1 Modelo e Exemplo

5.2.2 Autômato Finito como Função Parcial

5.2.3 Restrição de um Autômato Finito

5.2.3 Leitura Complementar

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(46)

5.2.4 Leitura Complementar

Autômatos finitos: memória finita e predefinida

• limitações sérias para solucionar problemas

• linguagens regulares: reconhecidas por autômatos finitos

• hierarquia de linguagens: classe dos problemas mais simples

∗ Exemplo: parênteses balanceados – não existe autômato finito

Linguagens Recursivas

(existe um algoritmo capaz de responder "pertence" ou "não pertence")

Linguagens Enumeráveis Recursivamente (existe um algoritmo capaz de responder "pertence")

(47)

Linguagens Recursivas

(existe um algoritmo capaz de responder "pertence" ou "não pertence")

Linguagens Enumeráveis Recursivamente

(existe um algoritmo capaz de responder "pertence")

Universo de Todas as Linguagens

Linguagens Regulares

(existe um autômato finito capaz de responder "pertence" ou "não pertence")

Complexidade de algoritmos

• classe de algoritmos mais eficientes (tempo de processamento)

• qq autômato que solucione é igualmente eficiente

(48)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.3.1 Definição e Introdução

5.3.2 Exemplos Imortantes de Funções

5.3.3 Função Dual

5.3.4 Composição de Funções

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

(49)

5.3 Função Total

5.3.1 Definição e Introdução

Função (total)

• função parcial a qual é total

• herda conceitos e terminologias das relações e funções parciais

Def: Função, Aplicação

Aplicação, Função Total ou simplesmente Função

• função parcial f: A → B a qual é total

Portanto, uma função (total)

(50)

Exp: Função

A = { a }, B = { a, b } e C = { 0, 1, 2 }

• =: A → B ✔

• idB: B → B ✔

• x2: ZZ onde x2 = { 〈x, y〉 ∈ Z2  y = x2 } ✔

ad: N× NN tal que ad(a, b)= a + b ✔

• ∅: ∅ → ∅ ✔

• ∅: A → B ✘

• { 〈0, a〉, 〈1, b〉 }: C → B ✘

• A × B: A → B ✘

(51)

Função como matriz ou grafo (endorrelação)

• matriz: existe exatamente um valor verdadeiro em cada linha • grafo: existe exatamente uma aresta partindo de cada nodo

No contexto das funções

• injetora coincide com monomorfismo

∗ monomorfismo = injetora + total

• sobrejetora coincide com epimorfismo

∗ epimorfismo = sobrejetora + funcional

• isomorfismo também é denominado de função bijetora

∗ como isomorfismo = monomorfismo + epimorfismo

∗ então bijetora = injetora + sobrejetora

(52)

Exp: Função Injetora, Sobrejetora e Bijetora.

A = { a }, B = { a, b }, C = { 0, 1, 2 } e X um conjunto qualquer

• =: A → B injetora, não-sobrejetora

• idX: X → B bijetora

• x2: ZZ não-injetora, não-sobrejetora

ad: N × NN epimorfismo, não-monomorfismo

• ∅: ∅ → ∅ bijetora

(53)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.3.1 Definição e Introdução

5.3.2 Exemplos Importantes de Funções

5.3.3 Função Dual

5.3.4 Composição de Funções

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(54)

5.3.2 Exemplos Importantes de Funções

Importantes exemplos de funções

• Lembre: se ∑ é alfabeto, então ∑* é conj. das palavras sobre ∑

• Exemplo: para ∑ = { a, b }

∑* = { ε, a, b, aa, ab, ba, bb, aaa,… }

Função constante

(55)

Def: Função Constante

A e B conjuntos. Função constante em b ∈ B

constb: A → B

• para todo a ∈ A, constb(a)= b

Exp: Função Constante

A = { a } e ∑= { a, b } um alfabeto

• const5: RR const5 = { 〈x, 5〉 ∈ R2 }

• palavra_vazia: ∑* → ∑* palavra_vazia = { 〈w, ε〉 ∈ ∑* × ∑* }

• idA: A → A (toda função identidade é uma função constante?)

(56)

Função Concatenação

• especialmente importante para Computação e Informática

• operação binária, definida sobre uma linguagem

∗ associa a cada par de palavras uma palavra

(57)

Def: Função Concatenação

∑= { a, b } um alfabeto

conc: ∑* × ∑* → ∑*

• para todo 〈u, v〉 ∈ ∑* × ∑*, conc〈u, v〉 = u v

Exp: Concatenação

∑ = { a, b }

• concatenação das palavras aba e bbb de ∑* resulta em

(58)

Importantes funções induzidas por relações ou

operações sobre conjuntos

• função inclusão:

∗ reflete a continência de conjuntos

∗ toda continência induz um função inclusão e vice-versa

• função projeção

∗ reflete a relação entre o produto cartesiano e os conjuntos

originais

• função imersão

(59)

Def: Função Inclusão

A e B conjuntos tais que A ⊆ B

incA,B: A B ou simplesmente inc: A B

• para todo a ∈A, inc(a) = a

Toda função inclusão é injetora

(60)

Exp: Função Inclusão × Continência

Vogais = { a, e, i, o, u } e Letras = { a, b, c,…,z }

• claramente Vogais ⊆ Letras

incVogais,Letras: Vogais Letras

inc

Vogais

Letras

a

e

i

o

a

e

i

o

b

c

d

f

g

h

(61)

Exp: …Função Inclusão × Continência

As continências NZ, ZQ e QR induzem as funções inclusão

incN,Z: N Z incZ,Q: Z Q incQ,R: Q R

• Pode-se afirmar que existe a função de inclusão incN,R: N R?

• Generalizando: composição de funções inclusão é uma função

inclusão?

Já foi visto: reversabilidade do produto cartesiano

(62)

Def: Função Projeção

A e B conjuntos não-vazios e A × B o produto cartesiano π1: A × B → A e π2: A × B →B

• para todo 〈a, b〉 ∈ A × B

π1〈a, b〉 = a e π2〈a, b〉 = b

Recuperação dos operandos originais

• A = { π1〈a, b〉  〈a, b〉 ∈ A × B } primeiro operando

(63)

Exp: Função Projeção

A = { a, b } e B = { x, y } conjuntos e A × B o produto cartesiano

• funções projeção π1: A × B → A e π2: A × B →B

a,x

a,y

b,x

b,y

a b x y

A

B

A×B

π1 π2

(64)

Def: Função Imersão

A e B conjuntos e A + B a união disjunta

q1: A →A + B e q2: B → A + B

• para todo a ∈ A, tem-se que q1(a) = 〈a, 0〉

(65)

Exp: Função Imersão

A = { a, b } e B = { b, c } • A + B união disjunta • q1: A → A + B e q2: B → A + B funções de imersão

a,0

b,0

b,1

c,1

a b

A

B

b c

A+B

q1 q2

(66)

5 –

Funções

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.3.1 Definição e Introdução

5.3.2 Função Dual

5.3.3 Composição de Funções

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(67)

5.3.3 Função Dual

Relação dual de uma função

não necessariamente é uma função (por quê?)

Exp: Relação Dual de Função

f: { 0, 1, 2 } → { 0, 1 } tal que f = { 〈0, 0〉, 〈1, 1〉, 〈2, 0〉 }

fop = { 〈0, 0〉, 〈1, 1〉, 〈0, 2〉 } não-funcional

g: { 0, 1 } → { 0, 1, 2 } tal que g = { 〈0, 0〉, 〈1, 1〉 }

gop = { 〈0, 0〉, 〈1, 1〉 } não-total

• conjuntos correspondentes a g e gop são iguais • por que g é função e gop não é função?

(68)

Condições para que dual de função seja função?

• função = total + funcional

• lembre-se o dual de

∗ total é sobrejetora

∗ funcional é injetora

(69)

Exp: Relação Dual de Função

A = { a }, B = { a, b } e C = { 0, 1, 2 }. Duais são funções?

• idB: B → B ✔

• ∅: ∅ → ∅ ✔

• { 〈0, 1〉, 〈1, 2〉, 〈2, 0〉 }: C → C ✔

• =: A → B ✘

ad: N× NN tal que ad(a, b)= a + b ✘

• x2: ZZ onde x2 = { 〈x, y〉 ∈ Z2  y = x2 } ✘

• R = { 〈x, y〉  y = sen x } ✘

(70)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.3.1 Definição e Introdução

5.3.2 Função Dual

5.3.3 Composição de Funções

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(71)

5.3.4 Composição de Funções

Composição de funções parciais é função parcial

• já foi visto

Composição de funções é função?

• basta provar que a composições de relações totais é total

Teorema: Composição de Totais é Total

R: A → B e S: B → C relações totais

(72)

Prova:

Composição de Totais é Total

Suponha R: A → B e S: B → C relações totais

Então S o R: A C é relação

Basta provar que composição de totais é total

(∀a ∈A)(∃c ∈C)(a (S o R) c)

De fato, suponha a ∈ A. Então:

• a ∈ A ⇒ R é total

• (∃b ∈B)(a R b) ⇒ S é total

• (∃b ∈B)(∃c ∈C)(a R b ∧ b S c) ⇒ definição de composição

(73)

Exp: Composição de Funções

f: A → B, g: B → C e g o f: A C • f = { 〈a, 1〉, 〈b, 2〉, 〈c, 5〉, 〈d, 5〉 } • g = { 〈1, x〉, 〈2, y〉, 〈3, y〉, 〈4, y〉, 〈5, z〉 } • g o f = { a, x, b, y, c, z, d, z } 1 2 3 4 5 x y z a b c d f g g• f A B C x y z a b c d g• f A C

(74)

Por dualidade do Teorema da Composição de Totais

• composição de relações sobrejetoras é relação sobrejetora

• exercício: prova do corolário, “dualizando” a prova do teorema

Corolário: Composição de Sobrejetoras é Sobrejetora

R: A → B e S: B → C relações sobrejetoras

(75)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.4.1 Relação como Função

5.4.2 Multiconjunto

5.4.3 Seqüência

5.4.3 Conjunto Indexado

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(76)

5.4 Construções Matemáticas como

Funções

Funções são freqüentemente usadas para

• definir outras construções matemáticas

• exemplos

∗ seqüência ∗ multiconjunto

∗ conjunto indexado ∗ relação

(77)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.4.1 Relação como Função

5.4.2 Multiconjunto

5.4.3 Seqüência

5.4.3 Conjunto Indexado

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(78)

5.4.1 Relação como Função

Relação

R: A

B

R ⊆ A × B

Como todo subconjunto define uma função inclusão

• Qq relação pode ser vista como

incR,A×B: R A × B

• definição alternativa para relação

(79)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.4.1 Relação como Função

5.4.2 Multiconjunto

5.4.3 Seqüência

5.4.3 Conjunto Indexado

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(80)

5.4.2 Multiconjunto

Informalmente, um conjunto é

uma coleção, sem repetições e sem qualquer ordenação, de objetos denominados elementos

Formalmente

uma coleção de zero ou mais objetos distintos, chamados elementos do conjunto os quais não possuem qualquer ordem

associada

(81)

Pela definição de igualdade de conjuntos

{ 1, 2, 3 } = { 3, 3, 3, 2, 2, 1 }

Multiconjuntos

• em alguns momentos é necessário tratar conjuntos com repetições • exemplo

∗ união disjunta

∗ grafos

Na união disjunta, foi apresentada uma solução

• garante uma identidade única de cada elemento

• noção de “sobre-nome”

vantagem: reversabilidade da operação

(82)

Grafo

• toda endorrelação pode ser vista como um grafo • nem todo grafo é uma relação

∗ um motivo: grafos podem possuir arcos paralelos

(83)

Def: Multiconjunto

X conjunto.

Multiconjunto A de objetos de X é uma função

A: X → N

Notação

• como um conjunto, explicitando as repetições

(84)

Exp: Multiconjunto

{ 1, 2, 3 } { 3, 3, 3, 2, 2, 1 } 1 2 3 N 0 1 2 3 ... 1 2 3 N 0 1 2 3 ...

(85)

Exp: Grafo com Arcos Paralelos

A

B

G = { 〈A, B〉, 〈A, B〉, 〈B, B〉, 〈B, B〉, 〈B, B〉 } É uma relação?

(86)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.4.1 Relação como Função

5.4.2 Multiconjunto

5.4.3 Seqüência

5.4.3 Conjunto Indexado

5.5 Função de Hashing

(87)

5.4.3 Seqüência

Seqüência

• termo sendo usado intuitivamente

Quando da definição de produto cartesiano

• noção mais formal de seqüência (finita) ou de n-upla ordenada uma seqüência de n componentes, denominada de n-upla ordenada consiste de n objetos (não necessariamente distintos)

em uma ordem fixa

(88)

Def: Seqüência Infinita, Seqüência Finita

X conjunto

Seqüência Infinita de X é uma função

x: N - { 0 } → X

Seqüência Finita ou n-Upla Ordenada com n componentes de objetos de X é uma função

(89)

Exp: Palavra como Função

Σ = { a, b, c,…,z } alfabeto

Palavra casa como função (não-injetora)

casa: { 1, 2, 3, 4 } → Σ

Σ

1

2

3

4

a

b

c

d

...

s

z

e

(90)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.4.1 Relação como Função

5.4.2 Multiconjunto

5.4.3 Seqüência

5.4.3 Conjunto Indexado

5.5 Função de Hashing

(91)

5.4.4 Conjunto Indexado

uma variável do tipo arranjo é uma seqüência finita de variáveis, todas do mesmo tipo

Exemplo

dados = array[1..10] of char

Correspondente função

dados: { 1, 2, 3,…,10 } → X

• X é um conjunto de variáveis do tipo char

• função dados é

∗ Injetora?

(92)

dados: { 1, 2, 3,…,10 } → X

Injetora: Cada componente de um arranjo é distinta

dados: { 1, 2, 3,…,10 } X

• no exemplo

∗ dados(1) e dados(8) são variáveis do tipo char distintas

∗ correspondem às componentes dados[1] e dados[8]

Sobrejetora. Cada componente do arranjo é indexável por algum índice

dados: { 1, 2, 3,…,10 } X

(93)

Def: Conjunto Indexado

I e X conjuntos. Então, para uma função bijetora

f: I ↔ X

X é um Conjunto Indexado pelo conjunto I

Portanto

• qualquer função bijetora define um conjunto indexado ◆

Para

f: I

X

• I - conjunto de índices

• x ∈ X é genericamente denotado usando o seu índice i ∈ I

(94)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(95)

5.5 Função de Hashing

Armazenamento e recuperação informações

• Eficiente: espaço de armazenamento e tempo de recuperação

Armazenamento e recuperação pode ser em

• tabela: variável do tipo arranjo • arquivo de acesso direto: arquivo

∗ cada entrada/registro acessável diretamente

(96)

Solução simples e eficiente

• chave de identificação (exemplo, número de matrícula de alunos)

∗ índice da tabela

• se os valores para chave >> número provável de entradas?

∗ exemplo: cadastro de clientes de loja sendo CIC a chave

∗ espaço de armazenamento excessivamente grande e esparço

Para uma tabela com poucas entradas

• usando uma chave relativamente grande

(97)

Função para obter o endereço de instalação

• função de cálculo de endereço

• função de aleatorização • função de randomização • função de hashing

Função ideal

Injetora (por quê?)

No entanto, é difícil conseguir um monomorfismo

• funções de hashing geralmente geram colisões

∗ mesmo endereço a chaves diferentes

(98)

Exp: Função de

Hashing

Chave: entre 0 e 1000

Tabela: entradas indexadas de 1 a 23

Função de hashing relativamente simples e razoavelmente eficiente

f: { 0, 1,…,1000 } → { 1, 2,…,23 }

f(c) = (c mod 23) + 1

Exemplo de cálculos e colisões:

(99)

Como objetr uma função de hashing injetora?

• métodos de tratamento de colisões

• política para a escolha de uma entrada disponível • estudo das Estruturas de Dados

(100)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

(101)

5.6 Funções nas Linguagens de

Programação

Maioria das linguagens de programação

• manipula construções similares ou baseadas nas funções matemáticas

• Pascal: declaração function

∗ introduzida via exemplos

∗ permite implementar algumas funções matemáticas ∗ algumas diferenças: proxima secção

(102)

Exp: Função em Pascal:

Hashing

f(c) = (c mod 23) + 1

Declaração de dois tipos intervalos

type interv_0_1000 = 0..1000

interv_1_23 = 1..23

Declaração da função hashing f: { 0,1,…,1000 } → { 1,2,…,23 }

function hash(c: interv_0_1000): interv_1_23;

begin

hash := (c mod 23) + 1

end

(103)

function hash(c: interv_0_1000): interv_1_23;

• domínio da função

c do tipo interv_0_1000 ∗ parâmetro formal

• contra-domínio da função

hash, do tipo interv_1_23

∗ contem valor resultante do cálculo da chamada da função

if hash(766) = hash(237) then …

• exemplo de chamada da função

∗ valores 766 e 237: parâmetros atuais

(104)

Exp: Função em Pascal:

EXOR

Ou-Exclusivo denominado de EXOR (do inglês, exclusive or)

• usual em Computação e Informática

p q p EXOR q

V V F

V F V

F V V

(105)

EXOR pode ser reescrito, usando os conetivos usuais p EXOR q ⇔ (p ∧ ¬q) ∨ (¬p ∧ q)

Função em Pascal que implementa o conetivo EXOR

function exor(p, q: boolean): boolean;

begin

exor := (p and not q) or (not p and q)

end

(106)

Um problema das funções em Pascal

não permitem contra-domínio resultante de produto cartesiano • exemplo: equação polinomial do segundo grau

a x2 + b x + c = 0

• fórmula de Baskara: duas raízes

∗ função do tipo

baskara: R3 →R2

(107)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

5.7.1 Haskell

(108)

5.7 Linguagem de Programação

Funcional

Programação funcional

• estilo de programação baseada em

∗ funções

∗ composição de funções (constituindo um programa)

Programa: expressão funcional

• é avaliada

(109)

Linguagem de programação funcional “pura”

não possui variáveis, nem atribuições.

Linguagem de programação funcional é composta por

• tipos primitivos de dados

• constantes de cada tipo primitivo

• operações: funções sobre os tipos primitivos

(110)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

5.7.1 Haskell

(111)

5.7.1 Haskell

Haskell

• linguagem de programação funcional pura

• usa o conceito matemático de função

∗ mesmo valores do domínio (parâmetros atuais)

∗ resultam nos mesmos valores do codomínio (mesmas saídas)

• portanto

∗ resultado da aplicação de uma função

(112)

Exemplo em Haskell

x = 1

• função constante: sempre retorna o valor 1

f x = x + 1

• função f: para o parâmetro x, retorna o valor x + 1

Contra-exemplo em Pascal (

x

variável

integer

)

function contador: integer;

begin

(113)

Exemplo em Haskell:

a

x

2

+

b

x

+

c

=

0

baskara a b c =

let delta = b*b - 4*a*c

in ( (-b + sqrt(delta))/(2*a),

(-b - sqrt(delta))/(2*a) )

• para a, b e c, retorna o par ordenado correspondendo as raízes

let é usada para declarar delta

(114)

Redução (avaliação) para os valores

1

,

-5

e

6

baskara 1 -5 6

let delta = (-5)*(-5) - 4*1*6

in ( (5 + sqrt(delta))/(2*1),

(5 - sqrt(delta))/(2*1) )

let delta = 1

in ( (5 + sqrt(delta))/2,

(5 - sqrt(delta))/2 )

( (5 + 1)/2,

(115)

5 –

Funções Parciais e Totais

5.1 Função Parcial

5.2 Autômato Finito

5.3 Função Total

5.4 Construções Matemáticas como Funções

5.5 Função de Hashing

5.6 Funções nas Linguagens de Programação

5.7 Linguagem de Programação Funcional

5.7.1 Haskell

(116)

Matemática Discreta para

Ciência da Computação

P. Blauth Menezes

blauth@inf.ufrgs.br

Departamento de Informática Teórica

Instituto de Informática / UFRGS

Referências

Documentos relacionados

6.4 Sélection de deux Etats Membres habilités à désigner un représentant pour siéger au sous-groupe du Groupe de travail ad hoc sur la stratégie pharmaceutique révisée de

Suite à la session du Comité exécutif, le Directeur général de l'OMS a notifié officiellement l'OPS que les crédits alloués à cette Région au titre du budget programme de l'OMS

Le groupe de travail a procédé à une révision générale des différents thèmes envisagés dans la résolution pour ce qui est des activités réalisées par l’OMS dans le domaine

De noter les efforts déployés par l'Organisation pour chercher d'autres sources de soutien afin de renforcer les positions financières du Centre d'épidémiologie des Caraïbes (CAREC),

Afin de faire parvenir les informations les plus récentes à la Conférence sanitaire panaméricaine, le rapport révisé portant sur l’état de recouvrements des contributions au

Dans le but de fournir au public du continent une information fiable, pertinente, de caractère opportun et au moindre coût possible, le Secrétariat a entrepris de nombreuses

En dépit des grandes différences au sein de l'Amérique latine et des Caraïbes, la situation générale est caractérisée par des niveaux de consommation relativement stables,

Il est essentiel d'investir dans le capital humain pour une société qui vieillit. Le programme d'enseignement et de formation des professionnels des soins de santé primaires a