Completo completo frente a la abstracción completa de una traducción del programa

15

Los esfuerzos de verificación del compilador a menudo se reducen a demostrar que el compilador es completamente abstracto: que conserva y refleja las equivalencias (contextuales).

En lugar de proporcionar pruebas de abstracción completas, algunos trabajos de verificación de compiladores recientes (basados ​​en categorías) de Hasegawa [ 1 , 2 ] y Egger et. Alabama. [ 3 ] demuestran la integridad completa de varias traducciones de CPS.

Pregunta: ¿Cuál es la diferencia entre integridad completa y abstracción completa?

Para mí, la integridad parece una reflexión de equivalencia para una traducción y la plenitud parece ser una consecuencia de la preservación de equivalencia.

Nota : Tanto Curien [ 7 ] como Abramsky [ 8 ] exploran la relación entre definibilidad, abstracción completa y, hasta cierto punto, integridad completa. Sospecho que estos recursos pueden tener la respuesta a mi pregunta, pero después de una lectura superficial aún no lo he confirmado.

Algunos antecedentes : El término "totalidad completa" fue acuñado por Abramsky y Jagadeesan [ 4 ] para caracterizar la corrección de un modelo semántico de lógica lógica lineal multiplicativa.

Blute [ 5 ] proporciona la siguiente definición:

Deje F ser una categoría libre. Decimos que un modelo categórico M está completamente completo para F o que tenemos una integridad completa de F con respecto a M si, con respecto a alguna interpretación de los generadores, el functor libre único [[]]:FMETRO está lleno.

Hasta donde puedo decir, Hasegawa en [ 6 ] es el primero en adaptar la integridad completa para describir una traducción de programa en lugar de un modelo semántico categórico. En este caso, la traducción de Girard de cálculo lambda simplemente tipado al cálculo lambda lineal. Más tarde, en [ 1 ], define la integridad completa de la traducción CPS () como:

Γ;norte:(σo)oΓMETRO:σΓ;METRO=norte:(σo)o

(donde es un tipo base en el cálculo lambda lineal (lenguaje objetivo), pero no en el cálculo lambda computacional (lenguaje fuente)).o

Para mí, la definición de Hasegawa parece una plenitud y realmente debería combinarse con la integridad para obtener la integridad completa.

Egger et. Alabama. [ 3 ] define la integridad completa de una traducción CPS como una combinación de (1) integridad y (2) plenitud:()v

(1): Si y Θ v | - M v = ß eta N v : ! τ v entonces Θ M = λ c N : τΘMETRO,norte:τΘvEl |-METROv=βηnortev:!τvΘMETRO=λCnorte:τ

(2): Si entonces existe un término Θ M : τ tal que Θ v | - M v = ß eta t : ! τ vΘvEl |-t:!τvΘMETRO:τΘvEl |-METROv=βηt:!τv

(donde es la teoría de la ecuación computacional de Moggi)=λC


[1] " Efectos utilizados linealmente: transformaciones monádicas y CPS en cálculo lineal de Lambda ", Hasegawa 2002

[2] " Semántica del paso lineal de continuación en llamadas por nombre ", Hasegawa 2004

[3] " Traducciones de CPS de uso lineal en el cálculo del efecto enriquecido ", Egger et. Alabama. 2012

[4] " Juegos y completa integridad para la lógica lineal multiplicativa ", Abramsky y Jagadeesan 1992

[5] " Teoría de la categoría para lógicos lineales ", Blute 2003

[6] " Traducción de Girard y predicados lógicos ", Hasegawa 2000

[7] " Definibilidad y abstracción completa ", Curien 2007

[8] " Axiomas para la definibilidad y la integridad completa ", Abramsky 1999

Phillip Mates
fuente

Respuestas:

12

Desafortunadamente, hay demasiadas cosas pasando aquí. Entonces, es fácil mezclar las cosas. El uso de "completo" en "plenitud completa" y "abstracción completa" se refieren a ideas completamente diferentes de plenitud. Pero, también hay una conexión vaga entre ellos. Entonces, esta será una respuesta complicada.

Completo : "Sonido y completo" es una propiedad que desea que tenga una lógica tradicional con respecto a su semántica. La solidez significa que todo lo que pueda probar en la lógica es cierto en el modelo semántico. La integridad significa que lo que sea cierto en el modelo semántico es demostrable en la lógica. Decimos que una lógica es sólida y completa para un modelo semántico particular. Cuando llegamos a la lógica constructiva, como la teoría de tipo Martin-Lof o la lógica lineal, nos preocupamos no solo de si las fórmulas son demostrables, sino también de cuáles son sus pruebas. Una fórmula comprobable puede tener muchas pruebas y una lógica constructiva quiere mantenerlas separadas. Entonces, una semántica para una lógica constructiva implica especificar no solo si una fórmula es verdadera, sino también alguna noción semántica abstracta de "prueba" ("evidencia") de su verdad. Abramsky y sus colegas acuñaron el término "integridad completa" para significar que las pruebas en la lógica pueden expresar todas las pruebas semánticas en el modelo. Entonces, "completo" se refiere a las pruebas aquí. Una lógica "completa" puede demostrar todo lo que necesita. Una lógica "completamente completa" tiene todas las pruebas que necesita tener. Entonces, "integridad completa" significa "integridad constructiva" o "integridad de prueba". Esto no tiene nada que ver con la abstracción completa.

Abstracción completa : "Adecuado y completamente abstracto" es una propiedad que desea para el modelo semántico de un lenguaje de programación. (Tenga en cuenta la primera diferencia: ahora estamos tratando con las propiedades del modelo semántico, ¡no las propiedades del lenguaje!) Adecuación significa que, cuando dos términos tienen el mismo significado en el modelo semántico, son observacionalmente equivalentes en el lenguaje de programación (con respecto a alguna noción de ejecución). La abstracción completa significa que, si dos términos son observacionalmente equivalentes, tienen el mismo significado en el modelo semántico. Estas ideas pueden estar relacionadas con la solidez y la integridad, pero de una manera algo artificial. Si pensamos en el modelo semántico de un lenguaje de programación como una "lógica" o un "método de prueba" para hablar de equivalencia observacional, la adecuación significa que este método de prueba es sólido; abstracción completa significa que este método de prueba está completo. No existe una noción de "plenitud total"método de prueba (Pero, tal cosa es teóricamente posible, y uno de estos días alguien podría hacerlo).

En su caso, le interesan las traducciones en lugar de los modelos semánticos. Las propiedades de adecuación y abstracción completa se pueden ampliar para tratar las traducciones de la siguiente manera. Piensa en el idioma de destino como su "modelo semántico", es decir, un formalismo que de alguna manera comprende completamente. Si es así, tiene alguna noción de equivalencia. Luego, decimos que la traducción es adecuada si, cuando las traducciones de dos programas fuente son equivalentes en el idioma de destino, son observacionalmente equivalentes en el idioma fuente. Decimos que es completamente abstracto si, cuando dos programas de origen son observacionalmente equivalentes en el idioma de origen, sus traducciones son equivalentes en el idioma de destino.

τ(METRO)τ(norte)METROnorte
METROnorteτ(METRO)τ(norte)
METROnorteτ(METRO)τ(norte)

UNUN

norte:τ(UN).METRO:UN.τ(METRO)=norte

Ahora para la conexión vaga entre la totalidad completa y la abstracción completa. Probar que un modelo semántico o una traducción es completamente abstracto a menudo implica algo de definibilidad. Esto se debe a que nuestros idiomas son generalmente de orden superior. Por lo tanto, si el modelo semántico o el idioma de destino tiene demasiados "contextos", entonces podrá introducir nuestros términos o significados semánticos de manera indeseable y estropear su equivalencia. "Formas indeseables" significa que el lenguaje de programación en sí mismo no puede pincharlas. Por lo tanto, para obtener una abstracción completa, debemos asegurarnos de que los "contextos" disponibles en el modelo semántico o el idioma de destino provengan de alguna forma de aquellos en el idioma de origen. Tenga en cuenta que esto se relaciona con la propiedad de integridad completa.

¿Por qué queremos tales propiedades? No tiene nadaque ver con los compiladores! Queremos estas propiedades para afirmar que el idioma de origen se incrusta en el idioma de destino. Si estamos contentos con un idioma de destino particular (como ser limpio, comprensible, de alguna manera fundamental o dado por Dios), entonces, si el idioma de origen se incrusta en él, entonces podemos afirmar que no hay nada nuevo en el idioma de origen. Es solo un fragmento del idioma de destino que conocemos y amamos. Es solo azúcar sintáctico. Por lo tanto, las personas dan traducciones completamente abstractas para establecer que los idiomas de destino particulares son excelentes. A veces también los dan personas que tienen un lenguaje grande o complicado con el que lidiar. Entonces, en lugar de definir una semántica para él directamente, lo traducen a algún lenguaje central y luego le dan semántica al lenguaje central. Por ejemplo, el informe Haskell hace esto. Pero la abstracción completa de estas traducciones rara vez se prueba porque los idiomas de origen son grandes y complicados. La gente cree que la traducción es buena.

Una vez más, esto no tiene nada que ver con los compiladores. Los compiladores rara vez son adecuados o totalmente abstractos. ¡Y no necesitan serlo! Todo lo que un compilador debe hacer es preservar el comportamiento de ejecución de programas completos. El lenguaje de destino de un compilador es generalmente enorme, lo que significa que tiene muchos contextos que pueden confundir la equivalencia. Por lo tanto, los programas equivalentes en el idioma fuente casi nunca son contextualmente equivalentes cuando se compilan.

Uday Reddy
fuente
¿Qué quiere decir con decir que no hay ningún idioma que realmente "entendamos" completamente?
Martin Berger
¿Qué quiere decir con decir que nadie ha producido aún un modelo semántico que represente un método de prueba constructivo?
Martin Berger
1
Lo siento, pero las implicaciones para las "traducciones" me parecen equivocadas, en comparación con su texto anterior. Abstracción completa para, digamos, PCF pide M≅N⟹τ (M) ≅τ (N) (siendo τ la semántica denotacional e ignorando la necesidad de cambiar los símbolos): como usted dice, "Abstracción completa significa que, si dos términos son observacionalmente equivalentes, tienen el mismo significado en el modelo semántico ". ¡Pero su implicación es al revés (es decir, usted escribe τ (M) ≅τ (N) ⟹M≅N)! ¿O las traducciones funcionan de manera diferente a la semántica denotacional?
Blaisorblade
1
@ Blaisorblade: ¡Tienes toda la razón! Hice una corrección al texto de mi respuesta.
Uday Reddy
1
La abstracción completa también es de interés para la seguridad a nivel de idioma y, potencialmente, para la integración entre idiomas. Es decir, es útil saber que nada en el idioma de destino puede violar las abstracciones del idioma de origen.
Dmbarbour
5

Resumen: la integridad completa significa que la función de interpretación no solo es completa, sino también sobreyectiva en los programas. La abstracción completa no tiene requisitos de surjectivity.

[[.]]

  • UN[[UN]]

  • Γ[[Γ]]

  • ΓPAG:α[[Γ]][[PAG]]:[[α]]

[[.]]

PAGSQ     iff     [[PAG]]T[[Q]]

PAG,QST

PAGΓ,αSQ     iff     [[PAG]][[Γ]],[[α]]T[[Q]]
Γ,α,PAG,Q[[.]]

[[.]]

[[.]][[Γ]]Q:[[α]]ΓPAG:αQ=[[PAG]][[.]]

Martin Berger
fuente