Álgebra de Conjuntos


In [1]:
%matplotlib inline

Álgebra é constituída de operações definidas sobre uma soleção de objetos. Neste contexto, álgebra de conjuntos corresponderia às operações definidas sobre todos os conjuntos.

As operações da álgebra de conjuntos podem ser não reversíveis e reversíveis:

  • Não reversíveis
    • União
    • Intersecção
    • Diferença
  • Reversíveis
    • Complemento
    • Conjunto das partes
    • Produto cartesiano
    • União disjunta

É possível estabelecer uma relação entre a lógica e as operações da álgebra de conjuntos:

Conectivo ou relação lógicos Operação ou relação sobre conjuntos
Negação Complemento
Disjunção União
Conjunção Intersecção
Implicação Continência
Equivalência Igualdade

As propriedades dos conectivos e operadores lógicos são válidas na teoria dos conjuntos, como mostrado a seguir:

Conectivo lógico Operação sobre conjuntos
Idempotência: $\wedge$ e $\lor$ idmpotência: intersecção e união
Comutativa: $\wedge$ e $\lor$ comutativa: intersecção e união
Associativa: $\wedge$ e $\lor$ associativa: intersecção e união
Distributiva:
$\wedge$ sobre $\lor$
$\lor$ sobre $\wedge$
distributiva:
intersecção sobre união
união sobre intersecção
Dupla negação duplo complemento
DeMorgan DeMorgan
absorção absorção

Operações não reversíveis

União

Sejam $A$ e $B$ dois conjuntos. A união entre eles, $A \cup B$, é definida como:

$A \cup B = \{x \mid x \in A \lor x \in B\}$

Considerando a lógica, o conjunto $A$ pode ser definido como $x \in A$. O conjunto $B$ pode ser definido como $x \in B$. Ou seja, a propriedade de pertiência é utilizada para indicar uma proposição lógica.

A união corresponde à operação lógica disjunção (símbolo $\lor$).

Exemplo: Considere os conjuntos:

  • $\mbox{Digitos} = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\}$
  • $\mbox{Vogais} = \{a, e, i, o, u\}$
  • $\mbox{Pares} = \{0, 2, 4, 6, ...\}$

Então:

  • $\mbox{Digitos} \cup \mbox{Vogais} = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, e, i, o, u\}$
  • $\mbox{Digitos} \cup \mbox{Pares} = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, ...\}$

Exemplo: Suponha os conjuntos:

  • $A = \{x \in N \mid x > 2\}$
  • $B = \{x \in N \mid x^2 = x\}$

Então:

  • $A \cup B = \{0, 1, 3, 4, 5, 6, ...\}$

É importante observar que o resultado da união é um conjunto sem repetições de elementos.

Vejamos as propriedades da união:

  • Elemento neutro: $A \cup \emptyset = \emptyset \cup A = A$
  • Idempotência: $A \cup A = A$
  • Comutativa: $A \cup B = B \cup A$
  • Associativa: $A \cup (B \cup C) = (A \cup B) \cup C$

Prova da propriedade elemento neutro Elemento neutro: $A \cup \emptyset = \emptyset \cup A = A$.

Assim, há duas igualdades, que podem ser analisadas considerando a validade da transitividade [da igualdade]. Assim, temos que observar alguns casos.

(A) Para provar $A \cup \emptyset = \emptyset \cup A$:

O primeiro caso (1): Seja $x \in A \cup \emptyset$. Então devemos provar que $A \cup \emptyset \subseteq \emptyset \cup A$:

  • $x \in A \cup \emptyset \implies$ (definição de união)
  • $x \in A \lor x \in \emptyset \implies$ (comutatividade da disjunção)
  • $x \in \emptyset \lor x \in A \implies$ (definição de união)
  • $x \in \emptyset \cup A$

Portanto, $A \cup \emptyset \subseteq \emptyset \cup A$.

O segundo caso (2): Seja $x \in \emptyset \cup A$. Então devemos provar que $\emptyset \cup A \subseteq A \cup \emptyset$:

  • $x \in \emptyset \cup A \implies$ (definição de união)
  • $x \in \emptyset \lor x \in A \implies$ (comutatividade da disjunção)
  • $x \in A \lor x \in \emptyset \implies$ (definição de união)
  • $x \in A \cup \emptyset$

Portanto, $\emptyset \cup A = A \cup \emptyset$.

Terceiro caso (3): De (1) e (2) concluímos que $A \cup \emptyset = \emptyset \cup A$.

(B) Para provar $A \cup \emptyset = A$:

Quarto caso (4): Seja $x \in A \cup \emptyset$. Então devemos provar que $A \cup \emptyset \subseteq A$:

  • $x \in A \cup \emptyset \implies$ (definição de união)
  • $x \in A \lor x \in \emptyset \implies$ ($x \in \emptyset$ é sempre false)
  • $x \in A$

Portanto, $A \cup \emptyset \subseteq A$.

Quinto caso (5): Seja $x \in A$. Então devemos provar que $A \subseteq A \cup \emptyset$:

  • $x \in A \implies$ ($x \in A$ é sempre true, portanto podemos considerar $p \implies p \lor q)$
  • $x \in A \lor x \in \emptyset$ (definição de união)
  • $x \in A \cup \emptyset$

Portanto, $A \subseteq A \cup \emptyset$.

Sexto caso (6): De (4) e (5) concluímos que $A \cup \emptyset = A$.

Sétimo caso (7): Por fim, de (3) e (6) e pela transitividade da igualdade, concluímos que $A \cup \emptyset = \emptyset \cup A = A$ e provamos a propriedade do elemento neutro da união.

Exercício 2.1: Prove as propriedades idempotência, comutativa e associativa da união.


In [17]:
import pylab as plt
from matplotlib_venn import venn2, venn2_circles
set1 = set([1,2,3])
set2 = set([3,4,5])
venn2([set1, set2], ('A', 'B'))
plt.show()


Intersecção

Sejam dois conjuntos $A$ e $B$. A intersercção entre eles, $A \cap B$ é definida como:

$A \cap B = \{x | x \in A \wedge x \in B\}$

A união corresponde à operação lógica conjunção (símbolo $\wedge$).

Sejam $A$ e $B$ dois conjuntos não vazios. Se $A \cap B = \emptyset$, então $A$ e $B$ são chamados conjuntos disjuntos, conjuntos independentes, ou conjuntos mutuamente exclusivos.

Exemplo: Considere os conjuntos:

  • $\mbox{Digitos} = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\}$
  • $\mbox{Vogais} = \{a, e, i, o, u\}$
  • $\mbox{Pares} = \{0, 2, 4, 6, ...\}$

Então:

  • $\mbox{Digitos} \cap \mbox{Vogais} = \emptyset$
  • $\mbox{Digitos} \cap \mbox{Pares} = \{0, 2, 4, 6, 8\}$

Vejamos as propriedades da intersecção:

  • Elemento neutro: $A \cap U = U \cap A = A$
  • Idempotência: $A \cap A = A$
  • Comutativa: $A \cap B = B \cap A$
  • Associativa: $A \cap (B \cap C) = (A \cap B) \cap C$

Propriedades envolvendo união e intersecção

As propriedades a seguir envolvem as operações de união e intersecção:

  • Distributividade da intersecção sobre a união: $A \cap (B \cup C) = (A \cap B) \cup (A \cap C)$
  • Distributividade da união sobre a intersecção: $A \cup (B \cap C) = (A \cup B) \cap (A \cup C)$
  • Absorção: $A \cap (A \cup B) = A$ e $A \cup (A \cap B) = A$.

Exercício 2.2: Algumas linguagens de programação possuem estruturas de dados para conjuntos, as quais disponibilizam, também, operações sobre estes. Faça uma pesquisa sobre linguagens de programação e, selecionando uma linguagem de programação que suporte definição de conjuntos e operações sobre eles, apresente exemplos, contemplando as operações e propriedades vistas até o momento (e.g. pertiência, contingência, união e intersecção).

Exercício 2.3: Considerando uma linguagem de programação que forneça suporte a conjuntos e operações sobre eles, crie um programa que leia conjuntos em arquivos texto (um elemento do conjunto em cada linha) e gere a saída também em um arquivo texto (também um elemento em cada linha). O programa deve considerar e demonstrar a utilização das operações e propriedades vistas até o momento (e.g. pertiência, contingência, união e intersecção).

Exercício 2.4: Suponha o conjunto universo $S = \{p, q, r, s, t, u, v, w\}$ bem como os seguintes conjuntos:

  • $A = \{p, q, r, s\}$
  • $B = \{r, t, v\}$
  • $C = \{p, s, t, u\}$

Determine:

a) $B \cap C$

b) $A \cup C$

c) $\sim{C}$

d) $A \cap B \cap C$

e) $\sim(A \cup B)$

f) $(A \cup B) \cap \sim{C}$

Operações reversíveis

Entende-se por operação reversível uma operação a partir de cujo resultado pode-se recuperar os operandos originais.

Complemento

Considerando o conjunto universo $U$. O complemento de um conjunto $A \subseteq U$, denotado por $\sim{A}$ é definido como:

\begin{align*} \sim{A} = \{x \in U | x \notin A \} \end{align*}

Exemplos

  1. Considere o conjunto universo definido por $\mbox{Digitos} = \{0, 1, 2, ..., 9\}$. Seja $A = \{0, 1, 2\}$. Então, $\sim{A} = \{3, 4, 5, 6, 7, 8, 9\}$.

  2. Suponha conjunto universo $\mathbb{N}$. Seja $A = \{0, 1, 2\}$. Então, $\sim{A} = \{x \in \mathbb{N} | x \gt 2\}$.

  3. Para qualquer conjunto universo $U$, valem:

    1. $\sim{\emptyset} = U$
    2. $\sim{U} = \emptyset$
  4. Suponha que $U$ é o conjunto universo. Então, para qualquer conjunto $A \subseteq U$, valem:

    1. $A \cup \sim{A} = U$
    2. $A \cap \sim{A} = \emptyset$

Neste último exemplo, observe que:

  • a união de um conjunto com seu complemento sempre resulta no conjunto universo ($p \lor \sim{p} = \mbox{Verdadeiro}$); e
  • a intersecção de um conjunto com seu complemento sempre resulta no conjunto vazio ($p \wedge \sim{p} = \mbox{Falso}$).

Também vale a noção e duplo complemento (ou dupla negação), ou seja:

\begin{align*} \sim\sim{A} = A \end{align*}

A propriedade denominada DeMorgan vale-se do complemento, envolvendo as operações de unição e interseção, como mostra a tabela a seguir.

DeMorgan na Álgebra de conjuntos Propriedade DeMorgan na Lógica
$\sim(A \cup B) = \sim{A} \cap \sim{B}$ $\lnot(p \lor q) \Leftrightarrow \lnot{p} \wedge \lnot{q}$
$\sim(A \cap B) = \sim{A} \cup \sim{B}$ $\lnot(p \wedge q) \Leftrightarrow \lnot{p} \lor \lnot{q}$

Diferença

Sejam os conjuntos $A$ e $B$. A diferença dos conjuntos $A$ e $B$, denotada por $A - B$ é definida como:

\begin{align*} A - B = A \cap \sim{B} \end{align*}

ou

\begin{align*} A - B = \{x | x \in A \wedge x \notin B \} \end{align*}

Exemplos

  1. Suponha os conjuntos: $\mbox{Digitos} = \{0, 1, 2, ..., 9\}$, $\mbox{Vogais} = \{a, e, i, o, u\}$ e $\mbox{Pares} = \{0, 2, 4, 6, ...\}$. Utilizando a diferença, temos:
    1. $\mbox{Digitos} - \mbox{Vogais} = \mbox{Digitos}$
    2. $\mbox{Digitos} - \mbox{Pares} = \{1, 3, 5, 7, 9\}$
  2. Para qualquer conjunto universo $U$ e qualquer $A \subseteq U$, valem:
    1. $\emptyset - \emptyset = \emptyset$
    2. $U - \emptyset = U$
    3. $U - A = \sim{A}$
    4. $U - U = \emptyset$

Conjunto das partes

Para qualquer conjunto $A$ sabe-se que:

  • $A \subseteq A$
  • $\emptyset \subseteq A$
  • Para qualquer elemento $a \in A$, é visível que $\{a\} \subseteq A$

A operação unária chamada conjunto das partes, ao ser aplicada ao conjunto $A$ resulta no conjunto de todos os subconjuntos de $A$. Suponha um conjunto $A$. O conjunto das partes de $A$ (ou conjunto potência), denotado por $\mbox{P}(A)$ ou $2^A$ é definido por:

\begin{align*} \mbox{P}(A) = \{X | X \subseteq A \} \end{align*}

Exemplos

  1. Sejam os conjuntos $A = \{a\}$, $B = \{a, b\}$, $C = \{a, b, c\}$ e $D = \{a, \emptyset, \{a, b\}\}$, então:
    1. $\mbox{P}(\emptyset) = \{\emptyset\}$
    2. $\mbox{P}(A) = \{\emptyset, \{a\}\}$
    3. $\mbox{P}(B) = \{\emptyset, \{a\}, \{b\}, \{a, b\}\}$
    4. $\mbox{P}(C) = \{\emptyset, \{a\}, \{b\}, \{c\}, \{a, b\}, \{a, c\}, \{b, c\}, \{a, b, c\}\}$
    5. $\mbox{P}(D) = \{\emptyset, \{a\}, \{\emptyset\}, \{\{a, b\}\}, \{a, \emptyset\}, \{a, \{a, b\}\}, \{\emptyset, \{a,b\}\}, \{a, \emptyset, \{a, b\}\} \}$

Produto Cartesiano

A operação produto cartesiano é uma operação binária que, quando aplicada a dois conjuntos $A$ e $B$ resulta em um conjunto constituído de sequências de duas componentes (tuplas), sendo que a primeira componente de cada sequência é um elemento de $A$, e a segunda componente, um elemento de $B$.

Uma sequência de $n$ componentes, denominada $n$-upla ordenada, consiste de $n$ objetos (não necessariamente distintos) em uma ordem fixa. Por exemplo, uma 2-upla ordenada é denominada par ordenado. Um par ordenado no qual a primeira componente é $x$ e a segunda é $y$ é definido como $\langle x, y \rangle$.

Uma $n$-upla ordenada é definida como:

\begin{align*} \langle x_1, x_2, x_3, ..., x_n \rangle \end{align*}

Uma $n$-upla ordenada não deve ser confundida com um conjunto, pois a ordem das componentes é importante. Assim:

\begin{align*} \langle x, y \rangle \neq \langle y, x \rangle \end{align*}

O produto cartesiano dos conjuntos $A$ e $B$, denotado por $A \times B$ é definido por:

\begin{align*} A \times B = \{ \langle a, b \rangle | a \in A \wedge b \in B \} \end{align*}

O produto cartesiano de um conjunto com ele mesmo é definido por $A \times A = A^2$

Exemplos Sejam os conjuntos $A = \{a\}$, $B = \{a, b\}$ e $C = \{0, 1, 2\}$. Então:

  1. $A \times B = \{ \langle a, a \rangle, \langle a, b \rangle \}$
  2. $B \times C = \{ \langle a, 0 \rangle, \langle a, 1 \rangle, \langle a, 2 \rangle, \langle b, 0 \rangle, \langle b, 1 \rangle, \langle b, 2\rangle \}$
  3. $A^2 = \{ \langle a, a \rangle \}$

Exercício 2.5: Considere os conjuntos $A = \{a\}$, $B = \{a, b\}$ e $C = \{0, 1, 2\}$. Calcule os seguintes produtos cartesianos:

  1. $(A \times B) \times C$
  2. $A \times (B \times C)$
  3. $B^2$
  4. $C^2$

União disjunta

Diferentemente da união, que desconsidera repetições de elementos no conjunto resultante, a união disjunta permite que os elementos do conjunto resultante sejam duplicados, uma vez que seja identificada a sua fonte. A união disjunta dos conjuntos $A$ e $B$, denotada por $A + B$ ou $A \dot\cup\ B$ é definida como:

\begin{align*} A + B = \{ \langle a, A \rangle | a \in A\} \cup \{ \langle b, B \rangle | b \in B\} \end{align*}

ou

\begin{align*} A + B = \{ a_A | a \in A\} \cup \{ b_B | b \in B\} \end{align*}

Exemplo

  1. Suponha os conjuntos $\mbox{Silva} = \{\mbox{João}, \mbox{Maria}, \mbox{José}\}$ e $\mbox{Souza} = \{\mbox{Pedro}, \mbox{Ana}, \mbox{José}\}$. Então:
    1. $\mbox{Silva} + \mbox{Souza} = \{ \langle \mbox{João}, \mbox{Silva} \rangle, \langle \mbox{Maria}, \mbox{Silva} \rangle, \langle \mbox{José}, \mbox{Silva} \rangle, \langle \mbox{Pedro}, \mbox{Souza} \rangle, \langle \mbox{Ana}, \mbox{Souza} \rangle, \langle \mbox{José}, \mbox{Souza} \rangle \}$ ou
    2. $\mbox{Silva} + \mbox{Souza} = \{ \mbox{João}_{\mbox{Silva}}, \mbox{Maria}_\mbox{Silva}, \mbox{José}_\mbox{Silva}, \mbox{Pedro}_\mbox{Souza}, \mbox{Ana}_\mbox{Souza}, \mbox{José}_\mbox{Souza} \}$

Exercício 2.6: Considere os conjuntos $D = \{0, 1, 2, ..., 9\}$, $V = \{a, e, i, o, u\}$, e $P = \{0, 2, 4, 6, ...\}$. Então, encontre:

  1. $D + V$
  2. $D + P$
  3. $V + V$
  4. $V + \emptyset$

Exercício 2.7: Utilizando um banco de dados relacional, crie duas tabelas: Palavras1 e Palavras2, respectivamente. Utilizando linguagem SQL, crie e apresente o resultado de uma consulta que realiza o produto cartesiano entre as duas tabelas.

Exercício 2.8: Crie um programa que lê $n$ arquivos de entrada. Cada arquivo contém uma palavra em cada linha. O programa deve ler os arquivos e gerar um arquivo de saída chamado pc.txt contendo o produto cartesiano entre as palavras dos arquivos de entrada. Cada linha do arquivo de saída deve representar um elemento do produto cartesiano (uma $n$-upla) cujos componentes devem estar separados por um espaço [em branco].

Exemplo: Para os arquivos de entrada:

palavras1.txt
jose
maria
palavras2.txt
silva
santos
palavras3.txt
moreira
aires

O arquivo resultante

pc.txt
jose silva moreira
jose silva aires
jose santos moreira
jose santos aires
maria silva moreira
maria silva aires
maria santos moreira
maria santos aires