Tengo una respuesta a esta pregunta que posiblemente sea nueva. De hecho, todavía lo estoy pensando durante los últimos 6 meses más o menos, y aún no se ha escrito en los periódicos.
La tesis general es que los principios de razonamiento relacional como "relaciones lógicas", "simulaciones" e incluso "invariantes" son manifestaciones de abstracción de datos u ocultamiento de información. Dondequiera que haya información oculta, estos principios surgen.
Las primeras personas en descubrirlo fueron los teóricos de los autómatas. Los autómatas tienen estado oculto. Por lo tanto, necesita un razonamiento relacional para hablar sobre su equivalencia. Los teóricos de los autómatas lucharon con los homomorfismos durante un tiempo, se rindieron y se les ocurrió una noción llamada "cobertura relacional", que es una forma de relaciones de simulación.
Milner recogió la idea en un artículo poco conocido pero muy fundamental llamado " Una noción algebraica de simulación entre programas " en 1971. Hoare lo sabía y lo usó para elaborar la " Prueba de corrección de las representaciones de datos " en 1972 (pero utilizó la abstracción funciona en lugar de las relaciones porque pensaba que eran "más simples"). Más tarde se retractó de la afirmación de simplicidad y volvió a usar las relaciones en " Refinamiento de datos refinado ". Reynolds utilizó el razonamiento relacional en " Craft of Programming"", Capítulo 5 (1981). Pensó que las relaciones eran más naturales y generales que las funciones de abstracción. Si regresa y lee este capítulo, encontrará ideas de paramétrica relacional que acechan, esperando ser descubiertas. Efectivamente, dos años después, Reynolds publicó "Tipos, abstracción y polimorfismo paramétrico" (1983).
Parece que todas estas ideas no tienen nada que ver con los tipos, pero realmente lo tienen. Los lenguajes y modelos con estado tienen abstracción de datos incorporada . No necesita definir un "tipo de datos abstractos" para ocultar la información. Simplemente declara una variable local y la oculta. Podemos enseñarlo a estudiantes de primer año en clases de Java en las primeras semanas. Sin sudar.
Los lenguajes y modelos funcionales, por otro lado, tienen que ocultar su información mediante tipos . Los modelos funcionales no tienen abstracción de datos incorporada. Tenemos que agregarlo explícitamente, usando o ∃ . Entonces, si traduce un lenguaje con estado a un lenguaje funcional, notará que todo el estado local se traduce en variables de tipo. Para una descripción explícita de cómo funciona esto, vea mi artículo " Objetos y clases en lenguajes similares a Algol ", pero las ideas realmente provienen de Reynolds 1981 ("La esencia de Algol"). Estamos entendiendo mejor esas ideas clásicas ahora.∀∃
Tome dos máquinas y M ′ que quiera probar equivalentes. Milner 1971 dice, define una relación entre los estados de M y M ' y muestra que las dos máquinas preservan la relación. La parametricidad de Reynolds dice: piense en los estados de las máquinas como pertenecientes a los tipos X y X ' . Defina una relación R entre ellos. Si las máquinas son de tipo F ( X ) y F ( X ' ) , parametrizadas por los tipos de sus estados, compruebe que las dos máquinas están relacionadas por la relación FMETROMETRO′METROMETRO′XX′RF( X)F( X′) . F( R )
Entonces, las simulaciones y la parametricidad relacional son esencialmente la misma idea . No es simplemente un parecido superficial. El primero está hecho para lenguajes con estado donde hay abstracción de datos incorporada. Este último está hecho para lenguajes sin estado donde la abstracción de datos se obtiene a través de variables de tipo.
¿Qué pasa con las relaciones lógicas entonces? En la superficie, las relaciones lógicas parecen ser una idea más general. Mientras que la parametricidad habla sobre cómo relacionar las variables de tipo dentro del mismo modelo, las relaciones lógicas parecen relacionar tipos en diferentes modelos. (Dave Clarke escribió una exposición brillante de esto antes). Pero mi sensación es (y aún debe demostrarse) que esta es una instancia de alguna forma de parametricidad de tipo superior que aún no se ha formulado. Estén atentos para más progreso en ese frente.
[Nota agregada] La conexión entre las relaciones lógicas y las simulaciones se discute en nuestro artículo reciente Relaciones lógicas y paramétrica: Un programa de Reynolds para teoría de categorías y lenguajes de programación .