[오토마타] 3. DFA와 NFA의 동등성

2025. 11. 27. 22:22·개인 공부

기본 정규 연산

우리는 지금까지, 결정적/비결정적 유한 오토마타의 정의를 배웠다. 앞으로는 오토마타와 정규언어들의 속성들에 대해 다룰 것이다. 그 이전에, 이 속성들을 익히거나 증명하는데에 유용한 도구상자들을 준비했다. 아래의 3가지 연산은 정규 연산(regular operation)이라 불리는 기본적인 언어들 간의 연산이다.

 

어떤 언어 A,B에 대하여 아래처럼 정의된다. Kleene는 클레이니, 클리네 등으로 발음하는 듯 하다.

 

우리는 자연수 $\times$ 자연수가 자연수라는 사실을 알고 있다. 이것을 수학에서는 자연수가 곱셈에 대하여 닫혀있다(closed)고 말한다. 마찬가지로, 정규언어는 위 3가지 기본 정규 연산에 대하여 닫혀있다. 예를 들어, 정규언어와 정규언어의 union은 정규언어다. 달리 말하면, 어느 두 언어가 유한오토마타로 표현된다면, 그 두 언어의 정규연산 결과를 표현하는 유한오토마타도 반드시 존재한다. 어떻게 증명할까? 각 정규언어 A,B를 인식하는 유한오토마타 $M_1,M_2$를 이용해서, $A \cup B, A \circ B, A^{*}$을 인식하는 유한 오토마타 M을 만들수 있다면, 증명이 완료된다. 더 엄밀하게는, 그렇게 만들어진 유한 오토마타 M이 정말 $A \cup B, A \circ B, A^{*}$를 인식하는지 정당성(correctness)을 검증하는 과정을 보이면 증명이 완료된다.

 

Union의 닫힘성(closure)을 증명해보자. 두 정규언어 A,B를 인식하는 $N_1$과 $N_2$ NFA를 이용하여, $A \cup B$를 인식하는 $N을 만든다면 아래 Figure 4의 왼쪽처럼 만들 수 있다. 오른쪽은 그것을 수학적으로 표현한 것이다.

Figure 4. Closure of Union, 왼쪽 출처[2]

 

$A \circ B$와 $A^{*}$도 Figure 5에서 간단히 소개하고 넘어간다.

Figure 5. $A \circ B$ 왼쪽, $A^{*}$ 오른쪽, 출처[2]


 

NFA와 DFA의 동등성

같은 언어를 인식하는 두 유한 오토마타를 우리는 동등하다(equivalent)고 한다. 신기하게도 모든 NFA는 항상 동등한 DFA를 갖는다. 그말인즉슨, 어떤 언어 L을 인식하는 NFA는 똑같은 언어를 인식하는 DFA로 항상 치환할 수 있다는 것이다. 아래와 같은 방식으로 증명한다.

1. 어떤 언어 L을 인식하는 NFA $N=(Q,\Sigma,\delta,q_0,F)$로부터 같은 언어 L을 인식하는 DFA $M=(Q',\Sigma',\delta',q_0',F')$을 만든다. 이 때, NFA의 ε 전이를 허용하지 않는 경우에서 허용하는 경우로 생각을 발전시킨다.

2. 새로 만든 M이 정확히 언어 L을 인식한다는 정당성(correctness)을 증명한다. 먼저, $L(N) \subseteq L(M) \Leftrightarrow w \in L(N) \text{ then } w \in L(M)$를 증명한다.

3. 2의 반대 방향을 증명한다. $L(N) \supseteq L(M)  \Leftrightarrow w \in L(M) \text{ then } w \in L(N)$

 

1의 증명 - ε가 없는 경우

더보기

$
\text{From an NFA N}=(Q,\Sigma,\delta,q_0,F), \text{ construct a DFA M} =(Q',\Sigma,\delta',q_0', F') \text{ s.t. } L(N)=L(M) \\

\begin{aligned}

& \text{1. } Q' = 2^Q, \text{which is power set of Q}\\
& \text{2. } \Sigma = \Sigma \\
& \text{3. } q_0'={q_0} \\
& \text{4. } F'\subseteq 2^Q \text{ and } F'=\{f|f \cap F \neq \phi \} \\
& \text{5. } \delta'(R,a) = \bigcup_{r \in R}^{}\delta(r,a) \text{ for every } R \in 2^Q \text{ and every symbol } a \in \Sigma

\end{aligned}
$

1의 증명 - ε가 있는 경우
앞서 설명했던 ε-closure를 활용한다. 이때, $ext(X) = \bigcup_{q \in X}^{}ext(q)$로, 집합에 대해서도 정의를 확장하여 사용하였다.

더보기

$\text{From an NFA N}=(Q,\Sigma,\delta,q_0,F), \text{ construct a DFA M} = (Q',\Sigma,\delta',q_0', F') \text{ s.t. } L(N)=L(M) \\
\begin{aligned}

& \text{1. } Q' = 2^Q, \text{which is power set of Q}\\
& \text{2. } \Sigma = \Sigma \\
& \text{3. } q_0'=ext(q_0) \\
& \text{4. } F'\subseteq 2^Q \text{ and } F'=\{f|f \cap F \neq \phi \} \\
& \text{5. } \delta'(R,a) = ext(\bigcup_{r \in R}^{}\delta(r,a)) \text{ for every } R \in 2^Q \text{ and every symbol } a \in \Sigma

\end{aligned}$

2의 증명

N의 정의로부터 M을 만든것 처럼, 어떤 문자열 w을 N에 넘겼을 때의 accepting computation history로부터, M의 computation history를 만든다. 그 후, 만든 M의 computation history 최종 결과가 최종 상태(final state)임을 보이면, 즉 accepting 임을 보이면 된다.

더보기

$

\begin{aligned}
& \text{Let }w=y_1y_2...y_s \text{ for } y_i \in \Sigma \\
& \text{ and let accepting computation history of N for w, } \\
& \pi = (q_0,w=w_0), (r_1,w_1), ... (r_i,w_i),...,(r_s,w_s=\epsilon) \\
& \text{Then, }r_0 \in ext(\{q_0\}) \text{ and } r_i \in ext(\{\delta(r_{i-1},y_i)\}) \text{ for every i} \\
& \text{And, }r_s\in F \\\\

& \text{Now, construct computation history for w in DFA M} \\
& \pi' = (Q_0,w=w_0), (Q_1,w_1), ... (Q_i,w_i),...,(Q_s,w_s=\epsilon) \\\\

& Then, \\
& \bullet\, Q_0 = \{q_0\} \\
& \bullet\, r_1 = \delta(q_0,y_1) \text{ and } Q_1 = ext(\delta(Q_0,y_1)), r_1\in Q_1\\
& \bullet\, \text{Inductively, } r_i \in Q_i \\
& \bullet\, \text{Finally, } r_s \in Q_s \text{ which means }\pi' \text{accepting computation history}

\end{aligned}
$

 

3의 증명

더보기

$
\begin{aligned}
& \text{Let }w=y_1y_2...y_s \text{ for } y_i \in \Sigma \\
& \text{ and let accepting computation history of M for w, } \\
& \pi' = (R_0,w=w_0), (R_1,w_1), ... (R_i,w_i),...,(R_s,w_s=\epsilon) \\
& \text{By definition, } R_i=\delta'(R_{i-1},y_i) \\\\

& \text{Now, construct computation history for w in NFA N} \\
& \pi = (q_0,w=w_0), (q_1,w_1), ... (q_i,w_i),...,(q_s,w_s=\epsilon) \\\\

& Then, \\
& \bullet\, \text{There exists }q_s, \text{ s.t. } q_s \in F \text{ and } q_s \in R_s\\
& \bullet\, \text{There exists }q_{s-1}\text{ s.t. } \delta(q_{s-1},y_s)=q_s \text{ and } q_{s-1} \in R_{s-1}\\
& \bullet\, \text{Inductively, } q_i \in R_i \\
& \bullet\, \text{Finally, } q_0 \in R_0

\end{aligned}$

 

이제 우리는 모든 NFA는 동등한 DFA를 가짐을 알았다. DFA로 표현가능한 언어를 우리는 정규 언어라고 부른다. 즉, 아래의 결론을 얻었다.

NFA가 인식하는 언어는 정규 언어다.

 

출처

[1] John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman, Introduction to Automata Theory, Languages and Computation, 3rd Edition, 2006, Pearson/Addision-Wesley.

[2] Michael Sipser, Introduction to the Theory of Computation, 2nd Edition (International Edition), 2006, Course Technology.


저작자표시 (새창열림)

'개인 공부' 카테고리의 다른 글

[오토마타] 16. 튜링머신(Turing Machine)  (0) 2025.11.28
[오토마타] 15. 결정 가능한 문제(Decidable Problem)  (0) 2025.11.28
[오토마타] 0. 목차  (0) 2025.11.27
[오토마타] 4. 정규표현식(Regular Expression)  (0) 2025.10.09
[오토마타] 2. 유한 비결정적 오토마타(NFA, Non-deterministic Finite Automata)  (0) 2025.10.09
'개인 공부' 카테고리의 다른 글
  • [오토마타] 16. 튜링머신(Turing Machine)
  • [오토마타] 15. 결정 가능한 문제(Decidable Problem)
  • [오토마타] 0. 목차
  • [오토마타] 4. 정규표현식(Regular Expression)
준별
준별
  • 준별
    준별개발
    준별
  • 전체
    오늘
    어제
    • 분류 전체보기 (58)
      • 개발이야기 (25)
        • 토막글 (11)
      • 일상이야기 (6)
      • 개인 공부 (23)
      • 생각과 기록 (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Linkedin
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    전산기조직
    nodejs
    맥북초기세팅
    http3.0
    필수툴
    실전압축
    조합형
    바이브코딩
    artillery
    맥북
    정보보호개론
    맥북세팅
    k9s
    persistent connection
    powerlevel10k
    zsh세팅
    http2.0
    맥북터미널세팅
    http1.0
    터미널꾸미기
    클램쉘
    http1.1
    데스크셋업
    Zsh
    데이터베이스
    zsh-autosuggestion
    이산구조
    http pipelining
    nestjs
    터미널세팅
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
준별
[오토마타] 3. DFA와 NFA의 동등성
상단으로

티스토리툴바