-title: ωオートマトン オートマトンは入力を受け付けるかどうかを問題にするので計算は有限時間に終わる。 しかし、サーバなどの計算は終了することは想定されてない。入力が無限にある場合を考えたい。 例えば、信号機は停まらずにずーっと動くことが期待されていて、正しい信号機の動作とそうでない動作がある。そして信号機はオートマトン的に動作している。 --ωオートマトンの定義 オートマトンの定義は同じものを用いる。ただし、入力は無限にある。 record Automaton ( Q : Set ) ( Σ : Set ) : Set where field δ : Q → Σ → Q astart : Q aend : Q → Bool automaton の定義にはもともと入力の実装が何かは記述されていない。 Agda では無限の長さのリストを扱うことはできない。その代わり、自然数 n から入力Σを生成する関数( ℕ → Σ )を用いる。 これを用いて、 ω-run : { Q Σ : Set } → (Ω : Automaton Q Σ ) → ℕ → ( ℕ → Σ ) → Q ω-run Ω zero s = astart Ω ω-run Ω (suc n) s = δ Ω (ω-run Ω n s) ( s n ) と言う形でオートマトンが無限に実行される。 この無限長の入力をどう受け付けるかを定義する必要がある。これには二通りの方法がある。 record Buchi { Q Σ : Set } (Ω : Automaton Q Σ ) ( S : ℕ → Σ ) : Set where field from : ℕ stay : (n : ℕ ) → n > from → aend Ω ( ω-run Ω n S ) ≡ true record Muller { Q Σ : Set } (Ω : Automaton Q Σ ) ( S : ℕ → Σ ) : Set where field next : (n : ℕ ) → ℕ infinite : (n : ℕ ) → aend Ω ( ω-run Ω (n + (next n)) S ) ≡ true Buchi ではある時刻から先では、aend で定義される状態の集合にずーっと留まる。Muller ではaendで定義されるある状態の集合を無限回通る。 --ωオートマトンと様相論理 これらは時間の様相を表す論理に関係している。     [] p ずーっとpが成立する     <> p いつかpが成立する これを組み合わせると     <> [] p いつからか、ずーっとpが成立するようになる     [] <> p ずーっと、いつかpが起きる [] はbox、<>はdiamonと呼ばれたりする。 [] p = ¬ ( <> ¬ p ) <> p = ¬ ( [] ¬ p ) である。[] <> p をωオートマトンとして考えることができる。 ¬ p ------------> [] <> p * [] <> p <----------- p p と ¬ p で二つの状態 ( [] <> p * と [] <> p)を行き来する。 data States3 : Set where ts* : States3 ts : States3 transition3 : States3 → Bool → States3 transition3 ts* true = ts* transition3 ts* false = ts transition3 ts true = ts* transition3 ts false = ts mark1 : States3 → Bool mark1 ts* = true mark1 ts = false ωa1 : Automaton States3 Bool ωa1 = record { δ = transition3 ; astart = ts* ; aend = mark1 } ここで、[] <> p * ( 上では ts* ) を無限回通れば、 [] <> p が成立していることになる。(Muller automaton ) これの否定は、<> [] ( ¬ p ) ということになる。これは、ある時点からずーっと ¬ p が続く。(Buchi automaton )