stringtranslate.com

Codificación Mogensen-Scott

En informática , la codificación Scott es una forma de representar tipos de datos (recursivos) en el cálculo lambda . La codificación Church realiza una función similar. Los datos y los operadores forman una estructura matemática que está incorporada en el cálculo lambda.

Mientras que la codificación de Church comienza con representaciones de los tipos de datos básicos y avanza a partir de ellos, la codificación de Scott comienza con el método más simple para componer tipos de datos algebraicos .

La codificación Mogensen–Scott extiende y modifica levemente la codificación Scott al aplicar la codificación a la metaprogramación [ cita requerida ] . Esta codificación permite la representación de términos de cálculo lambda , como datos, para ser utilizados por un metaprograma.

Historia

La codificación Scott aparece por primera vez en un conjunto de notas de clase inéditas de Dana Scott [1], cuya primera cita aparece en el libro Combinatorial Logic, Volume II . [2] Michel Parigot dio una interpretación lógica y un recurso fuertemente normalizador para los numerales codificados por Scott, [3] refiriéndose a ellos como la representación de números de "tipo pila". Torben Mogensen luego extendió la codificación Scott para la codificación de términos Lambda como datos. [4]

Discusión

El cálculo lambda permite almacenar datos como parámetros de una función que aún no tiene todos los parámetros necesarios para su aplicación. Por ejemplo,

Puede considerarse como un registro o estructura donde los campos se han inicializado con los valores . A continuación, se puede acceder a estos valores aplicando el término a una función f . Esto se reduce a,

c puede representar un constructor para un tipo de datos algebraicos en lenguajes funcionales como Haskell . Ahora supongamos que hay N constructores, cada uno con argumentos;

Cada constructor selecciona una función diferente de los parámetros de la función . Esto proporciona ramificaciones en el flujo del proceso, en función del constructor. Cada constructor puede tener una aridad (número de parámetros) diferente. Si los constructores no tienen parámetros, el conjunto de constructores actúa como una enumeración ; un tipo con un número fijo de valores. Si los constructores tienen parámetros, se pueden construir estructuras de datos recursivas.

Definición

Sea D un tipo de datos con N constructores , , tales que el constructor tiene aridad .

Codificación Scott

La codificación Scott del constructor del tipo de datos D es

Codificación Mogensen-Scott

Mogensen extiende la codificación Scott para codificar cualquier término lambda sin tipo como datos. Esto permite que un término lambda se represente como datos dentro de un metaprograma de cálculo lambda . La función meta mse convierte un término lambda en la representación de datos correspondiente del término lambda;

El "término lambda" se representa como una unión etiquetada con tres casos:

Por ejemplo,

Comparación con la codificación de la Iglesia

La codificación Scott coincide con la codificación Church para valores booleanos. La codificación Church de pares se puede generalizar a tipos de datos arbitrarios mediante la codificación de D anterior como [ cita requerida ]

compare esto con la codificación Mogensen Scott,

Con esta generalización, las codificaciones de Scott y Church coinciden en todos los tipos de datos enumerados (como el tipo de datos booleano) porque cada constructor es una constante (sin parámetros).

En cuanto a la viabilidad de utilizar la codificación Church o Scott para la programación, existe una compensación simétrica: [5] los numerales codificados por Church admiten una operación de suma en tiempo constante y no son mejores que una operación predecesora en tiempo lineal; los numerales codificados por Scott admiten una operación predecesora en tiempo constante y no son mejores que una operación de suma en tiempo lineal.

Definiciones de tipos

Los datos codificados por Church y las operaciones con ellos se pueden tipificar en el sistema F , al igual que los datos y las operaciones codificados por Scott. Sin embargo, la codificación es significativamente más complicada. [6]

El tipo de codificación Scott de los números naturales es el tipo recursivo positivo:

Los tipos recursivos completos no son parte del Sistema F, pero los tipos recursivos positivos se pueden expresar en el Sistema F a través de la codificación:

Combinando estos dos hechos se obtiene el tipo Sistema F de la codificación Scott:

Esto puede contrastarse con el tipo de codificación de la Iglesia:

¡La codificación de la Iglesia es un tipo de segundo orden, pero la codificación de Scott es de cuarto orden!

Véase también

Notas

  1. ^ Scott, Dana (1968) [1962]. Un sistema de abstracción funcional . Conferencias dictadas en la Universidad de California, Berkeley.
  2. ^ Curry, Haskell (1972). Lógica combinatoria, volumen II . North-Holland Publishing Company. ISBN 0-7204-2208-6.
  3. ^ Parigot, Michel (1988). "Programación con pruebas: una teoría de tipos de segundo orden". En H. Ganzinger (ed.). Simposio Europeo de Programación: ESOP '88 . 2º Simposio Europeo de Programación. Nancy, Francia, 21-24 de marzo de 1988. Lecture Notes in Computer Science. Vol. 300. Springer. pp. 145-159. doi : 10.1007/3-540-19027-9_10 . ISBN 978-3-540-19027-1.
  4. ^ Mogensen, Torben (1994). "Autointerpretación eficiente en cálculo lambda". Revista de programación funcional . 2 (3): 345–364. doi :10.1017/S0956796800000423. S2CID  8736707.
  5. ^ Parigot, Michel (1990). "Sobre la representación de datos en el cálculo lambda". En Egon Börger; Hans Kleine Büning; Michael M. Richter (eds.). Taller internacional sobre lógica informática: CSL '89 . Tercer taller sobre lógica informática. Kaiserslautern, RFA, 2-6 de octubre de 1989. Lecture Notes in Computer Science. Vol. 440. Springer. pp. 209–321. doi :10.1007/3-540-52753-2_47. ISBN 978-3-540-52753-4.
  6. ^ Véase la nota "Tipos para los numerales Scott" de Martín Abadi, Luca Cardelli y Gordon Plotkin (18 de febrero de 1993).

Referencias