Antes de mais nada, uma breve explicação
Deve parecer estranho ver este post em português em meio a tantos (poucos, no momento) em inglês. Estou escrevendo isto porque notei uma falta de introduções acessíveis a esta parte da (meta?)matemática que é tão interessante e frutífera. Mas já existem várias introduções bem acessíveis na língua ânglica, e seria uma perda de tempo da minha parte adicionar mais uma (sem mencionar a arrogância de achar que posso adicionar algo).
Daí pensei em começar uma série sobre o assunto. Como fio condutor, me focarei (ao menos num primeiro momento) na aplicação de teoria de categorias em bancos de dados, mas entrarei em outros casos também (como gestão de projetos, iot, linguagens de programação e talvez outros).
Mas por que devo me importar com essa teoria estranha
“Se fosse importante, minha professora teria ensinado no pré”, você pode continuar… Mas veja,
O futuro será formulado em teoria de categorias
E são sou eu quem está dizendo isso, mas a Forbes:
(eu não posso recomendar a leitura desse artigo, mas) se seguir comigo, eu posso tentar te mostrar porquê pode aquela frase faz sentido.
Um breve histórico
Nossa história com categorias começa em meados do século 201, na álgebra abstrata2, com o fim de expressar formalmente noções como “transformações naturais” e “propriedades universais”. É o tipo de noção um tanto vaga, que (suponho eu) aparece comumente em algumas áreas mas que, na matemática, algumas pessoas (como o MacLane) sentiram que podiam e deviam expressar de forma mais clara.
E daí veio a Teoria de Categoria. Diferente de outras áreas da matemática, não foi algo que nasceu para resolver um problema concreto em si (como o cálculo, a álgebra abstrata..), mas mais algo como um meta-problema, ou um problema de linguagem talvez. E daí vem o seu poder - justamente da sua falta de poder. Isto é, ela não foi feita, e em grande parte não é usada para resolver “problemas matemáticos” como comumente entendidos, mas para resolver problemas “meta”.
Dificilmente uma “teorista de categorias” ficaria famoso por resolver um grande problema em aberto3 - o que te diz algo sobre quem busca estudar essa área. A ela interessaria mais entender a estrutura do problema e as relações dele com outros problemas de outras áreas.
Isso não raro torna a solução de alguns problemas antes difíceis, triviais. Mas com categorias nós ganhamos mais do que apenas resolver um problema - ganhamos insight.
Isso porque a teoria de categoria, por sua natureza, nos ajuda a ver similaridades entre áreas e problemas (aparentemente) díspares, e lidar com uma grande quantidade de situações distintas de uma vez.
Veremos um exemplo nesta série com bancos de dados, em que um conceito nascido na álgebra linear (o de adjunção) é generalizado categoricamente e se mostra aplicável no caso de migração entre diferentes esquemas de bancos de dados (a grosso modo, transformar os dados de um esquema para outro).
É válido notar que4 migrações de dados demandam bilhões de dólares anualmente e podem tomar uma grande parte do orçamento de TI de uma empresa, sendo que (acredita-se) mais da metade de projetos de migração de dados falham. Assim, ideias que nos ajudem a entender e lidar melhor com esse problema, pode se mostrar de grande valia (mais ainda quando essas ideias estão implementadas em um software usável, como é o caso5).
Mas o que é uma “categoria” afinal?
Bem simplesmente, uma categoria é algo composto de
Sendo que os morfismos podem ser compostos de forma coerente, isto é
-
(associatividade) Se \(f: a \rightarrow b\), \(g: b \rightarrow c\) e \(h: c \rightarrow d\) são morfismos, então \(h \circ (g \circ f) = (h \circ g) \circ f\).
-
Para todo objeto ob, há um morfismo identidade \(1_{ob}\), tal que \(\forall f: a \rightarrow b\) morfismo, \(1_b \circ f = f = f \circ 1_a\)
Dois exemplos (matemáticos) de categorias que se acha facilmente na natureza são
- Set, cujos objetos são conjuntos e morfismos são funções, e
- Lin, cujos objetos são espaços vetoriais e morfismos são transformações lineares.
Essas definições escondem uma grande magia, e enganam facilmente. Primeiro porque dão a impressão de que objetos são importantes, mas não são. Em categorias, objetos são algo quase que imaterial, sendo os morfismos (as relações entre eles) muito mais relevantes.
Na verdade, a noção de “objetos” foi criada para que possamos definir morfismos (setas) entre eles. E essa noção de “morfismos” (setas) foi criada para que possamos depois falar sobre “transformações naturais” - do que teremos mais a dizer mais pra frente.
Um outro ponto de vista
Suspeito que a leitora talvez se sinta um tanto quanto traída pela (um tanto forte) asserção inicial. E é válido e não tem muito o que posso fazer, já que desenvolver uma linguagem é demorado e será trabalho para outros posts.
Mas, para que você não se sinta totalmente enganada, segue um esboço do que pretendemos ver nos próximos posts.
Bancos de dados8
“Dados se tornam informação quando armazenados em alguma formação”, e essa “formação” frequente se materializa na forma de tabelas conectadas, num sistema organizado de “tabelas conectadas” que é chamado de “banco de dados”.
A estrutura de referências de um banco de dados - a forma como tabelas se conectam por meio das chamadas “chaves estrangeiras” - possivelmentejunto com outras restrições (as “regras de negócio”) que podemos atribuir aos dados, são o que definem a estrutura do banco de dados, estrutura a qual denominamos esquema.
Veremos a seguir que
- esquemas de bancos de dados são categorias C;
- que categorias podem ser mapeadas entre si por meio de funtores \(C \rightarrow D\);
- os dados em si são dados por funtores, para uma outra categoria específica (Set, de conjuntos) (veremos também que “funtores” são análogos de morfismos, mas entre categorias);
- e que (como mencionado antes) a noção de migração de dados, para mover dados entre diferentes esquemas de bancos de dados é formalizado pela noção categórica de funtores adjuntos.
O que podemos esperar
Infelizmente, apesar de nada disso ser muito difícil ou complicado, vai demandar a introdução de uma boa dose de vocabulário novo, então vamos por partes - e este post apresenta apenas o inicinho da história.
No próximo post, veremos alguns exemplos de esquemas de bancos e como podemos ver bancos como categorias. Também introduziremos mais formalmente algumas das noções vistas aqui, como funtores e transformações naturais.
E, para quem gosta de gatos, contaremos também com
participações ilustres (mesmo que a contragosto) de lindos gatos te
ironizando (um prelúdio à introdução de Cat, que talvez fique para
depois).
-
Na verdade, poderia-se dizer que começou com Aristóteles… mas não precisamos ir tão longe por enquanto :p ↩
-
Aquela que lida com grupos, anéis, corpos e etc.. vide, eg este pdf. ↩
-
Porém, é preciso notar que em várias áreas é essencial conhecer a linguagem categórica para resolver seus problemas. ↩
-
Vide Seven Sketches Cap. 3. ↩
-
Para quase todo caso, podemos pensar nesses “objetos” como um conjunto (no sentido de teoria de conjuntos), mas em alguns casos (que não veremos aqui) essa interpretação pode levar a problemas sutis e paradoxos. ↩
-
De novo, poderíamos pensar numa formalização mais cuidadosa, mas não vamos nos preocupar com isso agora. ↩
-
Esta seção é em grande parte inspirada pelo capítulo 3 de Seven Sketches. ↩