¿La equivalencia contextual de un lenguaje con `quote`-`eval` es trivial o no?


13

En [1], Mitchell Wand demostró que agregar fexprs al cálculo lambda puro trivializa la teoría de la equivalencia contextual, lo que significa que dos términos son contextualmente equivalentes si son congruentes. Al explorar el trabajo relacionado, dijo: "nuestro resultado extiende una vieja observación de Albert Meyer [2] y hace que la equivalencia contextual sea trivial". Pero en referencia a [2], lo que se puede encontrar es solo la siguiente declaración de Meyer:αevalquote

Primero pensé que en los lenguajes con una característica quote- evalcomo LISP [3] no había distinción de tipo entre objetos sintácticos y ejecutables. De hecho quote, evalparece lo suficientemente seguro en LISP porque, aunque quotesintácticamente parece un operador de buena fe, como por ejemplo cond, realmente no se comporta como uno (solo tiene comportamiento en tiempo de análisis, no en tiempo de ejecución, por ejemplo, uno no puede pasar quotecomo parámetro de un procedimiento). Aún así, todavía tengo que ver convencer ejemplos en los que quote- evalcaracterística es que vale la pena.

Independientemente de una falla menor en estos comentarios que puede inducir a error al lector a inferir que condpodría pasarse como parámetro de un procedimiento. Si he entendido bien, lo que dijo Meyer " quote- evalparece lo suficientemente seguro" significa que quote- evalno puede trivializar la teoría ecuacional, aunque él no ofrecen una prueba.

EDITAR:

Según lo sugerido por Martin, dado que los tres documentos citaron el trato con los idiomas familiares de LISP, coloquemos la pregunta en esta misma configuración. ¿Es la equivalencia contextual de un lenguaje con quote- eval, en particular LISP, en la tierra trivial o no?

[1] Mitchell Wand, The Theory of Fexprs Is Trivial . Lisp y Symbolic Computation 10 (3): 189-199 (1998).

[2] Albert Meyer, Taller de lógica de programación en desarrollo de software formal. 1984

[3] John McCarthy, funciones recursivas de expresiones simbólicas y su cómputo por máquina, Parte I . Comunicaciones de la ACM en abril de 1960.


1
Sugeriría considerar si pudiera hacer la pregunta más específica: hay diferentes formas de implementar evaluaciones / citas como construcciones, y varias opciones en el diseño de equivalencias contextuales para tales cálculos. Una publicación relacionada reciente e interesante es Razonamiento sobre programas de etapas múltiples de Inoue, Taha.
Martin Berger el

1
La distinción clave es entre CTMP (metaprogramación en tiempo de compilación, como lo ejemplifica Template Haskell, Lisp / Scheme / Racket and Converge , y RTMP (metaprogramación en tiempo de ejecución como Eval de Javascript o MetaOCaml). Otro parámetro es escribir . Aquí es una visión general charla que di hace unos meses sobre este tema, muy poco profundo temo en cuanto a las equivalencias de contexto, poco se ha hecho, sobre todo a poseer el estado fluido de la programación de apoyo a meta-programación..
Martin Berger

1
@ plmday: Por cierto, el lenguaje de programación idealizado que Wand formalises en The Theory of Fexprs Is Trivial es bastante diferente de la metaprogramación que Lisp hace. El primero es RTMP, el último (dependiendo de implementaciones concretas) no lo es.
Martin Berger

1
@MartinBerger: ¿Puedes publicar tu charla como pdf?
Dave Clarke

1
@ Dave Clarke, claro, ¡ aquí está! Comentarios bienvenidos.
Martin Berger

Respuestas:


2

Primero, esto depende completamente de lo que consideres como tu conjunto de contextos. Si (quote [])es un contexto, entonces la equivalencia contextual es equivalencia sintáctica.

Tradicionalmente, los contextos de equivalencia contextual se consideran contextos en los que pueden aparecer "expresiones", en cualquier significado que tenga en el lenguaje. Esto excluye contextos como "[]", donde el contexto coloca su argumento dentro de un literal de cadena. Este tipo de contextos también fueron descartados por Quine cuando el IIRC describió originalmente la transparencia referencial.

Desde esta perspectiva, creo que (quote [])tampoco es un contexto. En cambio, los contextos son los lugares donde la evaluación de expresiones podría suceder potencialmente, como en el cuerpo de una función o en el argumento de una aplicación.

Potencialmente problemático, esto significa que en un programa Lisp con macros (o un programa Racket o Scheme) no sabes cuáles son los contextos hasta que ejecutas el proceso de expansión de macro potencialmente no determinante, porque ni siquiera sabes dónde están las expresiones son. Si crees que esto es un problema o no, es principalmente una cuestión filosófica más que técnica.


Creo que hay una forma de excluir (quote []), en lugar de ilusiones, como contexto: descartar la idea de tratar 'datumcomo azúcar sintáctica para (quote datum), entonces '[], como "[]"ya no es un contexto. Las macros del esquema se han oscurecido de quotetodos modos.
día

No entiendo tu comentario, @day. ¿Por qué la relación entre 'datumy (quote datum)cambia algo?
Sam Tobin-Hochstadt

Si se quotetrata de una construcción del lenguaje y se 'datumdesugará (quote datum), es más probable que las personas argumenten que (quote [])es un contexto. Si eliminamos quotedel lenguaje central, pero admitimos la 'datumsintaxis literal , entonces es menos probable que lo argumenten porque "[]"se sabe que lo similar no es un contexto.
día

@day, esto es un malentendido. No hay una definición correcta de "contexto". Es solo que diferentes contextos admiten diferentes nociones de equivalencia contextual. Por ejemplo, el espacio en blanco es semánticamente significativo en el "[]"contexto, pero no en el (quote [])contexto. Lo que la "gente" podría discutir no es ni aquí ni allá.
Sam Tobin-Hochstadt

Estoy de acuerdo en que no hay una definición correcta de contexto. Pero hay una definición tradicional basada en la sintaxis abstracta, la que Wand usa en su artículo y Meyer usa en su artículo, para cuestionar el estado de equivalencia contextual de Lisp. Lo que sugirió es reemplazar la definición tradicional de contexto con el contexto de evaluación. Lo que sugerí es mantener la definición tradicional de contexto, eliminando quotede la sintaxis abstracta, pero apoyando la sintaxis literal (concreta) de la cita (insignificante en el espacio). Por lo que puedo ver, ambas formas conducen a "No" a la pregunta original.
día
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.