Pour une preuve d'exactitude, je cherche une notion utilisable d'équivalence de programme pour les systèmes de type pur de Barendregt (PTS); manque cela, pour suffisamment de systèmes de types spécifiques. Mon but est simplement d'utiliser la notion, pas de la rechercher pour elle-même.
Cette notion devrait être " extensionnelle " - en particulier, pour prouver que , il devrait suffire de prouver que pour toutes les valeurs v du type approprié.t 1v
Équivalence dénotationnelle
L'équivalence dénotationnelle satisfait facilement tous les bons lemmes, mais une sémantique dénotationnelle pour le PTS arbitraire semble plutôt difficile - elle semblerait déjà difficile pour le système F.
Équivalence contextuelle / observationnelle
L'alternative évidente est alors diverses formes d'équivalence contextuelle (deux termes sont équivalents si aucun contexte fondamental ne peut les distinguer), mais sa définition n'est pas immédiatement utilisable; les différents lemmes ne sont pas triviaux à prouver. Ont-ils été prouvés pour PTS? Alternativement, la théorie serait-elle une "extension évidente", ou y a-t-il des raisons de croire que la théorie serait significativement différente?
EDIT: Je n'ai pas dit ce qui est difficile ci-dessus.
Partie facile: la définition
La définition de l'équivalence n'est pas trop difficile, et la définition apparaît dans de nombreux articles (à partir au moins de l'étude de Plotkin 1975 sur le PCF, sinon plus tôt - la source pourrait être la thèse de doctorat de Morris de 1968). Nous si pour tous les contextes terrestres , - c'est-à-dire et donnent le même résultat . Vous avez quelques choix ici avec beaucoup d'alternatives: Par exemple, dans un langage fortement normalisant, si vous avez un type de sol naturel, vous pouvez dire que les contextes au sol sont ceux qui renvoient des naturels, puis signifie que et C C [ t 1 ] ≃ C [ t 2 ] C [ t 1 ] C [ t 2 ] a ≃ b a bévaluer au même nombre. Avec la non-terminaison, pour des langages raisonnables, il suffit d'utiliser "X se termine" comme observation, car si deux programmes sont équivalents lors de l'observation de la terminaison, ils sont également équivalents lors de l'observation du résultat.
Partie difficile: les preuves
Cependant, ces articles n'expliquent souvent pas à quel point il est difficile d'utiliser réellement cette définition. Toutes les références ci-dessous montrent comment traiter ce problème, mais la théorie nécessaire est plus difficile qu'on ne le pense. Comment prouver que ? Faisons-nous réellement l'analyse de cas et l'induction sur des contextes? Tu ne veux pas faire ça.
Comme le souligne Martin Berger, vous souhaitez utiliser à la place soit la bisimulation (comme le fait Pitts) soit une relation d'équivalence logique (que Harper appelle simplement «l'équivalence logique»).
Enfin, comment prouvez-vous l'extensionnalité telle que définie ci-dessus?
Harper résout ces questions en 10 pages pour le système T, grâce à une intelligence et des relations logiques considérables. Pitts en prend plus. Certaines langues sont encore plus complexes.
Comment y faire face
En fait, je suis tenté de faire mes preuves conditionnellement à une théorie conjecturée de l'équivalence pour PTS, mais les théories réelles nécessitent des arguments non triviaux, donc je ne suis pas sûr de la probabilité qu'une telle conjecture soit valable.
Je connais (mais pas en détail) les œuvres suivantes:
- Andrew Pitts (par exemple dans ATTAPL pour un système F étendu et dans quelques articles, tels que les 58 pages "Théories opérationnelles de l'équivalence des programmes").
- Fondements pratiques des langages de programmation (chapitres 47 à 48), qui s'inspire de Pitts (mais prétend avoir des preuves plus simples).
- Une étude logique de l'équivalence des programmes . Je ne trouve pas de résumé en anglais, mais il semble dépenser beaucoup d'efforts pour les effets secondaires (références), ce qui semble une complication orthogonale.