# Observatório de dados/Multiconjuntos

       Tutorial para a introdução de conceitos e convenções adotadas no Observatório de Dados, para se expressar formalmente multiconjuntos.
Multiconjuntos finitos são de grande utilidade para a representação de dados estatísticos por serem mais simples que pares ordenados, a ao mesmo tempo terem uma representação direta nos pares elemento-frequência de uma tabela de dados brutos tradicional de Estatística.
Em algumas linguagens de programação os multiconjuntos são também denominados bags (sacolas).

## Notação e definições

... convenções utilizadas no Observatório...
* prefixo Multi nas funções usuais de conjunto, indica que se deve esperar um multiconjunto como retorno. Por exemplo MultiInstancesOf(X)
* Expressões de definição entre colchetes ao invés de chaves.

## Exemplos numéricos

Apesar de não serem sempre os mais didáticos, os exemplos numéricos são os mais simples e bem documentados.

### Sequências de inteiros

Talvez a mais abrangente e bem documentada fonte de "datasets matemáticos" seja a "The On-Line Encyclopedia of Integer Sequences" (OEIS.org).
Como o multiconjunto não requer preservação da ordem, na descrição extensiva pode-se destacar as multiplicidades ao listar na ordem numérica.
Os primeiros membros das séries se prestam como "assinaturas", de modo que a OIES os fornece e cataloga com precisão. Multiconjuntos extraídos destes primeiros termos são portanto fáceis de conseguir e bastante precisos na sua definição. A expressão é livre: preservando a ordem original visualiza-se a assinatura, colocando na ordem numérica destacam-se as multiplicidades.
A descrição intensiva do multiconjunto pode ser feita da mesma maneira que a descrição intensiva de um conjunto, declarando-se o conjunto universo e extração de elementos: X = [∀x∈ℕ, ∃k∈ℕ | min<k≤max ∧ (k,x) ∈ NomeDaSequencia ].

#### Primeiros 10 termos da série de Fibonacci, OEIS:A000045

    Fibo10 = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]. Fibo10 = [∀x∈ℕ, ∃k∈ℕ | 0<k≤9 ∧ (k,x) ∈ OEIS:A000045].

#### Primeiros 60 números da série de períodos de Pissano, OEIS:A001175

    Pis60 = [1, 3, 8, 6, 12, 16, 16, 18, 18, 20, 20, 24, 24, 24, 24, 24, 24, ..., 120, 120, 120]. Multiplicidades m(X,16)=2; m(X,24)=6; etc. Descrição intensiva do mesmo multiconjunto: Pis60 = [∀x∈ℕ, ∃k∈ℕ | 0<k≤60 ∧ (k,x) ∈ OEIS:A001175].
Curiosidades:
* repare que nas definições intensivas é usada a referência à listagem, por exemplo https://oeis.org/A001175/list
* garantia de DISTINCT em OEIS:A005132 faz com que conjunto e multiconjunto sejam equivalentes.
Exemplos de operações:
| Simples | com Fibo10 e Pis60 |
| $[1,1,1,3]\cap [1,1,2]=[1,1]$ | $Fibo10\cap Pis60=[1,1,2,3,8]$ |
| $[1,1]\cup [1,2]=[1,1,2]$ | $Fibo10\cup Pis60=[0,1,1,2,3,6,8,12,16,16,\dots ]$ |
| $[1,1]-[1,2]=[1]$ | $Fibo10-Pis60=[0,1,2,\dots ]$ |
| $[1,1]\subseteq [1,1,1,2]$ | |
| $[1,1]\times [1,2]=[(1,1),(1,1),(1,2),(1,2)]$ | $Fibo10\times Pis60=[(0,1),(0,3),(0,8),\dots ]$ |
| $\left|[1,1]\right|=2$ | $\left|Fibo10\right|=10$ $\left|Pis60\right|=60$ |
| $[1,1]\uplus [1,2]=[1,1,1,2]$ | $Fibo10\uplus Pis60=[0,1,1,1,2,3,\dots ]$ |

### Clássicos

Um dos exemplos mais simples e tradicionais é o multiconjunto dos fatores primos de um número $n$. Aqui, os elementos são os divisores de $n$. Por exemplo, o número 120 tem a fatoração
    $120=2^{3}3^{1}5^{1}=2\times 2\times 2\times 3\times 5$  repredsentados pelo multiconjunto [2, 2, 2, 3, 5].
De modo que não importa a ordem mas importa a multiplicidade. A representação em multiconjunto traz toda informação necessária sobre os fatores.
Outro exemplo clássico é a representação das soluções de uma equação algébrica. Uma equação quadrática, por examplo, tem 2 soluções, que eventualmente pode coincidir de serem o mesmo número. Assim os multiconjuntos [3,0; 5,1] ou [4;4] representam melhor as soluções do que conjuntos.

### Dados empíricos

... ver exemplos clássicos ... séries temporais (ex. vazão de um rio) e atemporais (ex. temperaturas amostradas de uma mesma superfície num dado instante)... Dados aleatórios (resultados de loteria)...

## Analogias na modelagem de sistemas

Conceitua-se "estado" nas diversas áreas da Física e da Computação de forma ligeiramente adaptada a cada contexto: estado de um sistema computacional, estado de um sistema termodinâmico, estados da matéria, estado de um sistema quântico, estado do banco de dados, e outros. São semelhantes, mas infelizmente não temos um conceito simples e unificado para "estado do sistema". Em sistemas dinâmicos costuma-se descrever o estado do sistema como uma fotografia do mesmo. Se fotos tiradas em momentos diferentes resultarem ser fotos iguais, dizemos que é o sistemna voltou ao mesmo estado. Num banco de dados não é diferente, se ele muda com o tempo, podemos "fotografar" através de um backup da base de dados inteira. Se conteúdo dos backups for igual, dizemos que a base se encontra no mesmo estado.
A descrição de sistemas do mundo real depende também da escolha, de como modelamos e construímos nossas abstrações. Num sistema de partículas, os resultados poderão ser completamente diferentes se as consideramos como totalmente distinguíveis ou não. Os efeitos dessa escolha também refletem nas descrição dos estados do sistema.
O mesmo ocorre com a modelagem de conjuntos: se as entidades do mundo real candidatos a serem modelados como elementos do conjunto são ou não disnguíveis, pode fazer uma grande diferença. Para dar conta dessa sutileza existe uma opção do multiconjunto. O análogo do conceito de "estado" para um conjunto é a quantidade elementos, ou seja, a sua cardinalidade — e no caso do multiconjunto a cardinalidade é a soma das multiplicidades. A modelagem do mundo real precisa preservar a essência do que se abstraiu: apesar de intuitiva, a decisão sobre modelar um dado aspecto da realidade por conjuntos ou multiconjuntos, pode ser fundamental.