Quais são as implicações práticas da teoria dos tipos de homotopia na programação?


11

Estou apenas começando a aprender Haskell, depois de vir dos mundos JavaScript / Ruby. Encontrei https://github.com/HoTT e o livro Homotopy Type Theory , que estou muito ansioso para ler.

No entanto, aprenderei os conceitos de matemática e teoria dos tipos à medida que for desenvolvendo, portanto, parece que demorará muito tempo para eu entender o que a teoria dos tipos de homotopia significará para um programador praticante.

Você poderia descrever qual o impacto que a teoria do tipo homotopia terá na programação na prática, para um leigo? Por exemplo, isso tornará certas coisas mais fáceis ou mais fáceis de escrever? Se sim, quais coisas? Ou permitirá que você faça coisas novas em programação que antes não eram possíveis? Se sim, quais coisas?

Obrigado, muito ansioso para envolver minha cabeça em um nível mais básico.


Espero que seja, e sempre permanecerá inescrutável para a prática de programadores. Na melhor das hipóteses, podemos obter compiladores mais rápidos ou caixas-pretas mágicas que tiram vantagem do fu-matemático.
Telastyn

Haha, é isso que eu tenho pensado até agora também. Ainda estou me perguntando, é essa a resposta ou há algo além do que você disse? Por exemplo, os bancos de dados poderiam se beneficiar disso? Ou algo assim.
Lance Pollard

1
Eu não faço ideia. Eu li o resumo e prontamente o joguei no balde para um mumbo-jumbo acadêmico inescrutável.
Telastyn


4
@Telastyn: Se você baixar um livro em português, ele também será inescrutável, desde que você não tenha tentado aprender o idioma. Por que denunciar publicamente os livros portugueses pelo termo depreciativo mumbo-jumbo ? A motivação de Gödels para a introdução de funções recursivas primitivas era extremamente acadêmica, principalmente porque o mundo nem sequer dirigia nenhum programa nos anos 30. Não acho que, por ser um programador praticante, os tópicos acadêmicos "sempre permaneçam inescrutáveis" para suas capacidades.
Nikolaj-K

Respostas:


15

Uma das coisas poderosas que os compiladores são capazes de fazer durante sua fase de otimização é trocar representações ineficientes por equivalentes. Por exemplo, em Haskell, você pode usar uma lista lenta para calcular uma soma de números, mas o compilador GHC Haskell reconhecerá que isso é equivalente ao uso da iteração com uma variável temporária. Dessa forma, você pode programar com base em uma abstração simples e fácil de raciocinar, enquanto o executável aproveita uma representação mais adequada à plataforma de hardware (e isso é muito mais difícil de raciocinar em escala).

No entanto, as equivalências conhecidas pelo compilador são restritas principalmente a estruturas de dados conhecidas e pesquisadas, como fusão de fluxo para listas. Você pode definir suas próprias equivalências no código-fonte (usando um par de funções de conversão que compõem a identidade em qualquer direção), mas é necessário aplicá-las manualmente, e pode ser complicado escolher o tipo certo para uso em todos os lugares para evitar conversões excessivas.

Agora vamos imaginar um mundo onde você possa definir "tipos indutivos mais altos", digamos um mapa de pesquisa canônico. Esse tipo possui vários construtores para os vários tipos de mapas: pesquisa binária, AVL, preto-vermelho, Trie, Patricia, etc. Juntamente com os construtores de dados típicos, você também define um tipo de equivalência capturando possivelmente várias conversões entre essas representações, onde diferentes as conversões oferecem dimensões variáveis ​​de eficiência (tempo versus memória).

E se o compilador fosse capaz de usar essa noção para reescrever transparentemente representações de mapa, da mesma maneira que pode fazer hoje com a fusão de listas? Enquanto isso, no seu código, você começa a trabalhar com a construção que é mais simples de raciocinar (e facilita o trabalho de prova, se você estiver em um ambiente assim). Isso pode soar como uma interface abstrata com várias implementações, mas inclui a liberdade de escolher qualquer implementação e fazer com que o compilador substitua de forma transparente outra conforme necessário, sem afetar o significado do programa.

O HoTT nos fornece uma base teórica do tipo para justificar esse mecanismo de reescrita sofisticado e esses tipos ricamente definidos, porque promove a noção de equivalência em ser equivalente à igualdade. Resta ver como isso realmente acontecerá na prática, mas nos fornece a estrutura teórica sobre a qual basear o trabalho futuro.

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.