Qual é a relação entre os functores na SML e na teoria das categorias?


24

Seguindo o mesmo pensamento que esta declaração de Andrej Bauer nesta resposta

A comunidade Haskell desenvolveu várias técnicas inspiradas na teoria das categorias, das quais as mônadas são mais conhecidas, mas não devem ser confundidas com as mônadas .

Qual é a relação entre functores em SML e functores na teoria das categorias?

Como não conheço os detalhes de functors em outros idiomas, como Haskell ou OCaml, se houver informações de valor, adicione também seções para outros idiomas.


1
Você poderia tentar enviar um e-mail a Dave McQueen para uma resposta definitiva, suponho.
Gilles 'SO- stop be evil'

Respostas:


14

As categorias formam uma categoria (grande) cujos objetos são as categorias (pequenas) e cujos morfismos são functores entre categorias pequenas. Nesse sentido, os functores na teoria das categorias são "morfismos de maior tamanho".

Os functores ML não são functores no sentido categórico da palavra. Mas elas são "funções de tamanho maior" no sentido da teoria dos tipos.

Pense em tipos de dados concretos em uma linguagem de programação típica como "pequeno". Assim int, bool, int -> int, etc são pequenos, aulas de Java são pequenos, como estruturas bem em C. Podemos recolher todos os tipos de dados em uma grande colecção de chamada Type. Um construtor de tipo, como listou arrayé uma função de Typepara Type. Portanto, é uma função "grande". Um functor ML é apenas uma função grande um pouco mais complicada: aceita como argumento várias pequenas coisas e retorna várias pequenas coisas. "Várias pequenas coisas juntas" são conhecidas como estrutura no ML. Em termos da teoria dos tipos de Martin-Löf, temos um universo Type de tipos pequenos. Os tipos grandes são geralmente chamados de tipos . Então nós temos:

  1. valores são elementos de tipos (exemplo 42 : int:)
  2. tipos são elementos de Type(exemplo int : Type:)
  3. Assinaturas de ML são tipos (exemplo OrderedType:)
  4. construtores de tipos são elementos de tipos (exemplo list : Type -> Type:)
  5. Stuctures ml são elementos de tipos (exemplo: String : OrderedType)
  6. Functors ml são funções entre os tipos (exemplo: Map.Make : Map.OrderedType -> Make.S)

Agora podemos traçar uma analogia entre ML e categorias, sob a qual functors correspondem a functors. Mas também observamos que os tipos de dados no ML são como "pequenas categorias sem morfismos", em outras palavras, são mais como conjuntos do que como categorias. Poderíamos usar uma analogia entre ML e teoria dos conjuntos:

  1. tipos de dados são como conjuntos
  2. tipos são como classes teóricas
  3. functores são como funções de tamanho de classe

15

Uma estrutura ML padrão é semelhante a uma álgebra . Sua assinatura descreve uma classe inteira de álgebras de formato semelhante.

F:MonGrpF:UMAbRng

A maioria dessas idéias foi elaborada em uma série de artigos de Burstall e Goguen no design de uma linguagem de especificação chamada CLEAR (Referências c5 e c6 na página DBLP .) David MacQueen estava trabalhando em conjunto com Burstall e Sannella na época e estava intimamente familiarizado. com os problemas. O sistema do módulo ML padrão é baseado nessas idéias.

O que a maioria das pessoas se pergunta é: e os morfismos? Os functores teóricos da categoria têm uma parte do objeto e uma parte do morfismo. Os functores ML padrão têm o mesmo? A resposta é sim e não.

  • A parte SIM da resposta se aplica se as estruturas forem de primeira ordem. Então, existem homomorfismos entre diferentes estruturas da mesma assinatura, e os funções padrão do ML os mapeiam automaticamente para homomorfismos da assinatura do resultado.
  • A parte NÃO da resposta se aplica quando as estruturas têm operações de ordem superior.

Isso significa que o Padrão ML está se desviando da teoria das categorias? Acho que não. Eu prefiro pensar que o Standard ML está fazendo a coisa certa, e a teoria das categorias ainda não foi alcançada. A teoria das categorias ainda não sabe como lidar com funções de ordem superior. Algum dia, será.


"A teoria das categorias ainda não sabe como lidar com funções de ordem superior". Isso soa como outra pergunta, porque eu achava que a teoria das categorias poderia fazer tudo isso como base.
Guy Coder

2
T(X)=[XX]tWEuceX=T(X)T(X)
Uday Reddy

Na verdade, fiz disso uma pergunta real .
Guy Coder

"Uma estrutura ML padrão é semelhante a uma álgebra ". Os functores não são um pouco mais gerais do que isso? Nada impede que uma estrutura contenha objetos não relacionados (tipos, valores e funções), ie. não formando uma álgebra.
didierc

2
@didierc Uma assinatura para álgebras consiste em um ou mais tipos (como nossos tipos), e uma ou mais operações (como nossas funções) e, opcionalmente, alguns axiomas (como nossas especificações). Uma álgebra para a assinatura seleciona conjuntos específicos para esses tipos e funções específicas para essas operações, de modo que os axiomas sejam satisfeitos. As assinaturas e estruturas de SML são exatamente essas coisas, exceto que o SML permite operações de ordem superior, enquanto a Álgebra não.
Uday Reddy

3

Até onde eu sei, não existe uma relação formal entre functores na teoria das categorias e functores no ML (SML ou OCaml, eles estão próximos o suficiente para o nosso propósito aqui).

Na teoria das categorias, functores são funções que operam em objetos. Eles estão um nível acima dos morfismos, que geralmente são funções que operam em elementos (muitas categorias têm objetos que são conjuntos com alguma estrutura algébrica e setas que são homomorfismos entre essas estruturas). Um functor ML é uma função que opera em módulos, um nível acima das funções que operam nos valores principais da linguagem. Eu acho que a semelhança para aqui.

Os functores de ML foram batizados por Dave McQueen em sua revisão de 1985 do Modules for Standard ML (citeseerx) que apareceu no Boletim de Polimorfismo (o artigo original usava a expressão "módulo paramétrico" - publicações posteriores tendem a usar o adjetivo "parametrizado"). Infelizmente, não consigo localizar uma cópia desse papel. Em seu artigo de 1986, Usando tipos dependentes para expressar estrutura modular (citeseerx), ele fornece o nome como estabelecido.


2
Funcionários não são apenas funções de objetos, eles também mapeiam morfismos. Functors são "morfismos entre categorias".
Andrej Bauer

@AndrejBauer Sim, functors são funções em objetos. Nem toda função nos objetos é um functor, mas isso é uma consideração secundária aqui.
Gilles 'SO- stop be evil'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.