Codificação Mogensen-Scott - Mogensen–Scott encoding

Na ciência da computação , a codificação Scott é uma maneira de representar tipos de dados (recursivos) no cálculo lambda . A codificação da igreja executa uma função semelhante. Os dados e operadores formam uma estrutura matemática que está embutida no cálculo lambda.

Enquanto a codificação de Church começa com representações dos tipos de dados básicos e se desenvolve a partir deles, a codificação de Scott começa com o método mais simples para compor tipos de dados algébricos .

A codificação Mogensen – Scott estende e modifica ligeiramente a codificação Scott aplicando a codificação à Metaprogramação . Esta codificação permite a representação de termos de cálculo lambda , como dados, a serem operados por um metaprograma.

História

A codificação de Scott aparece pela primeira vez em um conjunto de notas de aula não publicadas por Dana Scott, cuja primeira citação ocorre no livro Combinatorial Logic, Volume II . Michel Parigot deu uma interpretação lógica de um recursor fortemente normalizado para numerais codificados por Scott, referindo-se a eles como a representação de números do "tipo pilha". Torben Mogensen posteriormente estendeu a codificação Scott para a codificação dos termos Lambda como dados.

Discussão

O cálculo lambda permite que os dados sejam armazenados como parâmetros para uma função que ainda não possui todos os parâmetros necessários para a aplicação. Por exemplo,

Pode ser considerado como um registro ou estrutura onde os campos foram inicializados com os valores . Esses valores podem então ser acessados ​​aplicando o termo a uma função f . Isso se reduz a,

c pode representar um construtor para um tipo de dados algébrico em linguagens funcionais como Haskell . Agora, suponha que haja N construtores, cada um com argumentos;

Cada construtor seleciona uma função diferente dos parâmetros da função . Isso fornece ramificação no fluxo do processo, com base no construtor. Cada construtor pode ter uma aridade diferente (número de parâmetros). Se os construtores não tiverem parâmetros, o conjunto de construtores atua como um enum ; um tipo com um número fixo de valores. Se os construtores tiverem parâmetros, estruturas de dados recursivas podem ser construídas.

Definição

Deixe- D ser um tipo de dados com N construtores , , de tal forma que construtor tem aridade .

Codificação Scott

A codificação Scott do construtor do tipo de dados D é

Codificação Mogensen-Scott

Mogensen estende a codificação Scott para codificar qualquer termo lambda não digitado como dados. Isso permite que um termo lambda a ser representada como dados, dentro de um cálculo Lambda programa de meta . A metafunção mse converte um termo lambda na representação de dados correspondente do termo lambda;

O "termo lambda" é representado como uma união marcada com três casos:

  • Construtor a - uma variável ( aridade 1, não recursiva)
  • Construtor b - aplicação de função (aridade 2, recursiva em ambos os argumentos),
  • Construtor c - abstração lambda (aridade 1, recursiva).

Por exemplo,

Comparação com a codificação da Igreja

A codificação Scott coincide com a codificação Church para booleanos. A codificação da igreja de pares pode ser generalizada para tipos de dados arbitrários pela codificação de D acima como

compare isso com a codificação Mogensen Scott,

Com essa generalização, as codificações de Scott e Church coincidem em todos os tipos de dados enumerados (como o tipo de dados booleano) porque cada construtor é uma constante (sem parâmetros).

Com relação à praticidade de usar a codificação Church ou Scott para programação, há uma compensação simétrica: os numerais codificados por Church suportam uma operação de adição de tempo constante e não têm nada melhor do que uma operação predecessora de tempo linear; Os numerais codificados por Scott suportam uma operação predecessora de tempo constante e não têm nada melhor do que uma operação de adição de tempo linear.

Definições de tipo

Dados codificados por igreja e operações neles podem ser tipificados no sistema F , mas dados e operações codificados por Scott não são obviamente tipáveis ​​no sistema F. Universal, bem como tipos recursivos parecem ser necessários. Como a normalização forte não é válida para tipos recursivos irrestritos, estabelecer o término de programas que manipulam dados codificados por Scott determinando a boa tipagem requer que o sistema de tipos forneça restrições adicionais sobre a formação de termos digitados recursivamente.

Veja também

Notas

Referências