1. Fakt: Każdy DFA jest NFA
2. Twierdzenie#1
Niech L będzie językiem akceptowanym przez NFA. Wówczas istnieje DFA akceptujący język L.**
2.1. D-d
Niech
- NFA M=(Q,Σ,δ,q0,F)
- DFA M′=(Q′,Σ,δ′,q0′,F′) symulujący równoległe wszystkie przejścia przez automat M.
Q′=2QF′⊆Q′q0′={q0}δ′(q,a)sˊledzimy wszystkie podzbiory stanoˊwMq∈F′⇔∃p∈qp∈F=p∈q⋃δ(p,a)
>Dowód indukcyjny po długości wczytywanego słowa.
2.2. Przykład NFA → DFA
Mamy NFA M=({q0,q1},{0,1},δ,q0,{q1}) | δ | 0 | 1 | | ——– | ————– | ————– | | q0 | {q0,q1} | {q1} | | q1 | ∅ | {q0,q1} |
Równoważny DFA M′=({{q0},{q1},{q0,q1},∅},{0,1},δ′,{q0},{{q1}}) | δ′ | 0 | 1 | | ————– | ————– | ————– | | {q0} | {q0,q1} | {q1} | | {q1} | ∅ | {q0,q1} | | {q0,q1} | {q0,q1} | {q0,q1} | | ∅ | ∅ | ∅ |
3. Fakt: Każdy NFA jest NFAϵ
4. Twierdzenie#2
Jeśli L jest językiem akceptowanym przez NFAϵ to jest również akceptowany przez NFA.
4.1. D-d
Niech
- NFAϵ M=(Q,Σ,δ,q0,F)
- NFA M′=(Q,Σ,δ′,q0,F′)
F′={F∪{q0}Fjesˊli z q0 moz˙na dojsˊcˊ do q∈F ϵ-przejsˊciamioth.
δ′(q,a)=x∈(ϵ∗aϵ∗)⋃δ^(q,x)
M′ nie ma ϵ-przejść. Równość języków przez dowód indukcyjny po długości słowa.
5. Twierdzenie#3
Niech r będzie wyrażeniem regularnym opisującym język L. Wówczas istnieje NFAϵ, który akceptuje L.
5.1. D-d
Indukcja po budowie wyrażenia regularnego.
- ∅
- ϵ={ϵ}
- ∀a∈Σa={a}
(r+s)
doklejamy nowe stany początkowe i końcowe
rs
łączymy w łańcuch
r∗
∣r∣=n jak duży, ile stanów ma automat
O(n)
6. Twierdzenie#4
Jeżeli L jest akceptowany przez DFA, to L jest reprezentowany przez wyrażenie regularne.
6.1. D-d
Niech L będzie akceptowany przez DFA M=({q1,…,qn},Σ,δ,q1,F).
Zdefiniujmy Rijk={x∈Σ∗: δ^(qi,x)=qj∧∧ (∀y=prefix(x),y=ϵ,y=x)(δ^(qi,y)=ql⟹l≤k)}
Innymi słowy, Rijk to zbiór wszystkich słów, z jakimi można przejść ze stanu qi do stanu qj używając po drodze tylko pierwszych k stanów (i,j mogą być większe od k).
Rijk — wszystkie łańcuchy, z którymi możemy przejść z qi do qj.
L=qj∈F⋃R1jn
Definicja rekurencyjna: Rij0={{a: δ(q1,a)=qj}{a: δ(qi,a)=qi}∪{ϵ}i=ji=j Rijk=Rikk−1(Rkkk−1)∗Rkjk−1∪Rijk−1k>0
Łatwo skonstruować wyrażenie regularne rijk opisujące Rijk.
Dowód poprawności przez indukcję po k.
6.2. Przykład
~ dla ({q1,q2},{0,1},{((q1,0),q1),((q1,1),q2),((q2,0),q1),((q2,1),q2)},q1,{q1})
rijk=rikk−1(rkkk−1)∗rkjk−1+rijk−1k>0
r110r120r210r220r111r121r211r221r112=0+ϵ=1=0=1+ϵ=(0+ϵ)+(0+ϵ)(0+ϵ)∗(0+ϵ)≡0∗=1+(0+ϵ)(0+ϵ)∗1≡0∗1=0+0(0+ϵ)∗(0+ϵ)≡00∗=(1+ϵ)+0(0+ϵ)∗1≡ϵ+0∗1=0∗+0∗1(0∗1)∗0∗0
A tak naprawdę, najprostszym wyrażeniem regularnym dla tego języka jest ϵ+(0+1)∗0