Pour quelles langues existe-t-il déjà une théorie de l'équivalence observationnelle?

11

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 1t1t2vt1vt2vv

É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 bt1t2CC[t1]C[t2]C[t1]C[t2]unebunebé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.t1t2

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.
Blaisorblade
la source
1
Pour les théories de type, définir une congruence contextuelle opérationnelle devrait être facile, car tous les programmes se terminent. Définir une notion d'observation à un type de base (par exemple terminaison, écrit , au type Unit), puis dire P Q pour tous les contextes bien typés et fermants C [ ] de type base, nous avons C [ P ] ssi C [ Q ] . Avec les PTS, c'est un peu plus compliqué, car il peut y avoir non-résiliation. PQC[]C[P]C[Q]
Martin Berger
@MartinBerger: c'est l'idée que je suggère, mais la prouver directement est étonnamment difficile, car vous devez faire des preuves pour tous les C (je l'expliquerai mieux dans la question). De plus, si tous les programmes se terminent, la définition que vous utilisez, telle qu'elle est donnée, identifie tous les programmes.
Blaisorblade
Votre PTS n'a-t-il que des fonctions de type informatique? Si alors, alors cette excellente question (et réponses) semble indiquer que l' équivalence est suffisante pour terminer les systèmes de type pur - et elle explique bien comment définir l'équivalence contextuelle pour terminer les calculs. Je pense que l'utilisation des valeurs fondamentales est la bonne façon de définir l'équivalence contextuelle, et la terminaison n'est qu'un raccourci commode de mérite douteux. βη
gasche
1
@Blaisorblade Désolé oui, si vous utilisez la terminaison comme observable, alors vous avez raison. Désolé, je coupais et collais la définition de turing des langues déterministes complètes. Si vous avez des fonctions de terminaison, vous pouvez utiliser un observable de base différent. Par exemple chez les booléens: ... ssi C [ Q ] t r u e . La quantification dans tous les contextes est toujours un problème. La manière standard de traiter cela est de définir une deuxième relation qui (1) est saine par rapport à C[P]trueC[Q]trueet (2) facile à manipuler, par exemple une notion de bisimilarité ou de relation logique. Dépend de l'application.
Martin Berger
1
@Blaisorblade Probablement. Les théoriciens de la concurrence le font intensément depuis longtemps, car avec des processus concurrents, il est beaucoup moins clair quelle notion d'équivalence utiliser. Cela a conduit à une division du travail: utiliser une sémantique basée sur la réduction avec quantification sur les contextes pour définir la notion d'équivalence, puis utiliser des bisimulations ou des traces sur les transitions étiquetées pour prouver l'équivalence (ou son absence). Une grande question de recherche ouverte dans la théorie de la concurrence est de savoir comment passer de la première à la seconde de manière algorithmique.
Martin Berger

Réponses:

4

Une sémantique dénotationnelle compositionnelle d'un langage de programmation (un domaine-théorique ou un jeu-théorique, par exemple) estadéquatsi des termes sémantiquement égaux impliquent qu'ils sont équivalents en termes d'observation: [[[-]]

[[t1]]=[[t2]]t1t2.
Andrej Bauer
la source
Merci pour la réponse, mais -1: Bien que je sois d'accord, la question mentionne les systèmes de type pur - AFAICS, une sémantique dénotationnelle pour les systèmes de type pur est un problème ouvert, donc je pense qu'une réponse devrait pointer vers une sémantique dénotationnelle. (En fait, si j'avais une sémantique dénotationnelle, je me passerais complètement de la sémantique opérationnelle, comme mentionné dans la question). (Mais désolé pour la question trop longue.)
Blaisorblade
@MartinBerger, je ne comprends pas vos critiques. Le PO demande des méthodes pour montrer l'équivalence d'observation, j'en mentionne une courante, et ensuite vous objectez qu'il existe d'autres moyens qui évitent la méthode?
Andrej Bauer
2
@Blaisorblade, eh bien vous n'aurez qu'à inventer une sémantique dénotationnelle pour les systèmes de type pur, n'est-ce pas? :-) Mais plus sérieusement, je demanderai à Alex Simpson, il connaîtrait mieux la sémantique dénotationnelle pour de telles choses.
Andrej Bauer
@AndrejBauer Ce n'était pas censé être une critique, plutôt un addendum.
Martin Berger
2

η

cody
la source
1
Je ne pense pas que le doctorat de Streicher concerne le PTS. Il s'agit de la sémantique du calcul des constructions et des résultats d'indépendance via la sémantique de fiabilité. Voyez ici .
Martin Berger
Merci pour la clarification! J'ai bien peur que le lien soit rompu (et difficile à réparer avec le lien minifié).
cody
Le lien était vers la table des matières du livre ici . J'espère que celui-ci fonctionne mieux.
Martin Berger
λ
@MartinBerger: parlez-vous de sémantique de réalisabilité?
Dominique Devriese
0

Cette réponse suggère une approche du problème. (Les commentaires sont les bienvenus).

Le chapitre 49 de PFPL discute, à la fois, les notions équivalentes d'équivalence observationnelle et d'équivalence logique. L'équivalence logique est la même relation utilisée pour énoncer la paramétricité, de sorte que le cœur du chapitre est une preuve de paramétricité pour le système F.

Les travaux sur la paramétricité pour PTS, AFAICT, ne discutent pas de la relation avec l'équivalence observationnelle. En fait, pour même définir l'équivalence observationnelle, à moins que vous n'ayez pas de terminaison, vous avez besoin d'un type de sol positif (naturels, booléens) à utiliser pour les observations.

Cependant, le théorème clé (PFPL 47.6, 48.3, 49.2) pour relier les deux relations est prouvé indépendamment du langage spécifique:

L'équivalence d'observation est la congruence cohérente la plus grossière sur les expressions.

Ensuite, pour montrer que l'équivalence logique implique l'équivalence observationnelle, il suffit de montrer que l'équivalence logique est une congruence cohérente. Cependant, l'autre sens demande un peu plus de travail: en particulier, pour montrer que l'équivalence logique est une congruence, on procède par induction sur des contextes.

n + 1 = 1 + nVecN nnVecNVecNn+1=1+nVec (n + 1)Vec (1 + n)n + 11 + n

Blaisorblade
la source