Mercurial > hg > Members > kono > Proof > automaton
comparison a04/lecture.ind @ 331:9324852d3a17
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 07 Dec 2022 14:51:25 +0900 |
parents | a3fb231feeb9 |
children | 6f3636fbc481 |
comparison
equal
deleted
inserted
replaced
330:407684f806e4 | 331:9324852d3a17 |
---|---|
8 | 8 |
9 Regular Language は Concatについて閉じている。これは オートマトン A と B があった時に、z を前半 x ++ y | 9 Regular Language は Concatについて閉じている。これは オートマトン A と B があった時に、z を前半 x ++ y |
10 にわけて x を A が受理し、y を B で受理するものを、単一ののオートマトンで実現できると言う意味である。 | 10 にわけて x を A が受理し、y を B で受理するものを、単一ののオートマトンで実現できると言う意味である。 |
11 しかい、 これを決定性オートマトンで示すのは難しい。A ++ B の 境目がどこかを前もって予測することができないからである。 | 11 しかい、 これを決定性オートマトンで示すのは難しい。A ++ B の 境目がどこかを前もって予測することができないからである。 |
12 | 12 |
13 二つのオートマトンが、a0..ae b0..be につながる様子を図にしてみる。 | |
14 | |
13 <center><img src="fig/concat.svg"></center> | 15 <center><img src="fig/concat.svg"></center> |
14 | 16 |
15 このためには後半のB automatonを、前半のA automatonが終わる可能性がある時だけ、 | 17 このためには後半のB automatonを、前半のA automatonが終わる可能性がある時だけ、 |
16 一文字毎に増やしてやればよい。増やしたものの一つでも成功すればよい。Bが増えるので、その増えた状態を覚えておく必要がある。 | 18 一文字毎に増やしてやればよい。増やしたものの一つでも成功すればよい。Bが増えるので、その増えた状態を覚えておく必要がある。 |
17 | 19 |
18 an (Aのn番目の状態)と、b0...bn の部分集合 | 20 an (Aのn番目の状態)と、b0...bn の部分集合 |
19 | 21 |
20 状態はAの状態とBの状態の部分集合の組になる。 | 22 状態はAの状態とBの状態の部分集合の組になる。 |
21 | 23 |
24 --(a.*f)(b.*f) を考えよう | |
25 | |
26 abcfbffbcdf は、この正規表現にマッチする。a.*fb.*f と書いても良い。 | |
27 | |
28 a.*f は以下の状態遷移で書ける。 | |
29 | |
30 State は a0,a1,ae,af で、ae ならば受理。 | |
31 | |
32 δa a0 a = a1 | |
33 δa a1 f = ae | |
34 δa a1 _ = a1 | |
35 δa a0 _ = af | |
36 | |
37 b.*f もどうように書ける。 | |
38 | |
39 δb b0 b = b1 | |
40 δb b1 f = be | |
41 δb b1 _ = b1 | |
42 δb b0 _ = bf | |
43 | |
44 これを使って、a.*fb.*f を受理してみる。 | |
45 | |
46 <center><img src="fig/af-concat.svg"></center> | |
47 | |
48 受理パターンは二通りある。これを非決定性があるという。 | |
49 | |
50 この状況は、f がきた時に a.*f を終了しても良く、終了しなくてよいことから来てる。 | |
51 | |
52 なので、それを許すオートマトンを考える。 | |
53 | |
22 --非決定性オートマトン | 54 --非決定性オートマトン |
23 | 55 |
24 そこで、状態の部分集合からなるオートマトンを考える。 | 56 オートマトンの状態遷移は関数だった。 |
25 | 57 |
26 これは状態遷移が非決定的な場合に相当する。この場合では 1 が来た時に q1 に | 58 δ : Q → Σ → Q |
27 行っても、q2,q3 に行っても良い。q1から始める。 | 59 |
60 その代わりに、複数の状態を許したい。Aの場合なら、f でaeにもa1にもいって良い。 | |
61 それには、a1の状態で f がきた時に ae と a1 で true を返すようにすると良い。 | |
62 行き先の状態を Q → Bool で、部分集合として指定する。 | |
63 | |
64 record NAutomaton ( Q : Set ) ( Σ : Set ) | |
65 : Set where | |
66 field | |
67 Nδ : Q → Σ → Q → Bool | |
68 Nend : Q → Bool | |
69 | |
70 これを非決定性オートマトンという。 | |
71 | |
72 入力にそって、可能な状態の集合を作ってやれば良い。そうすると | |
73 決定性オートマトンにできる。 | |
74 | |
75 <center><img src="fig/afbf.svg"></center> | |
76 | |
77 | |
78 --もう一つの例 | |
79 | |
80 | |
81 この場合では 1 が来た時に q1 に行っても、q2,q3 に行っても良い。q1から始める。 | |
28 | 82 |
29 q1 0 → q1 | 83 q1 0 → q1 |
30 q1 1 → q1 | 84 q1 1 → q1 |
31 q1 1 → q2 | 85 q1 1 → q2 |
32 q1 1 → q3 | 86 q1 1 → q3 |
55 Nδ : Q → Σ → Q → Bool | 109 Nδ : Q → Σ → Q → Bool |
56 Nend : Q → Bool | 110 Nend : Q → Bool |
57 | 111 |
58 これを非決定性オートマトンという。Agda では同じ名前を使いまわしすることはできない(monomorpphism)ので、Nを付けた。 | 112 これを非決定性オートマトンという。Agda では同じ名前を使いまわしすることはできない(monomorpphism)ので、Nを付けた。 |
59 | 113 |
60 <a href="../agda/nfa.agda"> nfa.agda </a> | 114 たとえば、以下のように非決定的な状態遷移を定義する |
115 | |
116 transition3 : States1 → In2 → States1 → Bool | |
117 transition3 sr i0 sr = true | |
118 transition3 sr i1 ss = true | |
119 transition3 sr i1 sr = true | |
120 transition3 ss i0 sr = true | |
121 transition3 ss i1 st = true | |
122 transition3 st i0 sr = true | |
123 transition3 st i1 st = true | |
124 transition3 _ _ _ = false | |
125 | |
126 | |
127 <a href="../agda/src/nfa.agda"> nfa.agda </a> | |
61 | 128 |
62 --NAutomatonの受理と遷移 | 129 --NAutomatonの受理と遷移 |
63 | 130 |
64 非決定性オートマトンでは、一つの入力に対して、複数の状態が行き先になる。複数の状態を経由した経路のどれかが | 131 非決定性オートマトンでは、一つの入力に対して、複数の状態が行き先になる。複数の状態を経由した経路のどれかが |
65 入力を読み終わった後に、終了状態になれば受理されることになる。 | 132 入力を読み終わった後に、終了状態になれば受理されることになる。 |