Questões de Pesquisa

Existem diversas questões interessantes a serem pesquisadas, envolvendo esse assunto. A mais importante delas é, na nossa visão, a que trata de estabelecer quais restrições necessitam ou devem ser impostas, e para que tipos de funções, de modo a que funções genéricas possam ser automaticamente derivadas, a partir de definições existentes, para um determinado tipo de dados específico. Por exemplo, no caso da função map descrita acima, seria fácil definir automaticamente usando um sistema de suporte a polimorfismo de sobrecarga que permita parametrização sobre construtores de tipos, como o sistema CT, há bastante tempo objeto de estudos do autor deste projeto e seu grupo de pesquisa , uma função map para (digamos) árvores binárias, a partir da definição existente para listas. Ou seja, considere, por exemplo, a definição de um tipo algébrico ("datatype") como o seguinte, que representa árvores binárias que podem ser folhas ou nós formados por um elemento e duas subárvores (à esquerda e à direita do elemento nesse nó):
data Tree a   =   Leaf   |   Node (Tree a) a (Tree a)
A definição de map para árvores a seguir:
map: (a &rarr b) &rarr Tree a &rarr Tree b
map f   Leaf   = Leaf
map f   (Node t1 a t2) = Node (map f  t1)  (f a)  (map f  t2)
poderia ser obtida a partir da seguinte definição de map para listas:
map: (a &rarr b) &rarr [a] &rarr [b]
map f  [ ]  = [ ]
map f  (a:x) = f a:   map f   x
mediante a substituição do construtor sem argumentos [ ], na definição do tipo lista, pelo correspondente construtor para o tipo árvore (Leaf), pela aplicação da função f aos valores do tipo dos elementos da estrutura, e pela aplicação de map recursivamente (ao valor do tipo da estrutura de dados).

O objeto de estudo desse projeto é a formalização de restrições necessárias ou recomendadas para suporte a derivação automática de funções politípicas, a partir das definições de tipos e da definição de uma função politípica existente para um dos tipos

Outras questões gerais e tópicos novos ou ainda não estudados em profundidade pela comunidade científica incluem questões relativas a como implementar linguagens e prover suporte a linguagens de programação genérica com suporte a derivação automática, quais são as vantagens e desvantagens entre as duas abordagens mencionadas para programação genérica, como a programação genérica modifica o uso de métodos para prova de correção de programas, etc.

É importante mencionar que, nesse contexto, o polimorfismo de sobrecarga, como definido e implementado no Sistema CT , de maneira livre e irrestrita, permitindo parametrização de construtores de dados e restrições de tipos com vários parâmetros, e sem a necessidade de uso de dependências funcionais para resolução de sobrecarga e eliminação de ambigüidades, parece mostrar-se fundamental.


Carlos Camarao de Figueiredo
Last modified: Mon Jul 19 20:58:31 BRT 2004