Características da Teoria das Categorias e sua Importância para a Ciência da Computação Carlos Eduardo Ramisch – Cartão 00134657 Instituto de Informática – UFRGS INF05006 – Categorias Computacionais ­ Prof.º Paulo Blauth Menezes Porto Alegre, 22 de março de 2006. Introdução A teoria das categorias é uma área dentro da computação teórica que se desenvolveu e consolidou recentemente. É, portanto, por esse motivo que ela ainda encontra pouco estudo em cursos de computação (não só no Brasil) e, por conseqüência, pouca pesquisa massiva é realizada nessa área. Apesar, porém, de aparentar pouca relevância, seu desenvolvimento foi muito incentivado (e ainda é), visto que ela possui uma grande aplicação e importância na ciência da computação (além da indiscutível importância para a matemática). A importância da teoria das categorias e a justificativa dessa importância serão os temas abordados por esse texto, que visa também descrever de forma breve o histórico e as características que contribuíram para que ela se tornasse tão amplamente aplicável. Aspectos históricos O nascimento dessa teoria se deu como um estudo muito mais matemático do que computacional. É difícil definir quando foi que a idéia apareceu pela primeira vez. É argumentado que Stanislaw Ulam desenvolvia conceitos semelhantes com a teoria das categorias na Polônia na década de 30. Também se pode considerar a teoria das categorias é fruto do trabalho de Emmy Noether, quando da tentativa de formalizar processos abstratos na primeira metade do século 20. Segundo Noether, para compreender uma estrutura matemática é necessário entender os processos que ocorrem preservando a estrutura. Em geral, é aceito que o artigo de Samuel Eilenberg e Saunders Mac Lane, intitulado “General Theory of Natural Equivalences.” (Teoria Geral de Equivalências Naturais), introduziu o conceito de categoria, bem como o de funtor, em 1945. Antes, porém, os mesmos autores haviam publicado um artigo (1942) em que apresentavam as noções de funtores aplicadas a grupos. Logo, o artigo de 1945 era uma generalização do anterior. Os autores focaram seu artigo nas transformações naturais. Para tanto, precisaram definir o conceito de funtor, e por sua vez esse conceito precisava da definição de categoria. O termo foi redefinido com um sentido matemático para o conceito de “categoria”, que foi originalmente adaptado da filosofia. A princípio, os conceitos desenvolvidos foram utilizados na topologia, mais especificamente na topologia algébrica (Eilenberg e Steenrod, em um artigo de 1952). O avanço seguinte da teoria das categorias se deveu principalmente a um artigo no campo denominado álgebra homológica, e também por necessidades axiomáticas da geometria algébrica (Cartan e Eilenberg utilizaram a teoria das categorias nesse artigo de 1956). Um nome importante no avanço da teoria foi o de Grothendieck, que publicou um artigo em que utilizava categorias para criar teorias mais gerais e aplicá­las a campos específicos. A partir daí a teoria das categorias deixou de ser apenas uma linguagem conveniente, pois o estudo categorias abstratas que encapsulam resultados da álgebra homológica também podia ser aplicado para obter resultados em outros campos da matemática. Além disso, diversos teoremas e teorias podiam ser vistos por um ângulo categorial, usando o conceito de funtor para demonstrar a equivalência de estruturas, inclusive de diferentes campos de estudo. Esses avanços deram às categorias um ramo separado na matemática, sendo vistas como objeto de pesquisa puro. Ela passou a ser usada para substituir a teoria dos conjuntos no que diz respeito aos aspectos lógicos da matemática. Uma categoria de categorias foi proposta para servir de ferramenta a essa aplicação. Nos anos 70, uma noção chamada “topos” foi estudada por ser uma espécie de estudo de categorias de conjuntos, porém relacionando lógica com geometria. A partir daí o que se desenvolveu foi, em sua maioria, aplicações e generalizações utilizando categorias. Elas foram usadas como ferramenta no estudo da lógica intuicionista. Categorias também foram usadas no estudo da física teórica ou física matemática. Foi por volta dos anos 80 que a ciência da computação e a teoria das categorias passaram a ser consideradas como áreas correlatas de estudo. Elas são utilizadas no desenvolvimento de novos sistemas lógicos, na resolução de problemas semânticos, nas linguagens de programação funcionais, cálculo lambda e computabilidade, teoria de tipos e na visualização de relações entre áreas correlatas. Definições e Características Para se ter alguma idéia das aplicações citadas anteriormente e da importância da teoria das categorias para a ciência da computação, é fundamental definir de forma mais clara o que estuda a teoria das categorias e quais são as características que tornam tão propício o uso dessa teoria no estudo de problemas computacionais. A teoria das categorias estuda, de maneira abstrata, as estruturas matemáticas e as relações entre elas. De maneira vaga, uma categoria pode ser definida como um conjunto de objetos e um conjunto de relações (morfismos) entre esses objetos. Esses morfismos obedecem às restrições de identidade e de composição, isto é, cada objeto possui uma identidade e cada par de morfismos componíveis possui uma composta. A partir dessas definições básicas são construídos os demais resultados. Contudo, detalhes matemáticos e definições formais não vêm ao caso nesse texto, uma vez que se visa descrever de forma mais intuitiva as características dessa teoria. Existem várias categorias importantes estudadas, como por exemplo: Set, onde os objetos são conjuntos e os morfismos funções; Top, onde os objetos são espaços topológicos e os morfismos são funções contínuas, etc. Note que o que caracteriza uma categoria não são os seus objetos, mas as relações entre eles. A bibliografia especializada costuma citar em alguns tópicos as características da teoria das categorias. Abaixo, portanto, iremos discorrer e analisar alguns desses pontos que tornam essa teoria tão abrangentemente estudada. Abundância: Categorias são extremamente abundantes na matemática e em campos que relacionam a matemática com a ciência da computação. Para exemplificar, podemos citar entidades como os conjuntos, espaços vetoriais, grupos, espaços topológicos, etc. Além disso, diversas áreas da ciência da computação podem ser encaradas por um ponto de vista categorial, gerando estudos baseados na teoria das categorias. Conjuntos ordenados, autômatos e linguagens também são aplicações de categorias. Similaridade de estruturas: Sendo uma teoria abstrata, categorias podem mostrar que diversas áreas da matemática (inclusive áreas completamente diferentes) possuem relações e propriedades semelhantes. E isso pode ser formalizado através de conceitos como funtor. Alguns exemplos: A definição de produto categorial pode ser especificada para demonstrar a similaridade de estruturas como o produto de conjuntos, espaços vetoriais, autômatos, espaços topológicos. Da mesma forma, podemos também citar o conceito de objetos livres e melhoramentos reflexivos (traduzido diretamente do inglês). É a teoria das categorias que fornece as ferramentas necessárias para a investigação de diversas áreas de maneira simultânea. Ela inclusive facilita a demonstração de resultados nessas áreas. Linguagem: A teoria das categorias freqüentemente demonstra ser uma linguagem conveniente para apresentar problemas e conceitos de outros campos. No princípio, inclusive, foi essa a abordagem que foi utilizada nos primeiros artigos sobre o tema. Só depois é que ela deixou de ser considerada apenas uma linguagem adequada para se tornar um estudo independente. Alguns exemplos do uso de categorias como linguagens são: Espaços topológicos podem ser definidos através de diversas maneiras, como conjuntos abertos, conjuntos fechados, vizinhança, etc. A teoria das categorias ajuda a demonstrar que essas definições são essencialmente equivalentes. Estruturas iniciais, estruturas finais e estruturas de fatoração ocorrem em diversas situações, e a teoria das categorias permite que se formule esses conceitos com o grau apropriado de generalidade. Representação conveniente: Olhando sob o ponto de vista pedagógico, o estudo de categorias e o chamado “pensamento categorial” com o seu alto nível de abstração podem parecer complicados. Porém uma das propriedades que facilitam muito o entendimento é a representação através de diagramas e grafos. Esse tipo de representação diagramática permite que se visualize de maneira muito mais fácil muitas das propriedades. Estendendo essa característica, a teoria das categorias pode, através de diagramas, permitir a visualização de resultados bastante complexos também em outras áreas. Transferência de problemas: Uma das ferramentas mais interessantes é que a teoria das categorias pode servir de “veículo de transporte” matemático. Alguns problemas e demonstrações podem ser extremamente complicados em alguns domínios. Quando, através de funtores e conceitos categoriais, se estabelece uma relação entre dois domínios, pode­se transportar os problemas de um domínio onde a demonstração pode ser extremamente complexa para um domínio em que a demonstração ou resolução seja mais fácil ou mais natural. Dessa forma, criamos um meio de transportar os problemas entre áreas da matemática. Dualidade: Por último e nem por isso menos importante, a teoria das categorias fornece uma “economia” muito útil, uma vez que categoria é um conceito bem balanceado. Os autores costumam dizer que se leva “dois pelo preço de um” através da dualidade, pois cada conceito e cada resultado são, na verdade, duplos, por virem sempre acompanhados de seu dual. A própria definição de categoria possui o seu dual, bem como praticamente todas as definições nessa ciência. Isso facilita a demonstração de resultados, também , pois sabido que o resultado vale para um dos lados, basta “inverter” e chegar ao resultado para o dual sem precisar provar o resultado novamente. Importância, Aplicações e Considerações Finais As características discutidas acima mostram como as categorias podem ser úteis para, por exemplo, estudar um novo campo e encontrar analogias e relações entre esse novo campo e áreas conhecidas da matemática. Dessa forma, pode­se organizar o novo campo, os seus problemas, conceitos e resultados genéricos de forma separada daqueles que são específicos daquele campo. Conhecimento categorial nos permite, portanto, organizar o pensamento quando se lida com pesquisa em campos da matemática e da ciência da computação. Já foi citado anteriormente que a teoria das categorias possui uma vasta gama de aplicações na ciência da computação. Iremos, portanto, através de exemplos, mostrar essa importância de forma prática, uma vez que já enumeramos as diversas características propícias do estudo das categorias. Teoria dos conjuntos: Em praticamente todo o curso de graduação de ciência da computação são passados conceitos de matemática discreta ou álgebra abstrata que encapsulam conceitos da teoria dos conjuntos. A teoria dos conjuntos é, portanto, base para muitos problemas computacionais. A teoria dos conjuntos possui muitas construções que podem ser vistas como uma especialização da teoria das categorias, portanto, a teoria das categorias pode ser usada como base de problemas computacionais ao invés da teoria dos conjuntos, que possui falhas em alguns aspectos (principalmente semânticos como, por exemplo, o paradoxo de Russel). Linguagens funcionais: A composição de funções pode ser encarada como um problema categorial, uma vez que um programa em uma linguagem funcional é uma composição de funções. Esse tipo de abordagem consegue resolver problemas de equivalência e de semântica de construções de maneira bastante simples, o que facilita o estudo dessas linguagens usando a teoria das categorias como ferramenta. Recursividade e computabilidade: Existem diversas aplicações que estabelecem uma forte ligação entre a teoria da computação (área que estuda máquinas abstratas e computabilidade de problemas) e a teoria das categorias. Estudos no sentido de aplicar categorias ao cálculo lambda, por exemplo, foram realizados. Esses estudos mostraram que o cálculo lambda tipado pode ter muitos de seus problemas semânticos resolvidos de maneira bem mais simples através do uso de conceitos categoriais. Pode­se também definir máquinas abstratas (como as máquinas de Turing, por exemplo) baseadas em categorias. Para tanto, definimos alguns combinadores categoriais e então utilizamos conceitos de categorias para construir a máquina através de estruturas composicionais. Da mesma forma, autômatos e outros modelos computacionais também possuem por trás um pensamento composicional. Teoria de tipos e estruturas: A teoria das categorias também é amplamente utilizada na área de estudos de tipos e estruturas em linguagens de programação. A composição de tipos é uma das propriedades que facilita o uso de categorias com essa área. Lógica: Categorias foram usadas em trabalhos sobre lógica intuicionista. Esses artigos tratavam as construções dessa lógica sob o aspecto categorial, conseguindo resultados bastante interessantes. Também para a prova de completude e outras propriedades da lógica (de primeira ordem ou outra) é útil empregar conceitos de categorias. Grafos: É sabido que diversos problemas computacionais são modelados e resolvidos através de grafos. Grafos são, além de uma representação útil, uma linguagem poderosa na ciência da computação. O estudo de categorias como as categorias de grafos permite que se estude essas estruturas e que delas se tire resultados que podem ser úteis para a computação. Quando se demonstra resultados para grafos, pode­se aplicar esses resultados a uma vasta gama de problemas e ajudar na sua resolução. As aplicações enumeradas e exemplificadas acima demonstram de maneira efetiva como é ampla a aplicação de categorias em diversas áreas da ciência da computação. Através dessas características e exemplos foi possível notar que essa relação é muito mais presente do que aparentemente e historicamente se imaginou. O fato é que a teoria das categorias nasceu como uma ferramenta matemática, foi aplicada em áreas da matemática, recebeu importância e só então passou a ser considerada um ramo próprio. Esse trabalho tentou mostrar que a teoria das categorias, porém, é também de fundamental importância para o estudo, a pesquisa e a compreensão da ciência da computação. Referências