Ocorrências naturais de mônadas que fazem uso do referencial teórico da categoria

18

Hoje, uma palestra de Henning Kerstan ("Semântica de rastreamento para sistemas probabilísticos de transição") me confrontou com a teoria das categorias pela primeira vez. Ele construiu uma estrutura teórica para descrever sistemas de transição probablísticos e seu comportamento de uma maneira geral, isto é, com conjuntos de estados incontáveis ​​e infinitos e diferentes noções de traços. Para esse fim, ele percorre várias camadas de abstração para finalmente terminar com a noção de mônadas, que ele combina com a teoria da medida para construir o modelo de que precisa.

No final, ele levou 45 minutos para (aproximadamente) criar uma estrutura para descrever um conceito que ele inicialmente explicou em 5 minutos. Eu aprecio a beleza da abordagem (isso não generalizar muito bem sobre diferentes noções de traços), mas parece-me um equilíbrio estranho, no entanto.

Eu luto para ver o que realmente é uma mônada e como um conceito tão geral pode ser útil em aplicações (tanto na teoria quanto na prática). Realmente vale o esforço, em termos de resultados?

Portanto, esta pergunta:

Existem problemas naturais (no sentido de SC) nos quais a noção abstrata de mônadas pode ser aplicada e ajuda (ou é mesmo instrumental) a obter os resultados desejados (de maneira alguma ou de maneira mais agradável do que sem)?

Rafael
fonte
2
Codificando estados em uma linguagem de programação puramente funcional? Isso é um problema de CS suficientemente natural?
Stéphane Gimenez
2
O problema mais geral de lidar com efeitos em linguagens funcionais é o exemplo que eu mais vi: para a teoria, as mônadas para efeitos são sensuais e para a prática, a mônada IO de Haskell é muito útil.
Jmad
E quais seriam as vantagens em comparação com a semântica clássica, relativamente leve? As mônadas de FP são a mesma coisa que na teoria das categorias? Perguntas sobre perguntas.
Raphael
Veja esta questão em cstheory.SE para obter uma pergunta mais geral após o uso da teoria das categorias.
Raphael

Respostas:

6

Perguntar se uma ocorrência de mônada é natural é semelhante a perguntar se um grupo (no sentido da teoria dos grupos) é natural. Depois de formalizar algo, neste caso como um endofuncor, ele satisfaz os axiomas de ser uma mônada ou não. Se isso satisfaz os axiomas, é possível obter gratuitamente muitas máquinas técnicas.

Artigo de Moggi Noções de computação e mônadas praticamente selam o acordo: as mônadas são incrivelmente naturais e úteis para descrever efeitos computacionais de maneira unificada. Wadlere outros traduziram essas noções para lidar com efeitos computacionais em linguagens de programação funcional, usando a conexão que um functor é um construtor de tipo de dados. Isso adiciona a cereja no topo do bolo. As mônadas de FP permitem um tratamento de efeitos computacionais, como IO, que seriam extremamente antinaturais sem eles. Mônadas inspiraram noções úteis relacionadas, como flechas e expressões idiomáticas, que também são muito úteis para estruturar programas funcionais. Veja o link Wadler para referências. Mônadas FP são a mesma coisa que mônadas de teoria de categoria, no sentido de que para uma mônada FP funcionar as mesmas equações precisam ser mantidas - o compilador depende delas. Geralmente, a apresentação da mônada difere (operações e equações diferentes, mas equivalentes), mas essa é uma diferença superficial.

Uma grande quantidade do trabalho de Bart Jacobs , para citar apenas um exemplo, usa mônadas. Muito trabalho decorre da coalgebra, que é uma teoria geral dos sistemas. Uma das (muitas) contribuições de Jacobs para a área é o desenvolvimento de uma noção genérica de semântica de traços para sistemas (descritos como barras de carvão) com base em mônadas. Alguém poderia argumentar que a noção de semântica de traços é natural: qual é a semântica de um sistema? A lista de ações que podem ser observadas!

Uma maneira de entender as mônadas é primeiro programar em Haskell usando mônadas. Em seguida, encontre um dos muitos bons tutoriais disponíveis (via google). Comece pelo ângulo de programação e depois vá para o lado teórico, começando com alguma teoria básica das categorias.

Dave Clarke
fonte