Capítulo 4

Complementos sobre Conjuntos

4.1 Famílias de Conjuntos

4.1.1 Sobre índices

O uso de índices é bastante comum em matemática, pois proporciona um modo eficaz e econômico de descrever uma determinada coleção de objetos, sem exigir uma grande variedade de símbolos. Por exemplo, poderíamos descrever um elenco de 20 objetos usando letras distintas

\[ a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t \]

mas seria muito melhor denotá-los com uma única letra (digamos \(a\)) e 20 índices

\[ a_{\scriptscriptstyle {1}}, a_{\scriptscriptstyle {2}}, ..., a_{\scriptscriptstyle {20}}. \]

A validade do uso de índices fica ainda mais evidente quando lidamos com conjuntos infinitos, como por exemplo uma sequência de números

\[ x_{\scriptscriptstyle {1}}, x_{\scriptscriptstyle {2}}, ..., x_{\scriptscriptstyle {n}}, ... \]

Nesse caso, seria impossível usar letras ou qualquer outro conjunto finito de símbolos para descrever tal sequência.

Os dois exemplos acima podem ser expressos de um modo mais sintético. Para isso, considere os conjuntos \(J=\{ 1,2,...,20\} \) e \(\mathbb {N}^{*}\). Então, podemos escrever:

\[ \{ a \]

}_J={a_1, a_2, ..., a_20}

\[ \]

e

\[ \{ x \]

}_N^*={x_1, x_2, ..., x_n, ...}

\[ \]

Em outras palavras, se \(A\) é um conjunto cujos elementos queremos indexar com um certo conjunto de índices \(J\), indicamos isso com a notação

\[ A=\{ a \]

}_J.

\[ \]

Uma característica importante desse processo de indexação é a seguinte: o uso de índices pode ser descrito através da linguagem de funções. De fato, indexar os elementos de um conjunto \(A\) através de um conjunto de índices \(J\) significa, simplesmente, escolher uma função \(f: J \to A\). Se quisermos indexar todos os elementos de \(A\), a função \(f\) deve ser sobrejetora. Se quisermos que elementos distintos de \(A\) tenham índices distintos, então a função \(f\) deve ser injetora. Se quisermos ambas as propriedades, a função deve ser bijetora.

Observação. Note que, adotando o ponto de vista acima, fica claro que todo conjunto pode ser usado, potencialmente, como um conjunto de índices. Para vermos um exemplo pouco usual de uso de índices, considere a função \(f:\mathbb {Z}\to \mathbb {N}\) dada por

\[ f(z)=\left\{ \begin{array}{lcc} 2z & \mathrm{se} & z \geq 0 \\ -2z-1 & \mathrm{se} & z \lt 0 \end{array} \right. \]

Desse modo, o conjunto \(\mathbb {Z}\) dos inteiros está sendo usado para indexar o conjunto \(\mathbb {N}\) dos números naturais, i.e.

\[ \mathbb {N}=\{ n \]

}_Z

\[ \]

onde \(n\)=f()\(\), para cada \(\imath\in \mathbb {Z}\).

Exercício. Usando a indexação acima de \(\mathbb {N}\) por \(\mathbb {Z}\), determine os elementos \(n_{\scriptscriptstyle {0}}\), \(n_{\scriptscriptstyle {1}}\), \(n_{\scriptscriptstyle {-1}}\), \(n_{\scriptscriptstyle {2}}\), \(n_{\scriptscriptstyle {-2}}\).

4.1.2 Operações com famílias de conjuntos

Nesta seção, lidaremos com famílias (ou classes) de conjuntos, isto é, conjuntos cujos elementos são, por sua vez, também conjuntos. Queremos estender a essa situação algumas operações entre conjuntos, assim como descrever algumas propriedades.

Seja dada uma família \(\mathcal{F}\) de conjuntos, i.e.

\[ \mathcal{F}=\{ A_{\imath }\} _{\imath\in J} \]

onde \(J\) é um qualquer conjunto de índices e cada \(A_{\imath }\) é um conjunto. A união dos conjuntos da família \(\mathcal{F}\) é o conjunto formado pelos elementos que pertencem a ao menos um dos conjuntos de \(\mathcal{F}\), i.e.

\[ \bigcup _{\imath\in J} A_{\imath } = \{ x \, |\, x \in A_{\jmath } \, \, \mathrm{para}\, \, \mathrm{algum}\, \, \jmath\in J\} \]

A intersecção dos conjuntos da família \(\mathcal{F}\) é o conjunto formado pelos elementos que pertencem a todos os conjuntos de \(\mathcal{F}\), i.e.

\[ \bigcap _{\imath\in J} A_{\imath } = \{ x \, |\, x \in A_{\jmath } \, \, \mathrm{para}\, \, \mathrm{todo}\, \, \jmath\in J\} \]

Dentre as propriedades mais importantes, destacamos as seguintes: dada uma família \(\mathcal{F}=\{ A_{\imath }\} _{\imath\in J}\) de conjuntos e dado um conjunto qualquer \(B\), tem-se:

\[ B \cap \left(\bigcup _{\imath\in J} A_{\imath }\right)=\bigcup _{\imath\in J} (B \cap A_{\imath }) \]
\[ B \cup \left(\bigcap _{\imath\in J} A_{\imath }\right)=\bigcap _{\imath\in J} (B \cup A_{\imath }) \]

Além disso, se \(\mathbb {U}\) é um conjunto que contém todos os conjuntos \(A_{\imath }\), então, tomando o complementar relativamente a \(\mathbb {U}\), tem-se:

\[ (\bigcup _{\imath\in J} A_{\imath })^{\mathsf c} = \bigcap _{\imath\in J} A_{\imath }^{\mathsf c} \]
\[ (\bigcap _{\imath\in J} A_{\imath })^{\mathsf c} = \bigcup _{\imath\in J} A_{\imath }^{\mathsf c} \]

Complemento.
A título de contemplar os mais curiosos, citamos aqui outra operação que pode ser estendida a qualquer família de conjuntos: o produto cartesiano. Tal operação vai muito além do que qualquer curso de cálculo exige, podendo ser sumariamente ignorada pelos mais "pragmáticos". Aos que não resistem à beleza do pensamento abstrato, boa leitura.

Como primeiro passo, vejamos como definir o produto cartesiano de uma quantidade qualquer (mas finita) de conjuntos. Dados \(n\) conjuntos não vazios \(A_1, A_2, \dots , A_n\), o produto cartesiano \(A_1 \times A_2 \times \cdots \times A_n\) é o conjunto dos elementos na forma \((x_1, x_2, \dots , x_n)\), onde para cada \(1 \leq \imath\leq n\) tem-se que \(x_\imath \in A_\imath \). Em símbolos:

\[ A_1 \times A_2 \times \cdots \times A_n = \{ (x_1, x_2, \dots , x_n) \, |\, x_\imath \in A_\imath , 1 \leq \imath\leq n\} . \]

Os elementos na forma \((x_1, x_2, \dots , x_n)\) são chamados de \(n\)-upla ordenada (que se lê "ênupla" ordenada).

Note-se que o produto cartesiano de \(n\) conjuntos é muito semelhante ao produto cartesiano de dois conjuntos, só diferindo, de fato, pelo número de conjuntos envolvidos.

Nosso propósito, agora, é contemplar famílias quaisquer de conjuntos, eventualmente infinitas. Para tanto, não é difícil perceber que a descrição acima não é adequada. Para chegar a um outro modo de tratar o produto cartesiano, pode ser útil revermos, sob outro olhar, o produto cartesiano que nos é já conhecido (vamos considerar o caso mais simples, com somente dois conjuntos). Dados dois conjuntos não vazios \(A_{\scriptscriptstyle {1}}\) e \(A_{\scriptscriptstyle {2}}\) (o uso de índices aqui é proposital), podemos identificar um par ordenado \((x_{\scriptscriptstyle {1}},x_{\scriptscriptstyle {2}})\) do produto cartesiano \(A_{\scriptscriptstyle {1}} \times A_{\scriptscriptstyle {2}}\) com a função \(f:\{ 1,2\} \to (A_{\scriptscriptstyle {1}} \cup A_{\scriptscriptstyle {2}})\) dada por

\[ f(1)=x_{\scriptscriptstyle {1}} \quad \mathrm{e} \quad f(2)=x_{\scriptscriptstyle {2}} \]

Pode parecer um modo exageradamente complicado para descrever um par ordenado e, se fosse esse o único objetivo dessa descrição, seria realmente algo despropositado. Mas essa linguagem apenas traduz a ideia de que um par ordenado nada mais é do que uma particular escolha, simultânea, de um elemento de um conjunto e um de outro. E cada função \(f\) como aquela acima descreve exatamente uma particular escolha desse tipo.

A vantagem dessa linguagem, porém, está no fato de permitir que se defina o produto cartesiano para uma família qualquer de conjuntos. De fato, seja dada uma família de conjuntos

\[ \mathcal{F}=\{ A \]

}_J

\[ \]

onde \(J\) é um qualquer conjunto de índices. O produto cartesiano dos conjuntos da família \(\mathcal{F}\) é o conjunto das funções

\[ f: J \to \bigcup _{\imath\in J} A \]
\[ \]

tais que \(f(\jmath) \in A\)\(\) para todo \(\jmath\in J\). Em símbolos:

\[ \prod _{\imath\in J} A \]

= {f: J _J A_  |  f() A_,   ∀  J}.

\[ \]