Voici une question "piste B" s'il y en a jamais eu. Résumé: la première chose à laquelle je pense lorsque j'essaie de donner une sémantique à des programmes non déterministes se traduit par une sémantique où je ne peux pas prouver les choses sur les boucles qui ne terminent que la non-déterminisme. Certes, quelqu'un a trouvé quoi faire dans cette situation, ou du moins a souligné que c'est difficile, mais je ne sais pas comment le rechercher (d'où la balise "demande de référence").
Contexte
Je veux modéliser un tout-langage avec le non-déterminisme. Je pense que c'est la façon évidente (ou du moins naïve) de modéliser un tel langage avec un Powerdomain Smyth, mais corrigez-moi si je me trompe. Nous modéliserons la signification d'une commande dans ce langage comme une fonction dont le domaine est l'ensemble d'états et dont le codomaine est l'ensemble , où est le moindre élément représentant la non-terminaison et est le jeu de puissance des états.P ( S ) ⊥ = { ⊥ } ∪ P ( S ) ⊥ P ( S )
- if , sinon
- si ou , sinon
- ⟦ P ⟧ σ = ⊥ ⟦ Q ⟧ T permet = ⊥ T permet ∈ ⟦ P ⟧ σ ⋃ T permet ∈ ⟦ P ⟧ σ ⟦ Q ⟧ T permet si ou pour certains , sinon
Il y a un ordre partiel complet dirigé , où pour tout et si et sont tous deux des ensembles appropriés et , et nous pouvons l'étendre aux fonctions de à point par point: if pour chaque et est la fonction qui mappe chaque état sur .⊥ ⊑ S ′ S ′ ∈ P ( S ) ⊥ S 1 ⊑ S 2 S 1 S 2 S 1 ⊇ S 2 f S P ( S ) ⊥ f 1 ⊑ f 2 f 1 ( σ ) ⊑ f 2 ( σ ) σ f ⊥ ⊥
La signification d'une boucle est est la plus borne supérieure de la chaîne , où si , sinon if ou pour certains , sinon . (Cette définition suppose que le je viens de définir est Scott continu, mais je pense qu'il est prudent de laisser cela de côté.)f ⊥ ⊑ f ( f ⊥ ) ⊑ f ( f ( f ⊥ ) ) ⊑ ... f ( g ) ( σ ) = { σ } ⟦ E ⟧ ( σ ) = f un l s e ⊥ ⟦ P ⟧ σ = ⊥⋃ τ ∈ ⟦ P ⟧ σ g ( τ ) f
Question
Considérez ce programme:
b : = t r u e ; w h i l e b d o
Intuitivement, c'est une boucle qui peut retourner n'importe quel nombre pair positif ou ne pas se terminer, et cela correspond à ce que nous pouvons prouver à propos de cette boucle en utilisant la précondition libérale la plus faible (il est possible de montrer que est une boucle invariant). Cependant, parce que la boucle a la capacité de ne pas se terminer (nous pouvons affiner le choix non déterministe par le programme qui prend toujours la branche de droite), la signification de ce programme étant donné tout état initial est . (Moins officieusement: la fonction qui mappe tout état où est faux à lui-même et tout état où est vrai à est un point fixe du utilisé pour définir la boucle.)⊥ b b ⊥ f
Cela signifie que la sémantique naïve que j'ai proposée ne correspond pas à la façon dont je m'attends à pouvoir raisonner sur les programmes. Je blâme ma sémantique, mais je ne sais pas comment les corriger.