Ecco una domanda "traccia B" se ce n'è mai stata una. Riepilogo: la prima cosa a cui penso quando provo a dare una semantica a programmi non deterministici si traduce in una semantica in cui non posso provare cose su loop che terminano solo in modo non deterministico. Sicuramente qualcuno ha capito cosa fare in questa situazione, o almeno ha sottolineato che è difficile, ma non so come cercarlo (da qui il tag "richiesta di riferimento").
sfondo
Voglio modellare un linguaggio while con non determinismo. Penso che questo sia il modo ovvio (o almeno l'ingenuo) di modellare un linguaggio del genere con un powerdomain di Smyth, ma correggimi se sbaglio. Modelleremo il significato di un comando in questo linguaggio come una funzione il cui dominio è l'insieme degli stati e il cui codice è l'insieme , dove è un elemento minimo che rappresenta la non terminazione e è il gruppo di potere degli stati.
Interpretiamo i comandi come mappe dagli stati all'evento di non terminazione o ad insiemi di stati che rappresentano possibili esiti. è una scelta non deterministica.P ⊛ Q
- se , altrimenti
- se o , altrimenti
- ⟦ P ⟧ σ = ⊥ ⟦ Q ⟧ T si = ⊥ T si ∈ ⟦ P ⟧ σ ⋃ T si ∈ ⟦ P ⟧ σ ⟦ Q ⟧ T si se o per alcuni , altrimenti
Esiste un ordine parziale completo diretto , in cui per qualsiasi e se sia che sono set corretti e , e possiamo estenderlo alle funzioni da a puntualmente: se per ogni e è la funzione che mappa ogni stato a .⊥ ⊑ 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 ⊥ ⊥
Il significato di un ciclo è è il limite inferiore minimo della catena , dove se , altrimenti se or per alcuni , altrimenti . (Questa definizione presuppone che la ho appena definito sia Scott continua, ma penso che sia sicuro lasciarlo da parte.)f ⊥ ⊑ f ( f ⊥ ) ⊑ f ( f ( f ⊥ ) ) ⊑ ... f ( g ) ( σ ) = { σ } ⟦ E ⟧ ( σ ) = f un l s e ⊥ ⟦ P ⟧ σ = ⊥
Domanda
Considera questo programma:
Intuitivamente, questo è un ciclo che può restituire qualsiasi numero pari positivo o non terminare e che corrisponde a ciò che possiamo provare su questo ciclo usando il presupposto liberale più debole (è possibile mostrare che è un ciclo invariante). Tuttavia, poiché il ciclo ha la capacità di non terminare (possiamo raffinare la scelta non deterministica dal programma che prende sempre il ramo di destra), il significato di questo programma dato qualsiasi stato iniziale è . (Meno informalmente: la funzione che mappa qualsiasi stato in cui è falso a se stesso e qualsiasi stato in cui è fedele a è un punto fisso di utilizzato per definire il ciclo.)⊥ b b ⊥ f
Ciò significa che la semantica ingenua che ho proposto non corrisponde al modo in cui mi aspetto di poter ragionare sui programmi. Incolpo la mia semantica, ma non so come risolverli.