Inilah pertanyaan "trek B" jika ada. Ringkasan: hal pertama yang saya pikirkan ketika saya mencoba memberikan semantik untuk program-program non-deterministik menghasilkan semantik di mana saya tidak dapat membuktikan hal-hal tentang loop yang hanya mengakhiri non-deterministik. Tentunya seseorang telah mengetahui apa yang harus dilakukan dalam situasi ini, atau setidaknya menunjukkan bahwa itu sulit, tetapi saya tidak tahu bagaimana cara mencarinya (karena itu tag "permintaan referensi").
Latar Belakang
Saya ingin memodelkan bahasa sementara dengan non-determinisme. Saya pikir ini adalah cara yang jelas (atau paling tidak naif) untuk memodelkan bahasa seperti itu dengan domain kekuasaan Smyth, tetapi koreksi saya jika saya salah. Kami akan memodelkan arti perintah dalam bahasa ini adalah sebagai fungsi yang domainnya adalah himpunan negara dan yang kodomainnya adalah himpunan , di mana adalah elemen paling tidak mewakili non-terminasi dan adalah set negara.
Kami menginterpretasikan perintah sebagai peta dari status ke peristiwa non-penghentian atau untuk menetapkan status yang mewakili kemungkinan hasil. adalah pilihan non-deterministik.
- jika , jika tidak
- jika atau , jika tidak
- ⟦ P ⟧ σ = ⊥ ⟦ Q ⟧ τ = ⊥ τ ∈ ⟦ P ⟧ σ ⋃ τ ∈ ⟦ P ⟧ σ ⟦ Q ⟧ τ jika atau untuk beberapa , jika tidak
Ada perintah parsial lengkap yang diarahkan , di mana untuk dan jika dan adalah set yang tepat dan , dan kami dapat memperluas ini ke fungsi dari ke menunjuk: jika untuk setiap , dan adalah fungsi yang memetakan setiap negara bagian ke .⊥ ⊑ 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 ⊥ ⊥,
Arti dari sebuah loop adalah adalah batas paling atas dari rantai , di mana jika , selain itu jika atau untuk beberapa , jika tidak . (Definisi ini mengasumsikan bahwa baru saja saya definisikan adalah Scott berkelanjutan, tetapi saya pikir aman untuk mengabaikannya.)f ⊥ ⊑ f ( f ⊥ ) ⊑ f ( f ( f ⊥ ) ) ⊑ ... f ( g ) ( σ ) = { σ } ⟦ E ⟧ ( σ ) = f a l s e ⊥ ⟦ P ⟧ σ = ⊥τ ∈ ⟦ P ⟧ σ ⋃ τ ∈ ⟦ P ⟧ σ g ( τ ) f
Pertanyaan
Pertimbangkan program ini:
b : = t r u e ; w h i l e b d o
Secara intuitif, ini adalah loop yang dapat mengembalikan bilangan positif positif atau tidak berakhir, dan yang sesuai dengan apa yang dapat kita buktikan tentang loop ini menggunakan prasyarat liberal terlemah (dimungkinkan untuk menunjukkan bahwa adalah sebuah loop invarian). Namun, karena loop memiliki kemampuan untuk tidak mengakhiri (kita dapat memperbaiki pilihan non-deterministik oleh program yang selalu mengambil cabang kanan), arti dari program ini diberikan setiap keadaan awal adalah . (Kurang informal: fungsi yang memetakan keadaan mana saja di mana salah untuk dirinya sendiri dan setiap keadaan di mana adalah benar untuk adalah titik tetap dari digunakan untuk mendefinisikan loop.)⊥ b b ⊥ f
Ini berarti bahwa semantik naif yang saya usulkan tidak sesuai dengan cara yang saya harapkan dapat beralasan tentang program. Saya menyalahkan semantik saya, tetapi tidak bisa memperbaikinya.