J'ai une réponse à cette question qui est peut-être nouvelle. En fait, j'y réfléchis encore depuis environ 6 mois, et cela n'a pas encore été écrit dans les journaux.
La thèse générale est que les principes du raisonnement relationnel comme les «relations logiques», les «simulations» et même les «invariants» sont des manifestations de l'abstraction de données ou de la dissimulation d'informations. Partout où se cachent des informations, ces principes surgissent.
Les premiers à le découvrir ont été les théoriciens des automates. Les automates ont un état masqué. Vous avez donc besoin d'un raisonnement relationnel pour parler de leur équivalence. Les théoriciens des automates ont lutté pendant un certain temps avec les homomorphismes, ont abandonné et ont proposé une notion appelée "couverture relationnelle", qui est une forme de relations de simulation.
Milner a repris l'idée dans un article peu connu mais très fondamental intitulé " Une notion algébrique de simulation entre programmes " en 1971. Hoare la connaissait et l'a utilisée pour arriver à " Preuve d'exactitude des représentations de données " en 1972 (mais utilisée l'abstraction fonctionne à la place des relations parce qu'il pensait qu'elles étaient "plus simples"). Il a par la suite retiré la revendication de simplicité et est retourné à l'utilisation des relations dans " Raffinement des données raffiné ". Reynolds a utilisé le raisonnement relationnel dans " Craft of Programming"", Chapitre 5 (1981). Il pensait que les relations étaient plus naturelles et plus générales que les fonctions d'abstraction. Si vous revenez en arrière et lisez ce chapitre, vous trouverez des idées de paramétrie relationnelle qui rôdent, attendant d'être découvertes. Effectivement, deux ans plus tard, Reynolds a publié "Types, abstraction et polymorphisme paramétrique" (1983).
Il semble que toutes ces idées n'aient rien à voir avec les types, mais elles le font vraiment. Langues stateful et modèles ont intégré abstraction de données. Vous n'avez pas besoin de définir un "type de données abstrait" pour masquer les informations. Vous déclarez simplement une variable locale et la cachez. Nous pouvons l'enseigner aux étudiants de première année dans les classes Java dans les premières semaines. Pas de transpiration.
Les langages et modèles fonctionnels, en revanche, doivent obtenir leurs informations cachées via des types . Les modèles fonctionnels n'ont pas d'abstraction de données intégrée. Nous devons l'ajouter explicitement, en utilisant ou ∃ . Donc, si vous traduisez un langage avec état dans un langage fonctionnel, vous remarquerez que tout l'état local est traduit en variables de type. Pour une description explicite de la façon dont cela fonctionne, voir mon article " Objets et classes dans des langages de type algol ", mais les idées viennent vraiment de Reynolds 1981 ("L'essence d'Algol"). Nous comprenons mieux ces idées classiques maintenant.∀∃
Prenez deux machines et M ′ que vous souhaitez prouver équivalentes. Milner 1971 dit, définit une relation entre les états de M et M ' et montre que les deux machines préservent la relation. La paramétricité de Reynolds dit, pensez aux états des machines comme appartenant aux types X et XMM′MM′X . Définissez une relation R entre eux. Si les machines sont de type F ( X ) et F ( X ′ ) , paramétrées par les types de leurs états, alors vérifiez que les deux machines sont liées par la relation FX′RF(X)F(X′) . F(R)
Ainsi, les simulations et la paramétricité relationnelle sont essentiellement la même idée . Ce n'est pas simplement une ressemblance superficielle. Le premier est fait pour les langues avec état où il y a une abstraction des données intégrée. Ce dernier est fait pour les langages sans état où l'abstraction des données est obtenue via des variables de type.
Et les relations logiques alors? À première vue, les relations logiques semblent être une idée plus générale. Alors que la paramétricité explique comment relier les variables de type au sein d'un même modèle, les relations logiques semblent relier les types entre différents modèles. (Dave Clarke a écrit une brillante exposition de cela plus tôt.) Mais mon sentiment est (et cela doit encore être démontré) qu'il s'agit d'un exemple d'une forme de paramétrie de type supérieur qui n'a pas encore été formulée. Restez à l'écoute pour plus de progrès sur ce front.
[Note ajoutée] Le lien entre les relations logiques et les simulations est discuté dans notre récent article Logical relations and parametricty: A Reynolds program for Category Theory and Programming Languages .