Aquí hay una pregunta de "pista B" si alguna vez hubo una. Resumen: lo primero en lo que pienso cuando intento dar una semántica a los programas no deterministas resulta en una semántica donde no puedo probar cosas sobre los bucles que solo terminan de manera no determinista. Seguramente alguien ha resuelto qué hacer en esta situación, o al menos señaló que es difícil, pero no sé cómo buscarlo (de ahí la etiqueta de "solicitud de referencia").
Antecedentes
Quiero modelar un lenguaje while con no determinismo. Creo que esta es la forma obvia (o al menos ingenua) de modelar un lenguaje de este tipo con un dominio de poder Smyth, pero corrígeme si me equivoco. Modelaremos el significado de un comando en este lenguaje como una función cuyo dominio es el conjunto de estados y cuyo codominio es el conjunto P ( S ) ⊥ = { ⊥ } ∪ P ( S ) , donde ⊥ es un elemento mínimo representando la no terminación y P ( S ) es el conjunto de poder de los estados.
Interpretamos los comandos como mapas de los estados al evento de no terminación ⊥ o a conjuntos de estados { σ 1 , σ 2 , ... } que representan posibles resultados. P ⊛ Q es una elección no determinista.
- si ⟦ E ⟧ sigma = t r u e , de lo contrario ⟦ Q ⟧ sigma
- si ⟦ P ⟧ sigma = ⊥ o ⟦ Q ⟧ sigma = ⊥ , de lo contrario ⟦ P ⟧ sigma ∪ ⟦ Q ⟧ sigma
- si ⟦ P ⟧ sigma = ⊥ o ⟦ Q ⟧ tau = ⊥ para algunos tau ∈ ⟦ P ⟧ sigma , de lo contrario ⋃ tau ∈ ⟦ P ⟧ sigma ⟦ Q ⟧ tau
Hay un orden parcial completo dirigido , donde ⊥ ⊑ S ′ para cualquier S ′ ∈ P ( S ) ⊥ y S 1 ⊑ S 2 si S 1 y S 2 son conjuntos adecuados y S 1 ⊇ S 2 , y podemos extender esto a las funciones f de S a P ( S ) ⊥ puntual: f 1 ⊑ f 2si para cada σ , y f ⊥ es la función que asigna cada estado a ⊥ .
El significado de un bucle es es el extremo superior de la cadena f ⊥ ⊑ f ( f ⊥ ) ⊑ f ( f ( f ⊥ ) ) ⊑ ... , donde f ( g ) ( σ ) = { σ } si ⟦ E ⟧ ( σ ) = f un l , de lo contrario ⊥ si ⟦ P ⟧ sigma = ⊥ o g ( τ ) = ⊥ para algunos τ ∈ ⟦ P ⟧ sigma , de lo contrario ⋃ τ ∈ ⟦ P ⟧ sigma g ( τ ) . (Esta definición supone que la f que acabo de definir es Scott continua, pero creo que es seguro dejar eso de lado).
Pregunta
Considere este programa:
b : = t r u e ; w h i l e b d o
Intuitivamente, este es un bucle que puede devolver cualquier número par positivo o no terminar, y eso corresponde a lo que podemos probar sobre este bucle utilizando la precondición liberal más débil (es posible mostrar que es un bucle invariante). Sin embargo, debido a que el ciclo tiene la capacidad de no terminar (podemos refinar la elección no determinista del programa que siempre toma la rama derecha), el significado de este programa dado cualquier estado inicial es ⊥ . (Menos informalmente: la función que mapea cualquier estado donde b es falso para sí mismo y cualquier estado donde b es verdadero para ⊥ es un punto fijo de la f usado para definir el bucle.)
Esto significa que la semántica ingenua que propuse no corresponde en la forma en que espero poder razonar sobre los programas. Culpo a mi semántica, pero no sé cómo solucionarlos.