Funções
Uma função f do conjunto A para o conjunto B é um mapeamento (ou uma associação) de cada elemento a A para um único elemento b B.
A é chamado de domínio da função f B é chamado de contradomínio da função f
Notação para indicar que f é uma função de A em B (para quaisquer conjuntos A e B):
f : A → B
Notações para representar que o elemento a, do domínio, é mapeado no elemento b, do contradomínio:
f(a) = b ou a f b. b é chamado de imagem de a
a é chamado de pré-imagem de b
Tem se tornado comum, também, dizer que a função recebe a entrada a e retorna a saída b. Essa nomenclatura tem a vanta-gem de ser familiar para nós, da Computação, quando falamos de algoritmos. Falaremos dessa associação mais adiante.
Veja que, pela definição, uma função é obrigada a definir saídas (elementos do contra-domínio) para todos as possíveis entradas (elementos do contra-domínio), mas o contrário não é garantido – pode haver elementos do contradomínio que nunca são dados como saí-das. O conjunto dos elementos do contradomínio B que é dado como saída é chamado de conjunto imagem da função f e é representado como f[A]. Seguem duas definições equivalentes:
f[A] = { f(a) | a A }
= { b B | existe algum aA tal que f(a) = b }
1. Representando uma Função
Sendo informal, podemos dizer que uma função pode ser definida “internamente” de várias maneiras. Para ser função, o importante é meramente que, “externamente”, ela seja capaz de levar uma entrada (no domínio) em uma saída (no contradomínio), e isso pode ser feito de várias formas. Nesta seção, apresentamos várias formas diferentes de ser definir uma função, porém, sem esgotar as possibilidades.
1) Por uma fórmula algébrica finita (forma fechada) Exemplo:
f : Z Z
f(x) = x2
2) Por meio de um gráfico
Exemplo: função g que dá o número de acessos a um site ao longo de 1 dia.
g : Hora Z
3) Por diagramas de Venn Exemplo: função h: X Y
4) Por meio de uma tabela
Exemplo: função i das notas de uma turma
i : {Ken,Kay,Nat,Frank} {0.0, 0.5, 1.0, 1.5, …, 10.0}
x i(x)
Ken 2,5
Kay 7,0
Nat 5,0
5) Listando caso a caso Exemplo:
j : {a,b,c,d} Z, onde:
j(a) = 2, j(b) = 3, j(c) = 5, j(d) = 7
6) Com uma descrição textual (precisa e não-ambígua) Exemplo:
k : Z Z
k(n) dá a quantidade de números primos menores que n
7) Com um algoritmo em uma linguagem de programação qualquer Exemplo:
mdc : ZxZ Z
8) Com algoritmos definidos com outros formalismos, tais como: máquinas de Turing, expressão de -cálculo e autômatos
Vocês verão um pouco sobre isso em Teoria da Computação...
Em suma, o que queremos mostrar é que uma função não é uma fórmula nem é um grá-fico – ela é um mapeamento, definido de qualquer forma. Em especial, queremos desta-car que “algoritmo”, em essência, pode ser definido como “uma forma de se calcular (computar) as saídas de uma função, a partir de uma entrada qualquer”. Assim, todo algoritmo, em essência, define uma função.
Observação: Em linguagens de programação também existe algo chamado de “função”. Porém, nem sempre elas se comportam como funções matemáticas.
Discussão (em sala): Quando uma “função de Python” ou uma “função de C” é verdadeiramente uma função matemática? E quando não é?
def mdc(a, b): if (b == 0): return a else:
2. Propriedades das Funções
Agora, veremos alguns tipos especiais de funções, que apresentam propriedades especi-ais. Em todas as definições, vamos assumir que estamos tratando de uma função f: A → B, com A (domínio) e B (contradomínio) quaisquer.
1) f é injetiva (ou injetora) sse:
para todos a, b A, é verdade que ( a≠ b ) ( f(a) ≠ f(b) )
Ou seja, f sempre mapeia entradas distintas (elementos de A) em saídas distintas (elementos de B)
Exemplo de função injetiva de X em Y:
2) f é sobrejetiva (ou sobrejetora) sse:
para todo b B, existe um a A, tal que f(a)=b
Todos os elementos do contradomínio B são usados como saídas (para cada um de-les, existe ao menos uma entrada que leva nele).
Ou seja, o conjunto imagem da função é igual ao contradomínio (f[A] = B).
Exemplo de função sobrejetiva de X em Y:
3) f é uma função bijetiva (ou uma função bijetora, ou uma bijeção, ou uma corres-pondência um-para-um) sse:
f é injetiva e f é sobrejetiva
3. Provas de Propriedades das Funções
Mostramos a seguir como provar se uma função dada tem ou não cada uma das duas propriedades principais vistas na seção anterior: a injetividade e a sobrejetividade (a bijetividade é definida a partir dessas duas).
Ressaltamos que o que veremos não são métodos de prova novos, mas sim aplicações dos métodos já vistos, associados às definições dessas propriedades.
Em todas as explicações abaixo, estamos assumindo uma função arbitrária f: A → B.
Provando Injetividade
Pela definição da seção anterior, a afirmação “f é injetiva” equivale à esta afirmação: para todos a, b A, temos: ( a≠ b ) ( f(a) ≠ f(b) ). Para provar que f é ou não inje-tiva, vamos nos ater a esta segunda afirmação.
Ou seja, para provar que f é injetiva, vamos provar a implicação acima. Neste caso, é recomendado provar pela contrapositiva assim (mas não é a única forma):
Assumir: f(a) = f(b) , e assumindo que a e b são elementos quaisquer de A Concluir: a=b
Exemplo: provar que a função g : Z Z com g(x) = 2x+1 é injetiva Prova pela contrapositiva.
Sejam a e b elementos de Z quaisquer, tais que g(a) = g(b). Vamos desenvolver
esta equação:
g(a) = g(b)
2a+1 = 2b+1 [pela def. de g]
2a = 2b
a=b (Provado).
Se for uma função de R em R, uma dica para achar os valores é esta: olhar o
gráfico da função e encontrar alguma reta paralela ao eixo das abscissas (ou seja, uma reta horizontal) que toque o gráfico da função em dois pontos.
Exemplo: provar que a função i : Z Z com i(x) = x2 não é injetiva
Um contra-exemplo é o par de valores do domínio: +1 e -1.
i(1) = 12 = 1
i(-1) = (-1)2 = 1
Vemos que 1 -1, mas i(1) = i(-1), o que nega a definição de “injetiva”.
Provando Sobrejetividade
Pela definição dada antes, a afirmação “f é sobrejetiva” equivale à afirmação para todo
bB, existe um aA tal que f(a)=b. Assim, vamos nos ater a esta segunda afirmação nas demonstrações.
Assim, provar que f é sobrejetiva requer uma prova universal em que, internamente, é feita uma prova existencial, assim:
Primeiro, inicie uma prova universal:
“Seja bB qualquer.”
Depois, faça uma prova existencial de que existe um aA tal que f(a)=b.
“Seja a = <escolha uma expressão >. Justifique que o valor de a
perten-ce ao domínio A.
Assim, f(a) = f(<expressão escolhida>) = <desenvolva>
= b (Provado)”.
Para achar a expressão citada, resolva (separadamente, no rascunho) a equação
f(a)=b e use o valor de a encontrado.
Exemplo: provar que a função h : Z Z com h(x) = x+1 é sobrejetiva
Seja b um inteiro qualquer. (Vamos mostrar que existe um elemento a do
domínio Z tal que h(a)=b). Seja a definido assim:
a = b-1
h(a) = a+1
= (b-1)+1
= b
(Provado).
Provar que f não é sobrejetiva requer provar a negação da definição, ou seja, provar que “existe um bB tal que não existe aA tal que f(a)=b”.
Primeiro, temos uma prova existencial: de alguma forma, você precisa encontrar
um valor bB para o qual a equação f(a) = b não tenha solução com aA. (Esse b é um tipo de contra-exemplo).
Se for uma função de R em R, uma dica para achar o valor b: olhar o gráfico e encontrar alguma reta paralela ao eixo das abscissas (horizontal) que não toque em nenhum ponto da função.
Depois, é preciso provar que não existe aA que satisfaça a equação f(a)=b. Isso
pode requerer uma prova por redução ao absurdo (dentro da prova existencial).
Exemplo: provar que a função j : Z Z com j(x) = 2x+1 não é sobrejetiva.
Um contra-exemplo é o valor b=4 (poderia ser outro valor par). Vamos
pro-var que não existe valor inteiro a tal que g(a) = 4 a seguir:
Por redução ao absurdo, vamos assumir que existe a inteiro que satisfaz
j(a)=4. Então, usando a definição de g e desenvolvendo, obteríamos:
2a + 1 = 4
2a = 3
a = 3/2
Assim, a não seria inteiro, contrariando o que assumimos. (Logo, provamos
que não existe inteiro a tal que j(a) = 4. Isso prova que o contra-exemplo
dado está correto).
(Provado).
4. Seqüências
Em essência, uma seqüência é meramente uma tupla – uma coleção com ordem entre os elementos e que permite repetição. Porém, ela recebe esse nome, geralmente, quando é tratada de forma funcional (similar a uma função), e, em especial, quando é infinita. Vamos considerar esses conceitos como idênticos aqui.
Mas como tratar uma tupla como uma função? Ela mapeia o que em que?
Vamos ilustrar com a 4-tupla (a, b, b, d). Veja que ela guarda quatro valores em quatro posições fixas:
Na posição 1, tem o valor a
Na posição 2, tem o valor b
Na posição 3, tem o valor b
Na posição 4, tem o valor d
Então, esta tupla pode ser vista como uma função cujo domínio é conjunto das posições, que é {1, 2, 3, 4}, e cujo contradomínio é o nosso alfabeto de letras minúsculas {a, b, c, d, ..., z} (apesar de a imagem ser apenas {a,b,d}). Poderíamos redefinir esta tupla como
uma função g assim:
Seja g : {1,2,3,4} {a,b,c,...,z}, onde:
g(1) = a
g(2) = b
g(3) = b
g(4) = d
Porém essa notação é muito trabalhosa. Podemos adotar uma notação mista das nota-ções de tupla e de função assim:
Ao invés de usarmos a notação g(m) usaremos gm, que será usada para referir-se ao valor da seqüência na posição m. Chamamos isso de um termo da seqüência. Podemos representar a seqüência inteira com a notação de tupla, onde os termos
O identificador (nome) da função ficará entre parênteses e com uma posição
ge-nérica subscrita. Ou seja, usaremos (gn) ao invés de g.
Não precisamos informar o domínio, mas apenas o tamanho n da seqüência e o
contradomínio.
Portanto, a tupla inicial será tratada assim:
Seja (gn) uma seqüência de tamanho 4 do conjunto {a,b,c,...,z}, tal que:
(gn) = (a,b,b,d).
Subentende-se, da definição acima, que: g1=a, g2=b, g3=b e g4=d.
No caso de seqüências infinitas, é possível dar uma “lei de formação” para um termo qualquer da seqüência, tal como fazemos com funções1. Segue um exemplo:
Seja (an) uma seqüência infinita de Z, onde an = n2.
Esta regra serve para calcular um termo qualquer. Assim, temos que a1=12,
a2=22, a3=32 e a4=42, etc. Veja que esta é a seqüência dos quadrados perfeitos
positivos: (an) = (1, 4, 9, 16, 25, ...).
Outros exemplos de seqüências:
A seqüência finita (un) das iniciais da nossa universidade:
(un) = (U, F, R, P, E)
A (famosa) seqüência infinita de Fibonnacci (Fn):
(Fn) = (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...)
Uma seqüência (bn) que lista todos os inteiros (!):
(bn) = (0, 1, -1, 2, -2, 3, -3, 4, -4, ...)
Muitas outras seqüências numéricas estão catalogadas no site: http://oeis.org/
4.1 Seqüências
Estruturas de Dados (Extra)
As estruturas de dados tupla e lista de Python e também os arrays de C podem ser, to-dos, vistos como sequências/tuplas matemáticas. No caso, uma expressão “x[n]” nessas linguagens é análoga à notação matemática xn. Nessas linguagens, as posições começam
em 0 (e não em 1), mas essa possibilidade também existe nas seqüências matemáticas – elas podem começar de qualquer natural k (não só 0 e 1).
Também as strings dessas linguagens podem ser vistas como sequências/tuplas – elas são tuplas de carateres. Na Matemática, isso também pode ser chamado de cadeia – uma sequência finita de símbolos. (Em inglês, cadeia é chamada exatamente de string).
4.2 Séries e Somatórios
A soma dos termos de uma seqüência é chamada de série. Uma notação importante para representar uma série é a notação de somatório, com a letra grega sigma . Nesta nota-ção, a soma dos k primeiros termos de uma seqüência (an) é representada assim:
k
i i
a
1
= a1 + a2 + a3 + ... + ak
Também é possível representar a soma do termo n até o termo m assim:
m
n i
i
a = an + an+1 + an+2 + ... + am
Já a soma dos termos de uma seqüência infinita (ou seja, uma série infinita) pode ser representada assim:
1
i i
a = a1 + a2 + a3 + a4 + ...
"Por que gastais o dinheiro naquilo que não é pão?
E o produto do vosso trabalho naquilo que não pode satisfazer?
Ouvi-me atentamente, e comei o que é bom."